【问题标题】:Arduino run 2 commands at the same timeArduino同时运行2个命令
【发布时间】:2016-11-22 18:28:35
【问题描述】:

我已将 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;
}

【问题讨论】:

标签: loops arduino iot


【解决方案1】:

这是一个常见问题。 Here 是我在 Adafruit 教程部分找到的很棒答案。

链接中解释的解决方案简而言之,向您展示了如何使用millis() 函数而不是delay(),以及为什么这对于多任务处理要好得多。

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多