驴友花雕 发表于 2022-11-23 07:24:12


驴友花雕 发表于 2022-11-23 08:51:19


驴友花雕 发表于 2022-11-23 08:57:09

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



驴友花雕 发表于 2022-11-23 09:44:41

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

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

#include <SPI.h>//导入驱动库
#include <DMD.h>
#include <TimerOne.h>
#include "SystemFont5x7.h"
#include "Arial_black_16.h"
#define ROW 1
#define COLUMN 1
#define FONT Arial_Black_16//字体16
DMD led_module(ROW, COLUMN);//行、列

void scan_module() {
led_module.scanDisplayBySPI();//模块扫描显示 By SPI
}

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

void loop() {
led_module.selectFont(FONT);//设置字体
led_module.drawMarquee("Hello World 1234567890", 25, (32 * ROW), 0);
long start = millis();
long timming = start;
boolean flag = false;
while (!flag)
{
    if ((timming + 20) < millis())
    {
      flag = led_module.stepMarquee(-1, 0);
      timming = millis();
      delay(50);//通过延时时间来调整字幕滚动快慢
    }
}
}

驴友花雕 发表于 2022-11-23 09:52:53

实验场景图





驴友花雕 发表于 2022-11-23 10:00:19

实验的视频记录
优酷:https://v.youku.com/v_show/id_XNTg3MjI2MjE0MA==.html?spm=a2hcb.playlsit.page.1

https://v.youku.com/v_show/id_XNTg3MjI2MjE0MA==.html?spm=a2hcb.playlsit.page.1

驴友花雕 发表于 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库的综合测试

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

#include <SPI.h>   //导入相关驱动库
#include <DMD.h>
#include <TimerOne.h>
#include "SystemFont5x7.h"
#include "Arial_black_16.h"

//以 dmd 的身份启动 DMD 库
#define DISPLAYS_ACROSS 1
#define DISPLAYS_DOWN 1
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);

/*-------------------------------------------------------------------
Timer1 (TimerOne) 驱动的 DMD 刷新扫描的中断处理程序,这得到
在 Timer1.initialize() 中设置的周期调用;
-------------------------------------------------------------------*/
void ScanDMD() {
dmd.scanDisplayBySPI();
}

/*-------------------------------------------------------------------
设置
在主循环开始之前由 Arduino 架构调用
-------------------------------------------------------------------*/
void setup(void) {
//初始化TimerOne用于扫描和刷新显示的中断/CPU使用率
Timer1.initialize( 5000 );         //调用 ScanDMD 的周期(以微秒为单位)。任何超过 5000 (5ms) 的时间都可以看到闪烁。
Timer1.attachInterrupt( ScanDMD );   //将 Timer1 中断附加到 ScanDMD 到 dmd.scanDisplayBySPI()
//清除/初始化内存中的DMD像素
dmd.clearScreen( true );   //true 为正常(所有像素关闭),false 为负(所有像素打开)
}

/*-------------------------------------------------------------------
环形
Arduino架构主循环
-------------------------------------------------------------------*/
void loop(void) {
byte b;
// 10 x 14 字体时钟,包括OR 和 NOR 模式演示,以便可以覆盖闪烁的冒号
dmd.clearScreen( true );
dmd.selectFont(Arial_Black_16);
dmd.drawChar(0,3, '2', GRAPHICS_NORMAL );
dmd.drawChar(7,3, '3', GRAPHICS_NORMAL );
dmd.drawChar( 17,3, '4', GRAPHICS_NORMAL );
dmd.drawChar( 25,3, '5', GRAPHICS_NORMAL );
dmd.drawChar( 15,3, ':', GRAPHICS_OR   );   //时钟冒号覆盖
delay( 1000 );
dmd.drawChar( 15,3, ':', GRAPHICS_NOR    );   //时钟冒号覆盖关闭
delay( 1000 );
dmd.drawChar( 15,3, ':', GRAPHICS_OR   );   //时钟冒号覆盖
delay( 1000 );
dmd.drawChar( 15,3, ':', GRAPHICS_NOR    );   //时钟冒号覆盖关闭
delay( 1000 );
dmd.drawChar( 15,3, ':', GRAPHICS_OR   );   //时钟冒号覆盖
delay( 1000 );

//滚动文本
dmd.drawMarquee("Scrolling Text", 14, (32 * DISPLAYS_ACROSS) - 1, 0);
long start = millis();
long timer = start;
boolean ret = false;
while (!ret) {
    if ((timer + 30) < millis()) {
      ret = dmd.stepMarquee(-1, 0);
      timer = millis();
    }
}
// 一半像素
dmd.drawTestPattern( PATTERN_ALT_0 );
delay( 1000 );

// 另一半打开
dmd.drawTestPattern( PATTERN_ALT_1 );
delay( 1000 );

// 显示一些文本
dmd.clearScreen( true );
dmd.selectFont(System5x7);
for (byte x = 0; x < DISPLAYS_ACROSS; x++) {
    for (byte y = 0; y < DISPLAYS_DOWN; y++) {
      dmd.drawString(2 + (32 * x),1 + (16 * y), "freet", 5, GRAPHICS_NORMAL );
      dmd.drawString(2 + (32 * x),9 + (16 * y), "ronic", 5, GRAPHICS_NORMAL );
    }
}
delay( 2000 );

// 在显示器外面画一个边框
dmd.clearScreen( true );
dmd.drawBox(0,0, (32 * DISPLAYS_ACROSS) - 1, (16 * DISPLAYS_DOWN) - 1, GRAPHICS_NORMAL );
delay( 1000 );

for (byte y = 0; y < DISPLAYS_DOWN; y++) {
    for (byte x = 0; x < DISPLAYS_ACROSS; x++) {
      // draw an X
      int ix = 32 * x;
      int iy = 16 * y;
      dmd.drawLine(0 + ix,0 + iy, 11 + ix, 15 + iy, GRAPHICS_NORMAL );
      dmd.drawLine(0 + ix, 15 + iy, 11 + ix,0 + iy, GRAPHICS_NORMAL );
      delay( 1000 );

      //画一个圆
      dmd.drawCircle( 16 + ix,8 + iy,5, GRAPHICS_NORMAL );
      delay( 1000 );

      // 绘制一个填充框
      dmd.drawFilledBox( 24 + ix, 3 + iy, 29 + ix, 13 + iy, GRAPHICS_NORMAL );
      delay( 1000 );
    }
}

// 条纹追逐者
for ( b = 0 ; b < 20 ; b++ )
{
    dmd.drawTestPattern( (b & 1) + PATTERN_STRIPE_0 );
    delay( 200 );
}
delay( 200 );
}

驴友花雕 发表于 2022-11-23 10:52:51

实验场景图



驴友花雕 发表于 2022-11-23 10:55:52


驴友花雕 发表于 2022-11-23 11:06:10

实验的视频记录
https://v.youku.com/v_show/id_XNTg3MTM3MTYxNg==.html?spm=a2hcb.playlsit.page.1
https://v.youku.com/v_show/id_XNTg3MTM3MTYxNg==.html?spm=a2hcb.playlsit.page.1
页: 1 [2]
查看完整版本: 【花雕动手做】看见声音,基于Arduino系列音乐可视器(32)