Arduino同时运行2个命令
问题描述:
我已经连接3个设备到我的Aruino Uno:伺服电机,LED和一个距离传感器。现在,当距离10厘米或更小时,我的指示灯熄灭。当距离大于10cm时,我的指示灯正在工作,这很好。但是现在,当我添加伺服电机时,我需要等待环路完成后,我的距离传感器才能将信号发送给我的LED。我怎样才能解决这个问题 ?Arduino同时运行2个命令
#include <Servo.h>
int servoPin = 9;
const int trigPin = 7;
const int echoPin = 8;
int led = 13;
long duration, cm;
Servo servo;
int angle = 0;
void setup() {
// initialize serial communication:
Serial.begin(9600);
pinMode(led,OUTPUT);
pinMode(echoPin, INPUT);
servo.attach(servoPin);
}
void loop()
{
if(afstandTotmuur() >= 10)
{
digitalWrite(led,HIGH);
}
else
{
digitalWrite(led,LOW);
}
for(angle = 0; angle < 180; angle++)
{
servo.write(angle);
delay(15);
}
}
long afstandTotmuur()
{
pinMode(trigPin, OUTPUT);
// digitalWrite(trigPin, LOW);
// delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
// convert the time into a distance
cm = microsecondsToCentimeters(duration);
return cm;
}
long microsecondsToCentimeters(long microseconds)
{
return microseconds/29/2;
}
答
这是一个常见问题。 Here是一个伟大答案我在Adafruit教程部分找到。
链接中解释的解决方案简而言之,向您展示了如何使用millis()
函数,而不是delay()
,以及为什么这对多任务更好。
+0
感谢您的信息 – olalalaa1599
http://arduino.stackexchange.com/questions/286/how-can-i-create-multiple-running-threads – m0skit0
尽管更简单的解决方案是将LED检查移到for循环中。 – m0skit0
无法获得伺服的当前位置? – McNets