为什么命令43第一次进入时此针不会触发?

时间:2016-02-19 16:12:40

标签: c++ timer arduino logic

我正在为Arduino的游戏结束计时器。基本上,程序从串口获取命令,翻转引脚,等待5秒,然后触发复位命令。它有效,但它不是第一次'43'通过序列出现。它将在第二次完成并在此之后正常工作。这是为什么?我错过了什么?

#include <elapsedMillis.h>
elapsedMillis timeElapsed; 
int pin = 13;
unsigned int wait = 5000;

//// SERIAL //////////////////////////////////////////////
byte incomingByte; // from python
int command = 0; // command (1 = open, 2 = close)
int servoCom = 0; // the incoming command shit

void setup() 
{ 
  Serial.begin(9600);
  pinMode(pin, OUTPUT);
  digitalWrite(pin, LOW);
  Serial.println("setup done");

  // wait 20 ms
  delay(20);
}

void loop()
{
  if (Serial.available() > 0) 
  {
    incomingByte = Serial.read(); 
    command = incomingByte;
    servoCom = ServoGo(command);  
  }

  if (servoCom == 43){
    digitalWrite(pin, HIGH);
    // run for 5 seconds
    if (timeElapsed >= wait) 
    { 
      // trigger reset
      servoCom = 70;  
    }
  }
  if(servoCom == 70){
    // reset 
    digitalWrite(pin, LOW);
    timeElapsed = 0; 
  } 
}

int ServoGo(int com)
{
    Serial.println("!inServoGo");
    Serial.println(com);
    return com;
}

1 个答案:

答案 0 :(得分:1)

设置时

timeElapsed未初始化为零;在第一个命令70之后它被重新初始化,然后只有命令23正常工作。