我有以下代码,我能够测试并验证它是否正常工作。
从本质上讲,电话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';
}
问题。任何人都可以帮助我理解为什么两个来源的行为不同?
答案 0 :(得分:0)
在修改后的代码中,在循环中,最初不满足if条件,因此不会调用setInterval并立即运行。