我正在尝试编程2个按钮(带有Arduino),一个将启动5秒循环,另一个可以在此时间范围内的任何点停止循环。按下“开始”按钮时,“开始”将打印到串行监视器上,如果允许循环完成,也将打印“完成”,然后再打印一行。如果按下“停止”按钮,则会向串行监视器打印“STOP”并终止循环。至少,从理论上讲,它应该如何运作。我发现的是,按下开始按钮约5次后,即使两个按钮事先都完美运行,此时“DONE”也不会打印到串行监视器上。打印的最后一件事是最近一次按下按钮的“START”。结束此操作的唯一方法是按下“停止”按钮,打印“停止”。但是,在此之后按下“开始”按钮后,代码会打印出一连串快速的“START \ nDONE”对联。任何人都可以看到我的代码有问题吗?我认为这是一个相当简单的任务,也许这只是硬件的问题,但如果它是代码的问题,我看不到它。
int startPin = 4;
int stopPin = 7;
int motorPin = 2;
boolean startState = false;
boolean stopState = false;
void setup()
{
pinMode(startPin, INPUT);
pinMode(stopPin, INPUT);
pinMode(motorPin, OUTPUT);
Serial.begin(9600);
Serial.println("setup");
}
void loop()
{
startState = digitalRead(startPin);
if(startState == false)
{
return;
}
Serial.print("START\n");
int time = millis() + 5000;
while(millis() < time)
{
stopState = digitalRead(stopPin);
if(stopState == true) {
Serial.print("STOP\n");
return;
}
analogWrite(motorPin, 255);
}
analogWrite(motorPin, 0);
Serial.print("DONE\n\n");
}
作为最后一点 - 这是我第一次使用Stack Overflow,所以如果这不是一个好问题,或者如果它已经被回答,或者我正在做其他会出现压倒一切的事情,我会提前道歉愚蠢的人比我更有经验。感谢能帮助我的人。
答案 0 :(得分:0)
首先,改变
int time = millis() + 5000;
要
unsigned long time = millis() + 5000;
millis()返回一个unsigned long,所以如果你试图将这个数字+ 5000插入到一个有符号的int中,你就会溢出int并在你的循环中引起奇怪的计算。