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

ESP32使用MD_Parola驱动FC16_HW矩阵屏无法切换滚动文本

问题分析与解决思路

核心问题点

  • 变量作用域错误:你在loop的if块内重新定义了局部变量one,这个变量和全局的one是完全独立的两个内存空间,修改局部变量不会影响全局数组的值,而MD_Parola初始化时绑定的是全局数组的内存地址,所以滚动文本不会更新。
  • 缺少文本更新步骤:Display.displayReset()仅重置动画状态,但没有告知显示屏要滚动新内容,必须重新调用displayScroll()传入更新后的文本才能生效。

修改后的代码示例

#include <WiFi.h>
#include <HTTPClient.h>
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CS_PIN 5

MD_Parola Display = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
#define BUF_SIZE 75
char one[BUF_SIZE] = {"hi"};

void setup() {
  
  Serial.begin(115200);
  Display.begin();
  Display.setIntensity(15);
  Display.displayClear();
  Display.displayScroll(one, PA_CENTER, PA_SCROLL_LEFT, 100);
}

void loop() 
{
  if(Display.displayAnimate()){
    // 直接修改全局数组内容,避免局部变量覆盖
    strncpy(one, "hello", BUF_SIZE-1);
    one[BUF_SIZE-1] = '\0'; // 确保字符串以结束符结尾,防止乱码
    
    // 重置动画后,必须重新调用displayScroll设置新文本
    Display.displayReset();
    Display.displayScroll(one, PA_CENTER, PA_SCROLL_LEFT, 100);
  }
}

后续扩展注意事项

  • 若要从Web服务器获取文本,只需在获取到内容后用strncpy这类安全的字符串拷贝函数更新全局数组one,再执行displayReset()和displayScroll()即可。
  • 务必保证文本长度不超过BUF_SIZE,且字符串末尾带有\0结束符,否则MD_Parola可能读取到乱码。

内容的提问来源于stack exchange,提问作者ádám homonnay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:05:47