Arduino 运行 同时执行 2 个命令
Arduino run 2 commands at the same time
我已经将 3 个设备连接到我的 Arduino Uno:伺服电机、LED 和距离传感器。现在,当距离为 10 厘米或更小时,我的 LED 灯就会熄灭。当距离大于 10 厘米时,我的 LED 会亮起,这工作正常。但是现在当我添加了我的伺服电机时,我需要等待我的循环完成,然后我的距离传感器才会将信号发送到我的 LED。我该如何解决这个问题?
#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 教程部分找到的很棒答案。
link 中解释的解决方案,简而言之,向您展示了如何使用 millis()
功能而不是 delay()
以及为什么这对于多任务处理更好。
我已经将 3 个设备连接到我的 Arduino Uno:伺服电机、LED 和距离传感器。现在,当距离为 10 厘米或更小时,我的 LED 灯就会熄灭。当距离大于 10 厘米时,我的 LED 会亮起,这工作正常。但是现在当我添加了我的伺服电机时,我需要等待我的循环完成,然后我的距离传感器才会将信号发送到我的 LED。我该如何解决这个问题?
#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 教程部分找到的很棒答案。
link 中解释的解决方案,简而言之,向您展示了如何使用 millis()
功能而不是 delay()
以及为什么这对于多任务处理更好。