所以基本上下面的代码永远不会退出for循环,我需要它退出for循环,以便在它遍历每个char之后打印缓冲区最终包含的内容。 然而,正如我之前所说,循环(据我所知)只是继续前进并且不会结束,因此为什么缓冲区永远不会在循环外打印(我知道它在循环内重复打印) 。 我相当肯定,如果带有break命令的声明可以在这里诀窍,但是在盯着它看了一段时间之后,我仍然无法弄清楚它会是什么。
另一个注意事项是代码不能在void loop()
函数内,并且必须在void setup()
函数内
这是代码
char iValue;
const int bufflen = 10;
char buffer[bufflen];
void setup() {
Serial.begin(9600);
Serial.println(buffer);
int index = 0;
int i = 0;
for(i=0;i<bufflen;i++) {
while (!Serial.available()) {
;
}
iValue = Serial.read();
buffer[index] = iValue;
//Serial.println(buffer);
//Serial.println(iValue);
Serial.println(buffer);
index++;
if (index > bufflen){
break;
}
}
Serial.println(buffer);
}
void loop() {
}
答案 0 :(得分:1)
while(!Serial.available())循环是否可能导致挂起?如果串行对象没有在另一个线程中填充,那么一旦输入while循环,它将阻止任何读取更多数据的能力?
答案 1 :(得分:0)
你必须使用条件`while(Serial.available()){//做某事}``
这样,主loop()
函数将继续运行,while
循环将仅在满足条件时执行,即当有可供读取的串行数据时。
Serial.available()
函数是对void loop()
这是一个真正的Arduino程序:
int main(void)
{
init();
initVariant();
#if defined(USBCON)
USBDevice.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
正如您所看到的,如果您的程序停留在while(!Serial.avalaible())
内部循环中,则无法访问&#39; if(serialEventRun)serialEventrun();`行。因此,你遇到的问题。
以下是关于Arduino Google网上论坛的一个非常有趣的讨论:Defect In SerialEvent
希望这有帮助。