简单的按钮程序异常

时间:2014-11-23 04:38:28

标签: button arduino

我正在尝试编程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,所以如果这不是一个好问题,或者如果它已经被回答,或者我正在做其他会出现压倒一切的事情,我会提前道歉愚蠢的人比我更有经验。感谢能帮助我的人。

1 个答案:

答案 0 :(得分:0)

首先,改变

int time = millis() + 5000;

unsigned long time = millis() + 5000;

millis()返回一个unsigned long,所以如果你试图将这个数字+ 5000插入到一个有符号的int中,你就会溢出int并在你的循环中引起奇怪的计算。