推荐项目:Parola —— 模块化滚动LED矩阵文本显示屏库

推荐项目:Parola —— 模块化滚动LED矩阵文本显示屏库

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


项目介绍

Parola是一个专为Arduino设计的模块化滚动文本显示库,它通过MAX7219或MAX7221 LED矩阵控制器实现,旨在构建灵活可扩展的LED显示屏。这个开源项目允许用户通过简单的拼接相同模块来创建更宽或更长的显示阵列。其设计理念类似于乐高积木,兼容标准的8x8 LED矩阵,提供了一种创新的方式来展示动态文本和简单图形。


技术剖析

Parola的精妙之处在于其高度模块化的软件架构。它不仅支持硬件SPI接口以优化通信速度,还内置了多种文本处理功能,如文本的对齐(左、中、右)、滚动效果以及动画控制。特别的是,该库能够管理多个“虚拟显示区域”(即区域划分),这意味着在单串LED模块上可以同时显示不同的信息区域。此外,Parola提供了用户自定义字体的能力,甚至可以替换个别字符,满足个性化显示需求。双高度显示的支持进一步拓宽了其创意应用范围。


应用场景

从公共展览的信息滚动条,到个人工作室的创意装饰,Parola都能大展身手。对于咖啡馆公告、小型活动计时器、科技爱好者的工作室指示牌,乃至于节日的创意灯光装置,都是其理想的应用场景。教育领域中,Parola也是教授Arduino编程与电子互动艺术的有趣工具。通过ElectroDragon提供的套件,初学者也能轻松入手,快速搭建自己的动态显示项目。


项目特点

  • 模块化设计:像乐高一样自由组合,适应不同尺寸的显示需求。
  • 丰富效果:多样化的文本滚动和进入退出动画效果,增加视觉吸引力。
  • 灵活性:支持硬件SPI,自定义字体,乃至区域能力,极大提升了显示多样性。
  • 易配置性:仅需定义模块数量即可适应新布局,简化了开发流程。
  • 社区支持:活跃于Arduino论坛,有详尽文档和教程,便于学习和求助。
  • 开源精神:基于开源许可,鼓励创新和二次开发,适合各种层次的开发者。

如果您热爱DIY,追求技术创新,或者寻找一个既实用又有趣的开源项目,Parola绝对值得尝试。不仅如此,考虑到项目的灵活度和强大的技术支持,无论是业余爱好还是专业应用,Parola都能成为您的得力助手。快加入这个充满创造性的社区,探索LED矩阵显示的新境界吧!


请注意,为了支持作者的辛勤工作,如果你喜爱并使用了Parola库,请考虑通过PayPal进行小额捐赠,这不仅是对其贡献的认可,也激励着更多开源项目的发展。

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

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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、付费专栏及课程。

余额充值