5276浏览
楼主: 驴友花雕

[项目] 【花雕动手做】看见声音,基于Arduino系列音乐可视器(32)

[复制链接]

驴友花雕  中级技神
 楼主|

发表于 2022-11-23 07:24:12

【花雕动手做】看见声音,基于Arduino系列音乐可视器(32)图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-23 08:51:19

【花雕动手做】看见声音,基于Arduino系列音乐可视器(32)图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-23 08:57:09

使用 Arduino 编程 P10 LED 模块,常用驱动库是
DMD.h        下载链接:https://github.com/freetronics/DMD
TimerOne.h 下载链接:https://github.com/PaulStoffregen/TimerOne

【花雕动手做】看见声音,基于Arduino系列音乐可视器(32)图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-23 09:44:41

  【花雕动手做】有趣好玩的音乐可视化系列项目(31)--LCD1602液晶屏
  项目程序之一:点亮屏幕滚动显示“Hello World 1234567890”

  1. /*
  2.   【花雕动手做】有趣好玩的音乐可视化系列项目(31)--LCD1602液晶屏
  3.   项目程序之一:点亮屏幕滚动显示“Hello World 1234567890”
  4. */
  5. #include <SPI.h>//导入驱动库
  6. #include <DMD.h>
  7. #include <TimerOne.h>
  8. #include "SystemFont5x7.h"
  9. #include "Arial_black_16.h"
  10. #define ROW 1
  11. #define COLUMN 1
  12. #define FONT Arial_Black_16//字体16
  13. DMD led_module(ROW, COLUMN);//行、列
  14. void scan_module() {
  15.   led_module.scanDisplayBySPI();//模块扫描显示 By SPI
  16. }
  17. void setup() {
  18.   Timer1.initialize(2000);
  19.   Timer1.attachInterrupt(scan_module);
  20.   led_module.clearScreen( true );
  21. }
  22. void loop() {
  23.   led_module.selectFont(FONT);//设置字体
  24.   led_module.drawMarquee("Hello World 1234567890", 25, (32 * ROW), 0);
  25.   long start = millis();
  26.   long timming = start;
  27.   boolean flag = false;
  28.   while (!flag)
  29.   {
  30.     if ((timming + 20) < millis())
  31.     {
  32.       flag = led_module.stepMarquee(-1, 0);
  33.       timming = millis();
  34.       delay(50);//通过延时时间来调整字幕滚动快慢
  35.     }
  36.   }
  37. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-23 09:52:53

实验场景图


【花雕动手做】看见声音,基于Arduino系列音乐可视器(32)图1

【花雕动手做】看见声音,基于Arduino系列音乐可视器(32)图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-23 10:00:19

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-23 10:18:39

程序说明
包括所有必需的字体库,在我们的例子中,我们使用“Arial Black 字体”进行显示。

#include <SPI.h>
#include <DMD.h>
#include <TimerOne.h>
#include "SystemFont5x7.h"
#include "Arial_black_16.h"

在下一步中,定义 LED 显示板的行数和列数。在我们的例子中,我们只使用一个模块,因此 ROW 值和 COLUMN 值将为 1。然后为显示板上滚动的文本定义字体名称 - Arial_Black_16 。
#define ROW 1 #define COLUMN 1
#define FONT Arial_Black_16 DMD led_module(ROW, COLUMN);
函数scan_module()通过 SPI 终端检查来自 Arduino 端的任何传入数据。如果是,那么它将触发一个中断引脚来执行某些事件。

void scan_module() {   
led_module.scanDisplayBySPI();
}

setup()中,初始化定时器并将中断附加到函数scan_module。函数clearScreen(true)用于设置所有像素最初都关闭以清除显示板。

void setup() {   
Timer1.initialize(2000);   
Timer1.attachInterrupt(scan_module);   
led_module.clearScreen( true );
}

然后,要在模块中显示字符串,请使用 selectFont() 函数选择字体并使用drawMarquee()函数在显示屏上打印字符串消息

led_module.selectFont(FONT);
led_module.drawMarquee("Hello World 1234567890", 25, (32 * ROW), 0);

最后,要滚动 LED 显示板上的文本,请使用一定的时间段将整个消息从右向左移动。

long start = millis();   
long timming = start;   
boolean flag = false;   
while (!flag)   
{     
if ((timming + 20) < millis())     
{        
flag = led_module.stepMarquee(-1, 0);      
timming = millis();      
}   
}



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-23 10:40:53

  【花雕动手做】有趣好玩的音乐可视化系列项目(31)--LCD1602液晶屏
  项目程序之二:Freetronics DMD库的综合测试

  1. /*
  2.   【花雕动手做】有趣好玩的音乐可视化系列项目(31)--LCD1602液晶屏
  3.   项目程序之二:Freetronics DMD库的综合测试
  4. */
  5. #include <SPI.h>   //导入相关驱动库
  6. #include <DMD.h>
  7. #include <TimerOne.h>
  8. #include "SystemFont5x7.h"
  9. #include "Arial_black_16.h"
  10. //以 dmd 的身份启动 DMD 库
  11. #define DISPLAYS_ACROSS 1
  12. #define DISPLAYS_DOWN 1
  13. DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);
  14. /*-------------------------------------------------------------------
  15.   Timer1 (TimerOne) 驱动的 DMD 刷新扫描的中断处理程序,这得到
  16.   在 Timer1.initialize() 中设置的周期调用;
  17. -------------------------------------------------------------------*/
  18. void ScanDMD() {
  19.   dmd.scanDisplayBySPI();
  20. }
  21. /*-------------------------------------------------------------------
  22.   设置
  23.   在主循环开始之前由 Arduino 架构调用
  24. -------------------------------------------------------------------*/
  25. void setup(void) {
  26.   //初始化TimerOne用于扫描和刷新显示的中断/CPU使用率
  27.   Timer1.initialize( 5000 );           //调用 ScanDMD 的周期(以微秒为单位)。任何超过 5000 (5ms) 的时间都可以看到闪烁。
  28.   Timer1.attachInterrupt( ScanDMD );   //将 Timer1 中断附加到 ScanDMD 到 dmd.scanDisplayBySPI()
  29.   //清除/初始化内存中的DMD像素
  30.   dmd.clearScreen( true );   //true 为正常(所有像素关闭),false 为负(所有像素打开)
  31. }
  32. /*-------------------------------------------------------------------
  33.   环形
  34.   Arduino架构主循环
  35. -------------------------------------------------------------------*/
  36. void loop(void) {
  37.   byte b;
  38.   // 10 x 14 字体时钟,包括OR 和 NOR 模式演示,以便可以覆盖闪烁的冒号
  39.   dmd.clearScreen( true );
  40.   dmd.selectFont(Arial_Black_16);
  41.   dmd.drawChar(  0,  3, '2', GRAPHICS_NORMAL );
  42.   dmd.drawChar(  7,  3, '3', GRAPHICS_NORMAL );
  43.   dmd.drawChar( 17,  3, '4', GRAPHICS_NORMAL );
  44.   dmd.drawChar( 25,  3, '5', GRAPHICS_NORMAL );
  45.   dmd.drawChar( 15,  3, ':', GRAPHICS_OR     );   //时钟冒号覆盖
  46.   delay( 1000 );
  47.   dmd.drawChar( 15,  3, ':', GRAPHICS_NOR    );   //时钟冒号覆盖关闭
  48.   delay( 1000 );
  49.   dmd.drawChar( 15,  3, ':', GRAPHICS_OR     );   //时钟冒号覆盖
  50.   delay( 1000 );
  51.   dmd.drawChar( 15,  3, ':', GRAPHICS_NOR    );   //时钟冒号覆盖关闭
  52.   delay( 1000 );
  53.   dmd.drawChar( 15,  3, ':', GRAPHICS_OR     );   //时钟冒号覆盖
  54.   delay( 1000 );
  55.   //滚动文本
  56.   dmd.drawMarquee("Scrolling Text", 14, (32 * DISPLAYS_ACROSS) - 1, 0);
  57.   long start = millis();
  58.   long timer = start;
  59.   boolean ret = false;
  60.   while (!ret) {
  61.     if ((timer + 30) < millis()) {
  62.       ret = dmd.stepMarquee(-1, 0);
  63.       timer = millis();
  64.     }
  65.   }
  66.   // 一半像素
  67.   dmd.drawTestPattern( PATTERN_ALT_0 );
  68.   delay( 1000 );
  69.   // 另一半打开
  70.   dmd.drawTestPattern( PATTERN_ALT_1 );
  71.   delay( 1000 );
  72.   // 显示一些文本
  73.   dmd.clearScreen( true );
  74.   dmd.selectFont(System5x7);
  75.   for (byte x = 0; x < DISPLAYS_ACROSS; x++) {
  76.     for (byte y = 0; y < DISPLAYS_DOWN; y++) {
  77.       dmd.drawString(  2 + (32 * x),  1 + (16 * y), "freet", 5, GRAPHICS_NORMAL );
  78.       dmd.drawString(  2 + (32 * x),  9 + (16 * y), "ronic", 5, GRAPHICS_NORMAL );
  79.     }
  80.   }
  81.   delay( 2000 );
  82.   // 在显示器外面画一个边框
  83.   dmd.clearScreen( true );
  84.   dmd.drawBox(  0,  0, (32 * DISPLAYS_ACROSS) - 1, (16 * DISPLAYS_DOWN) - 1, GRAPHICS_NORMAL );
  85.   delay( 1000 );
  86.   for (byte y = 0; y < DISPLAYS_DOWN; y++) {
  87.     for (byte x = 0; x < DISPLAYS_ACROSS; x++) {
  88.       // draw an X
  89.       int ix = 32 * x;
  90.       int iy = 16 * y;
  91.       dmd.drawLine(  0 + ix,  0 + iy, 11 + ix, 15 + iy, GRAPHICS_NORMAL );
  92.       dmd.drawLine(  0 + ix, 15 + iy, 11 + ix,  0 + iy, GRAPHICS_NORMAL );
  93.       delay( 1000 );
  94.       //画一个圆
  95.       dmd.drawCircle( 16 + ix,  8 + iy,  5, GRAPHICS_NORMAL );
  96.       delay( 1000 );
  97.       // 绘制一个填充框
  98.       dmd.drawFilledBox( 24 + ix, 3 + iy, 29 + ix, 13 + iy, GRAPHICS_NORMAL );
  99.       delay( 1000 );
  100.     }
  101.   }
  102.   // 条纹追逐者
  103.   for ( b = 0 ; b < 20 ; b++ )
  104.   {
  105.     dmd.drawTestPattern( (b & 1) + PATTERN_STRIPE_0 );
  106.     delay( 200 );
  107.   }
  108.   delay( 200 );
  109. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-23 10:52:51

实验场景图

【花雕动手做】看见声音,基于Arduino系列音乐可视器(32)图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-23 10:55:52

【花雕动手做】看见声音,基于Arduino系列音乐可视器(32)图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-23 11:06:10

回复

使用道具 举报

12
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail