出于某种原因,这永远不会退出 for 循环以打印出最终值
For some reason this never exits the for loop to print out the final value
所以基本上下面的代码永远不会退出 for 循环,我需要它退出 for 循环,以便在缓冲区循环通过每个字符后打印缓冲区最终包含的任何内容。但是,正如我之前所说,循环(据我所知)只是继续运行并且不会结束,因此为什么缓冲区永远不会在循环外部打印(我知道它在循环内反复打印)。我相当确定,如果带有中断命令的语句可以在这里解决问题,但是在盯着它一段时间后,我仍然无法弄清楚它会是什么。
另一个注意事项是,代码不能位于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() {
}
有没有可能虽然(!Serial.available()) 循环导致挂起?如果串行对象没有在另一个线程中填充,那么一旦进入 while 循环,它会阻止读取更多数据的任何能力吗?
你必须使用条件'while(Serial.available()) {//do something }''
这样,主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())
,则无法到达"if (serialEventRun) serialEventrun();"行。因此,您遇到的问题。
以下是Arduino Google群组中关于此问题的一个非常有趣的讨论:
希望这有帮助。
相关文章:
- 如何循环打印顶点结构
- 了解嵌套循环打印星号图案
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 如何在c++中仅使用for循环打印此代码的垂直直方图
- 使用 for 循环打印字符串数组无法正常工作 (C++)
- C++服务器程序循环打印
- 循环打印垃圾 c++ 的链表
- 使用用户输入(无矢量)从 For 循环打印图表
- 我想反转地图的值并使用基于范围的 for 循环打印它
- c++While循环打印couts两次
- 用于中断后的循环打印
- 使用 while 循环打印一系列偶数和奇数
- 我需要使用嵌套的 while 循环打印一个正方形。我想我已经用正确的逻辑对其进行了编码,但它没有给我所需的输出
- C/C++ 拼图:使用单个 for 循环打印 1.15 15.1 的值
- 我可以用cout而不是迭代器循环打印STL映射吗?
- 循环打印时出现分段故障
- 在我的程序中使用for循环打印矩阵的错误
- c++帮助循环打印星号
- C++ 对于每个循环打印一个数组
- 使用 while 循环打印两个用户输入值范围内的数字