连接Arduino Nano的OLED显示屏数值持续滚动问题求助
显示屏数值滚动偏移问题排查与修复
问题原因
光标位置未重置
你仅在setup()中设置过一次光标位置display.setCursor(0,30),但每次执行display.print()后,光标会自动移动到下一个字符的位置。而display.clearDisplay()只会清空屏幕显存,不会重置光标位置。这导致每次循环打印时,字符从上次结束的位置开始输出,不断右移直至超出屏幕,进而换行向下,表现为滚动效果。高频无延迟刷新
loop()中没有添加延迟,程序会以极高频率重复清屏、打印、显示操作,不仅浪费资源,还可能引发屏幕显示的不稳定闪烁或滚动感。
修复代码
int irsensor = 4; int sensorvalue; unsigned long previousMillis = 0; unsigned int rpm = 0; volatile unsigned int counter = 0; #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { Serial.begin(9600); pinMode(irsensor, INPUT); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); delay(2000); display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); } void loop() { sensorvalue = digitalRead(irsensor); Serial.println(sensorvalue); display.clearDisplay(); // 每次打印前重置光标位置,确保内容固定显示 display.setCursor(0, 30); display.print(sensorvalue); display.display(); // 添加延迟降低刷新频率,稳定显示 delay(100); }
关键修复点说明
- 每次清屏后重新调用
display.setCursor(0,30),让数值始终从固定位置开始打印,避免偏移。 - 添加
delay(100)控制刷新间隔,平衡数值更新及时性和显示稳定性。 - 你代码中定义的
rpm、counter、previousMillis变量目前未使用,后续开发转速计算功能时可复用。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

