You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

连接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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 04:57:39