出于某种原因,这永远不会退出for循环以打印出最终值

时间:2014-12-03 06:19:05

标签: c++ loops arduino

所以基本上下面的代码永远不会退出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() {

}

2 个答案:

答案 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

希望这有帮助。