串口使用serialEvent只能时入一次的问题
这几天用serialEvent来做一个串口读问题,代码如下void serialEvent()
{
while (Serial.available())
{
char inChar = (char)Serial.read();
if (inChar != '\n')
{
SerialString += inChar;
}
else
{
readCompleted = true;
}
}
}
在代码中的读中断来读取一个字符串,碰到换行符则置readCompleted为true
在loop中则来判断readCompleted来处理字符串
void loop()
{
while(readCompleted == false);
mm += 1;
SerialString="";
readCompleted = false; //位置1
while(readCompleted == false);
nn += 1;
}
运行后发现,只能运行到位置1,然后再也进不了serialEvent
后来改为
void loop()
{
while(readCompleted == false);
mm += 1;
SerialString="";
readCompleted=false; //位置1
}
则可以在有数据时进入了serialEvent
总结:原来serialEvent,并不是一个真真的中断,只是在loop 中一个循环时查一遍,不知是否如此??? 官網的範例中已有說明: https://www.arduino.cc/en/Tutorial/SerialEvent
/*
SerialEvent occurs whenever a new data comes in thehardware serial RX.This routine is run between each time loop() runs, so using delay inside loop can delay response.Multiple bytes of data may be available.
*/
問題是, 你改了的同樣會停在 while(readCompleted == false); 中, SerialEvent 應該同樣不能執行.
你的 loop 內應該是檢查 readCompleted 是否 true 才去執行, 而不應該用while(readCompleted == false); 去自己生成一個 loop.
对啊,他不是真真的中断,书上都说是在2次loop之间执行一次。
页:
[1]