我正在开发一个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 Ending
和Newline
,但它不起作用,有人可以帮忙吗?谢谢!
答案 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。