MD_Parola库教程:模组化LED矩阵文本滚动显示

MD_Parola库教程:模组化LED矩阵文本滚动显示

MD_ParolaLibrary for modular scrolling LED matrix text displays项目地址:https://gitcode.com/gh_mirrors/md/MD_Parola

1. 项目介绍

MD_Parola是一个专为Arduino设计的库,用于在模组化的LED矩阵上实现特殊文字效果显示。它基于MD_MAX72xx库来控制硬件,提供了简化的方法来在LED矩阵上展示文本特效。作者为majicDesigns,目前由marco_c维护。这个库高度兼容各种Arduino架构,可以在所有常见的Arduino板上使用。通过这个库,开发者能够轻松地创建滚动文本、动画以及其他视觉效果,非常适合制作动态显示屏或艺术装置。

2. 项目快速启动

安装库

首先,你需要将MD_Parola库添加到你的Arduino开发环境中。最简单的方式是通过Arduino IDE的库管理器进行安装:

  1. 打开Arduino IDE。
  2. 转到“Sketch” -> “Include Library” -> “Manage Libraries…”。
  3. 在搜索框中输入“MD_Parola”,找到库并点击安装。

示例代码运行

安装完成后,可以通过一个简单的示例开始体验MD_Parola的功能:

#include <MD_Parola.h>
#include <MD_MAX72xx.h>

#define HARDWARE_TYPE     MD_Parola_HW::Matrix_Half_Height_Serial
#define DATA_PIN          6
#define CLK_PIN           7
#define CS_PIN            8
#define ZONES             1

MD_Parola display = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, ZONES);

void setup() {
    display.begin();
    display.displayTextByLine("Hello", PA_CENTER);
}

void loop() {
    display.animate(ZONE_ALL);
    delay(250);
}

这段代码配置了基本的硬件设置,并在矩阵上循环显示“Hello”文本,居中对齐,每次显示后都会执行一次动画效果。

3. 应用案例和最佳实践

在设计LED矩阵显示时,理解字符编码和区位替换至关重要。利用MD_Parola提供的addChar方法,你可以自定义字符,增强文本显示的个性化。例如,创建品牌标志或者特定的图标可以提升用户体验。

最佳实践包括:

  • 硬件校准:确保正确配置硬件类型和连接引脚。
  • 电源管理:LED矩阵可能消耗大量电流,确保使用足够强大的电源。
  • 优化动画效率:合理规划动画逻辑,避免不必要的延迟,以保持流畅的显示效果。

4. 典型生态项目

MD_Parola常被应用于创意装置、DIY电子钟、信息公告牌等项目中。这些项目往往结合了Arduino的可编程性和LED矩阵的视觉吸引力,创造出了既有技术感又富有创意的作品。例如,一个时间或天气预报显示板,不仅能显示基本信息,还能通过定制动画增加趣味性。

在社区和论坛中,你经常可以看到爱好者分享他们使用MD_Parola构建的项目,从简单的消息滚动条到复杂的交互式安装艺术,不一而足。这些应用展示了该库的强大适应性和无限的创意空间。


以上就是MD_Parola库的基础教程,无论是初学者还是进阶用户,都能通过这个库打开LED矩阵显示的创新之门。记得查看官方GitHub仓库和相关文档,以获取最新信息和技术支持。

MD_ParolaLibrary for modular scrolling LED matrix text displays项目地址:https://gitcode.com/gh_mirrors/md/MD_Parola

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这里提供一个基于Arduino和MAX7219四合一点阵模块的频谱显示代码,可以实现从麦克风输入的音频信号的频谱分析并在点阵模块上显示出来。代码如下: ``` c++ #include <MD_MAX72xx.h> #include <MD_Parola.h> #include <MD_Arduboy.h> #include <FFT.h> #define NUM_ROWS 8 // 点阵行数 #define NUM_COLS 32 // 点阵列数 #define DATA_PIN 11 // 数据引脚 #define CLK_PIN 13 // 时钟引脚 #define CS_PIN 10 // 片选引脚 MD_MAX72XX mx = MD_MAX72XX(DATA_PIN, CLK_PIN, CS_PIN, 4); // 初始化点阵模块 MD_Parola P = MD_Parola(DATA_PIN, CLK_PIN, CS_PIN, 4); // 初始化Parola #define SAMPLES 128 // 采样点数 #define LOG_SAMPLES 7 // 采样点数的对数 #define SAMPLE_RATE 8000 // 采样率 byte spectrum[NUM_COLS]; // 频谱数据 byte peak[NUM_COLS]; // 峰值数据 byte prev_spectrum[NUM_COLS]; // 上一帧的频谱数据 byte prev_peak[NUM_COLS]; // 上一帧的峰值数据 FFT fft = FFT(); // 初始化FFT void setup() { mx.begin(); // 初始化点阵模块 P.begin(); // 初始化Parola P.setInvert(false); // 设置不反转显示 P.setIntensity(2); // 设置亮度 P.displayClear(); // 清空显示 } void loop() { // 读取音频信号并进行FFT分析 int signal[SAMPLES]; for (int i = 0; i < SAMPLES; i++) { signal[i] = analogRead(A0) - 512; // 读取麦克风信号并去除直流分量 delayMicroseconds(1000000 / SAMPLE_RATE); } fft.Windowing(signal, SAMPLES, FFT_WIN_TYP_HAMMING, FFT_FORWARD); fft.Compute(signal, SAMPLES, FFT_FORWARD); fft.ComplexToMagnitude(signal, SAMPLES); // 更新频谱数据 for (int i = 0; i < NUM_COLS; i++) { int start = pow(2, i * LOG_SAMPLES / NUM_COLS); int end = pow(2, (i + 1) * LOG_SAMPLES / NUM_COLS) - 1; float sum = 0; for (int j = start; j <= end; j++) { sum += signal[j]; } spectrum[NUM_COLS - 1 - i] = sum / (end - start + 1); // 更新峰值数据 if (spectrum[NUM_COLS - 1 - i] > peak[NUM_COLS - 1 - i]) { peak[NUM_COLS - 1 - i] = spectrum[NUM_COLS - 1 - i]; } else if (peak[NUM_COLS - 1 - i] > 0) { peak[NUM_COLS - 1 - i]--; } } // 绘制频谱图 for (int i = 0; i < NUM_COLS; i++) { for (int j = 0; j < NUM_ROWS; j++) { if (spectrum[i] > (NUM_ROWS - j - 1) * 32) { mx.setPoint(i, j, true); } else { mx.setPoint(i, j, false); } } } // 绘制峰值图 for (int i = 0; i < NUM_COLS; i++) { for (int j = 0; j < NUM_ROWS; j++) { if (peak[i] > (NUM_ROWS - j - 1) * 32) { if (prev_peak[i] > peak[i]) { mx.setPoint(i, j, true); } } else { if (prev_spectrum[i] > spectrum[i]) { mx.setPoint(i, j, false); } } } } // 保存上一帧的数据 memcpy(prev_spectrum, spectrum, NUM_COLS); memcpy(prev_peak, peak, NUM_COLS); // 点阵模块显示 mx.flush(); // 清空显示 P.displayClear(); delay(1000); } ``` 代码中使用了FFT对采样的音频信号进行频谱分析,并将分析结果显示在点阵模块上。具体实现过程如下: 1. 在`setup()`函数中初始化点阵模块和Parola。 2. 在`loop()`函数中读取麦克风信号,并进行FFT分析,得到频谱数据。 3. 更新频谱数据,并根据频谱数据更新峰值数据。 4. 绘制频谱图和峰值图,并保存上一帧的数据。 5. 点阵模块显示。 6. 清空Parola显示,等待1秒。 需要注意的是,这个代码只是一个简单的示例,可能存在一些问题,比如频谱数据的计算方法、峰值数据的更新策略等。如果需要更加精确和稳定的频谱分析结果,需要对代码进行优化和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

窦恺墩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值