Arduino序列事件没有返回

时间:2013-08-10 05:36:00

标签: serial-port arduino

我正在开发一个Arduino项目,并希望通过arduino Serial事件从Serial port接收一些命令。但是它始终不会满足条件,使得不知道串行事件的代码已经完成。这是我的代码。

void serialEvent() {
    while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read(); 
    if (inChar == '`')
    {
        // add it to the inputString:
        inputString += inChar;
        // if the incoming character is a newline, set a flag
        // so the main loop can do something about it:
        if (inChar == '|') {
            settingsReceived = true; // <----- This will never be called
            Serial.println("true"); // <------ Nor this will too
        }  
    }
  }
}

我已尝试从串行监视器传递字符串`Hello|,但它不会响应。此外,我已尝试Line ending No Line EndingNewline,但它不起作用,有人可以帮忙吗?谢谢!

2 个答案:

答案 0 :(得分:2)

我已经发现了问题,Serial.read()每次只读取一个字节,例如,`Hello|将被拆分为

` H e l l o |  

所以第一次,if (inChar == '`')为真,因此输入内部的动作,但是从第二个char,(H,e,l,l,o,|)是不是字符“`”,意思是if (inChar == '`')不是真的,在此之后不让它进入条件。

这应该是支持者的方式:

void serialEvent() {
    if (Serial.available())
    {
       char inChar = (char)Serial.read();
       if (inChar != '`')
       {
         return;    // <----- Rejecting the char if not starting with `
       } 
    }

    while (Serial.available()) {
    // get the new byte:
      char inChar = (char)Serial.read(); 
    // add it to the inputString:
      inputString += inChar;
    // if the incoming character is a newline, set a flag
    // so the main loop can do something about it:
      if (inChar == '|') {
        settingsReceived = true;
        Serial.println("true");
      }

    }
}

答案 1 :(得分:1)

草图中是否定义了inputstring?此外,loop()setup()还有一些任务需要完成。请参阅:http://arduino.cc/en/Tutorial/SerialEvent此页面有一个很好的开始示例,首先让它工作,然后根据您的特定代码进行修改。

键入“Hello |”时然后按回车,什么是'|'对于?您是否有理由不测试'\ n'作为行终止字符?

另外,您正在测试inChar =='`'然后将其添加到字符串中,但您输入的是“Hello”?串行I / O一次传递一个字符,因此您需要允许输入的inChars。