【发布时间】:2016-11-10 17:19:36
【问题描述】:
我正在尝试制作自己的延迟功能。简而言之,mydelay 函数每secs 秒调用一次toggled 函数。代码写得不好,我知道(这是第一个版本)。但我只是想让它正常工作。然后我会重构它。但我有一些意想不到的错误。 x 函数中的循环第一次正常工作。它打印“I am in while” 1 秒钟,然后打印“我正在结束 mydelay”,这是我想要的行为。但是在完成x 中的循环之后。第二次循环的时候。它进入mydelay 函数(没关系)。但是它根本没有打印“我在一段时间”。它只是打印“我正在结束 mydelay”,这不好。
代码如下:
#include <Arduino.h>
int led = 7;
void setup() {
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop() {
x();
Serial.println("Im ending main loop");
}
void x() {
for (int i = 0; i <= 10; i++) {
mydelay(led, 0, 1);
mydelay(led, 1, 1);
}
}
void mydelay(int pin, int hol, int secs) {
int starttime = millis();
while ((millis() - starttime) <= (secs * 1000)) Serial.println("I am in while");
toggled(pin, hol);
Serial.println("Im ending mydelay");
}
void toggled(int pin, int hol) {
digitalWrite(led, hol);
}
【问题讨论】:
-
我认为问题可能出在 millis 上,自 arduino 开始程序以来,它会一直返回毫秒,我认为最终 millis-starttime 将大于 secs * 1000