Arduino串口触发LCD显示后持续运行问题求助
解决Arduino LCD显示后无法保持空白、重复显示的问题
你的问题核心在于flag1和flag2变量在触发后没有重置为false,导致每次loop()循环都会重复执行显示、延迟、清屏的逻辑——清屏后马上又重新显示文本,看起来就像内容一直停留在屏幕上。
修改后的代码如下:
#include <LiquidCrystal.h> boolean flag1 = false, flag2 = false; // 初始化状态为false const int rs = 3, en = 2, d4 = 4, d5 = 5, d6 = 6, d7 = 7; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); void setup() { Serial.begin(9600); lcd.begin(16, 2); lcd.print("hello"); delay(1000); lcd.clear(); } void loop() { lcd.setCursor(0, 0); if(Serial.available()) { int c = Serial.read(); if(c == 49) { // 收到数字1 flag1 = true; flag2 = false; } else if(c == 50) { // 收到数字2 flag2 = true; flag1 = false; } } if(flag1) { lcd.print("location 1"); // 用print输出字符串更合适 delay(3000); lcd.clear(); flag1 = false; // 执行完后重置flag,避免重复触发 } if(flag2) { lcd.print("location 2"); delay(3000); lcd.clear(); flag2 = false; // 重置flag } delay(50); }
关键修改说明:
- 初始化flag变量:一开始就把
flag1和flag2设为false,避免初始状态不确定的问题 - 执行完显示后重置flag:在
lcd.clear()之后把对应的flag设回false,确保只会执行一次显示-延迟-清屏的流程,之后不会重复触发 - 替换lcd.write为lcd.print:
write()更适合输出单个字符,输出字符串用print()语义更准确,效果一致
修改后,发送数字1或2时,LCD会显示对应内容3秒,然后清屏保持空白,直到收到下一个数字再重复该流程。
内容的提问来源于stack exchange,提问作者Arcco Playz
相关产品推荐
相关产品推荐

