arduino while循环只执行一次
arduino while loop only executes once
首先,我是这个网站和 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 循环只运行一次。我没有收到任何错误消息,第一个字符工作正常。
提前致谢!
首先,让我们从代码中的实际错误开始。查看您的循环
while(!loopend==loopcount){
if (content.charAt(loopcount)==' '){
lcd.print(' ');
} else {
lcd.print('_');
}
loopcount++;
}
问题出在 !操作员。看起来您的循环应该在 loopend 等于 loopcount 时立即结束。但要使它起作用,您必须将其写为 !(loopend == loopcount)
或 loopend != loopcount
。因为它首先否定循环结束,然后将它与循环计数进行比较。无论 loopend 的值如何,只要 loopcount 大于零,这就会使条件评估为真。因此,将其修复为这些替代方案中的任何一个(尽管使用 != 更干净 imo)。
但是,为避免将来出现此类错误,您可以进行一些设计更改。首先,没有理由将循环迭代变量(loopcount 和 loopend)限定在设置函数之外。您可以在该函数中声明和初始化它们,这样它们就不会具有全局范围。其次,使用 for 循环而不是 while 循环将减少出错的机会,因为这正是 for 循环的用途。
那么循环代码就会变成
int len = content.length();
for (int i = 0; i < len; i++) {
if(content.charAt(i)==' '){
lcd.print(' ');
} else{
lcd.print('_');
}
}
最后,您真的应该缩进您的代码。我不确定您的代码是否在您的开发环境中正确缩进,并且它只是在这个问题上搞砸了。但是,如果您必须努力查看代码块的开始和结束位置,就会更难发现错误。
不知道有没有帮助
#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);
}
void loop(){
// while(!Serial.available()){}
while(Serial.available()) {
character = Serial.read();
delay(5);
content.concat(character);
loopend=content.length();
}
while(loopcount < loopend){
if(content.charAt(loopcount)==' '){
Serial.println(' ');
}else{
Serial.print('_');
Serial.print(" ");
loopcount++;}
}
delay(5);
}
首先,我是这个网站和 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 循环只运行一次。我没有收到任何错误消息,第一个字符工作正常。 提前致谢!
首先,让我们从代码中的实际错误开始。查看您的循环
while(!loopend==loopcount){
if (content.charAt(loopcount)==' '){
lcd.print(' ');
} else {
lcd.print('_');
}
loopcount++;
}
问题出在 !操作员。看起来您的循环应该在 loopend 等于 loopcount 时立即结束。但要使它起作用,您必须将其写为 !(loopend == loopcount)
或 loopend != loopcount
。因为它首先否定循环结束,然后将它与循环计数进行比较。无论 loopend 的值如何,只要 loopcount 大于零,这就会使条件评估为真。因此,将其修复为这些替代方案中的任何一个(尽管使用 != 更干净 imo)。
但是,为避免将来出现此类错误,您可以进行一些设计更改。首先,没有理由将循环迭代变量(loopcount 和 loopend)限定在设置函数之外。您可以在该函数中声明和初始化它们,这样它们就不会具有全局范围。其次,使用 for 循环而不是 while 循环将减少出错的机会,因为这正是 for 循环的用途。
那么循环代码就会变成
int len = content.length();
for (int i = 0; i < len; i++) {
if(content.charAt(i)==' '){
lcd.print(' ');
} else{
lcd.print('_');
}
}
最后,您真的应该缩进您的代码。我不确定您的代码是否在您的开发环境中正确缩进,并且它只是在这个问题上搞砸了。但是,如果您必须努力查看代码块的开始和结束位置,就会更难发现错误。
不知道有没有帮助
#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);
}
void loop(){
// while(!Serial.available()){}
while(Serial.available()) {
character = Serial.read();
delay(5);
content.concat(character);
loopend=content.length();
}
while(loopcount < loopend){
if(content.charAt(loopcount)==' '){
Serial.println(' ');
}else{
Serial.print('_');
Serial.print(" ");
loopcount++;}
}
delay(5);
}