arduino while循环只执行一次

时间:2016-04-11 03:32:55

标签: while-loop arduino lcd

首先,我是这个网站和arduino的新手,所以我确定这只是一个愚蠢的错误。

我正在努力让我的arduino玩刽子手。它不完整,所以它目前所做的只是接收串行输入并在16x2 LCD屏幕上制作下划线和空格。

我的代码看起来像这样。

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
String content = "";
int loopcount=0;
int loopend;
char character;
void setup(){
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.setCursor(0,1);
  while(!Serial.available()){}

  while(Serial.available()) {
    character = Serial.read();
    delay(5);
    content.concat(character);
  }

  loopend=content.length();

  while(!loopend==loopcount){
    if(content.charAt(loopcount)==' '){
    lcd.print(' ');
  }else{
    lcd.print('_');
  }

  loopcount++;
  }
}

void loop(){
}

问题是,打印''或'_'的while循环只运行一次。我没有收到错误消息,第一个字符工作正常。 提前谢谢!

1 个答案:

答案 0 :(得分:2)

首先,让我们从代码中的实际错误开始。看着你的循环

while(!loopend==loopcount){
    if (content.charAt(loopcount)==' '){
        lcd.print(' ');
    } else {
        lcd.print('_');
    }
    loopcount++;
}

问题是操作的顺序了!运营商。看起来你的循环应该在loopend等于loopcount时结束。但要实现这一点,您必须将其写为!(loopend == loopcount)loopend != loopcount。因为它首先否定loopend,然后将它与loopcount进行比较。这使得一旦loopcount大于零,条件评估为真,无论loopend的值如何。所以要解决它中的任何一个(尽管使用!=更清洁的imo)。

但是,为避免将来出现此类错误,您可以进行一些设计更改。首先,没有理由将循环迭代变量(loopcount和loopend)限定在setup函数之外。您可以在该函数中声明和初始化它们,这样他们就不会拥有全局范围。第二个使用for循环而不是while循环将减少发生错误的机会,因为这正是循环所针对的场景。

那么循环代码就会变成

int len = content.length();
for (int i = 0; i < len; i++) {
    if(content.charAt(i)==' '){
       lcd.print(' ');
    } else{
       lcd.print('_');
    }
}

最后,你应该真正缩进你的代码。我不确定您的代码是否在您的开发环境中正确缩进,并且它在这个问题中搞砸了。但是,如果你必须努力查看代码块的开始和结束位置,那么很难看出错误。