set Timer在void loop()arduino中不起作用

时间:2016-07-19 18:00:03

标签: arduino arduino-uno

我有以下代码,我能够测试并验证它是否正常工作。

从本质上讲,电话myThread.setInterval(5000);会让 led 5秒之后开始闪烁。

#include <Thread.h>

Thread myThread = Thread();
char powerValue;
int ledPin1 = 2;
boolean flag = false;

void myThreadCallback() {
    digitalWrite(ledPin1, HIGH);
}

void setup() {
    pinMode(ledPin1, OUTPUT);
    digitalWrite(ledPin1, LOW);
    Serial.begin(9600);

    myThread.onRun(myThreadCallback);
    flag =  true;
    myThread.setInterval(5000);
}

void loop() {
    if (Serial.available()) {
        powerValue = Serial.read();
        Serial.println(powerValue);
    }

    if (powerValue == 'A' ) {

    } else if (powerValue == 'a' ) {
        digitalWrite(ledPin1, LOW);
    }

    if (myThread.shouldRun() && flag == true)
        myThread.run();

    powerValue = 'Z';
}

我写了一个稍微变化的代码,它将调用推送到 loop()代码中,如下所示。

但是,由于某些我不了解的原因,使用此代码时, led 会从一开始就亮起,而不是等待 5秒

#include <Thread.h>

Thread myThread = Thread();
char powerValue;
int ledPin1 = 2;
boolean flag = false;

void myThreadCallback() {
    digitalWrite(ledPin1, HIGH);
}

void setup() {
    pinMode(ledPin1, OUTPUT);
    digitalWrite(ledPin1, LOW);
    Serial.begin(9600);

    myThread.onRun(myThreadCallback);
}

void loop() {
    if (Serial.available()) {
        powerValue = Serial.read();
        Serial.println(powerValue);
    }

    if (powerValue == 'A' ) {
        flag =  true;
        myThread.setInterval(5000);
        // checks if thread should run
    } else if (powerValue == 'a' ) {
        digitalWrite(ledPin1, LOW);
    }

    if (myThread.shouldRun() && flag == true)
        myThread.run();

    powerValue = 'Z';
}

问题。任何人都可以帮助我理解为什么两个来源的行为不同?

1 个答案:

答案 0 :(得分:0)

在修改后的代码中,在循环中,最初不满足if条件,因此不会调用setInterval并立即运行。