【雕爷学编程】Arduino动手做(117)---P10V706LED屏模组3
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百一十七:P10单红V706模组 32*16单元板LED显示屏
程序十二:滚动字母,在滚动框中一次显示一个字符
(1)Arduino参考开源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 程序十二:滚动字母,在滚动框中一次显示一个字符 */ #include <SPI.h> #include <DMD2.h> #include <fonts/SystemFont5x7.h> #include <fonts/Arial14.h> // 将宽度设置为您拥有的显示器宽度 const int WIDTH = 1; // 您可以通过注释此行来更改为较小的字体(两行), // 并取消注释它后面的行: const uint8_t *FONT = Arial14; //const uint8_t *FONT = SystemFont5x7; const char *MESSAGE = "abcdefghijklmnopqrstuvwxyz" ; SoftDMD dmd(WIDTH, 1); // DMD 控制整个显示 DMD_TextBox box(dmd); // "box" 提供一个文本框来自动写入/滚动显示 void setup() { Serial.begin(9600); //初始化串口 dmd.setBrightness(150); //设置亮度(0-255) dmd.selectFont(FONT); //设置字体 dmd.begin(); //初始化 } void loop() { const char *next = MESSAGE; //循环显示 while (*next) { Serial.print(*next); box.print(*next); delay(200); next++; } } |
(2)实验串口返回情况
(3)实验场景图
程序十三:写入滚动显示12秒倒计时
(1)Arduino参考开源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 程序十三:写入滚动显示12秒倒计时 */ #include <SPI.h>//导入相关驱动库 #include <DMD2.h> #include <fonts/Arial14.h> const int COUNTDOWN_FROM = 12; int counter = COUNTDOWN_FROM; //计数器 SoftDMD dmd(1,1); // DMD 控制整个显示 // "box" 提供一个文本框来自动写入/滚动显示 DMD_TextBox box(dmd, 0, 2); // 设置例程在您按下重置时运行一次: void setup() { Serial.begin(9600); dmd.setBrightness(255); dmd.selectFont(Arial14); dmd.begin(); } //循环例程永远一遍又一遍地运行: void loop() { Serial.print(counter); Serial.println(F( "..." )); box.print( ' ' ); box.print(counter); box.println(F( "..." )); counter--; delay(1000); //延时1000毫秒 if (counter == 0) { for ( int i = 0; i < 3; i++) { dmd.fillScreen( true ); delay(500); dmd.clearScreen(); delay(500); } box.clear(); counter = 12; } } |
(2)实验串口返回情况
(3)实验场景图
程序十四:单个 DMD 上主要绘图操作的快速演示
(1)Arduino参考开源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 程序十四:单个 DMD 上主要绘图操作的快速演示 */ #include <SPI.h>//导入驱动库 #include <DMD2.h> #include <fonts/SystemFont5x7.h> SoftDMD dmd(1, 1); // DMD 控制整个显示 // 设置例程在您按下重置时运行一次: void setup() { dmd.setBrightness(255); //设置亮度(0-255) dmd.selectFont(SystemFont5x7); //设置字体 dmd.begin(); //初始化 // 用一条与之相切的线画圆 dmd.drawCircle(24, 8, 5); dmd.drawLine(14, 9, 28, 15); // 包含填充框的轮廓框 dmd.drawBox(6, 10, 11, 15); dmd.drawFilledBox(8, 12, 9, 13); } int n = 123; //循环例程永远一遍又一遍地运行: void loop() { dmd.drawString(0, 0, String(n)); n = n + 1; delay(1000); if (n % 2 == 0) { dmd.drawFilledBox(0, 11, 4, 15, GRAPHICS_OFF); dmd.drawBox(0, 11, 4, 15); } else { dmd.drawFilledBox(0, 11, 4, 15); } |
(2)实验场景图
程序十五:各个方向滚动闪烁显示的“Hello World!”
(1)Arduino参考开源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 程序十五:各个方向滚动闪烁显示的“Hello World!” */ #include <SPI.h>//导入驱动库 #include <DMD2.h> #include <fonts/Arial14.h> //对于“Hello World”作为您的消息, //即使您只连接了一个显示器,也将宽度保留为 4 #define DISPLAYS_WIDE 3 #define DISPLAYS_HIGH 1 SoftDMD dmd(DISPLAYS_WIDE, DISPLAYS_HIGH); DMD_TextBox box(dmd, 0, 0, 32, 16); // 设置例程在您按下重置时运行一次: void setup() { dmd.setBrightness(255); dmd.selectFont(Arial14); dmd.begin(); /* 提示:如果你想要一个比你的显示器更长的字符串,只需将显示的 DISPLAYS_WIDE 值定义为比 您实际拥有的显示器数量。 */ dmd.drawString(0, 0, F( "Hello World!" )); } int phase = 0; // 0-3, 'phase' 值决定方向 //循环例程永远一遍又一遍地运行: void loop() { int steps = random(48); // 每次我们滚动一个随机距离 for ( int i = 0; i < steps; i++) { // 根据我们所处的阶段进行不同类型的滚动 switch (phase) { case 0: dmd.marqueeScrollX(1); break ; case 1: dmd.marqueeScrollX(-1); break ; case 2: dmd.marqueeScrollY(1); break ; case 3: dmd.marqueeScrollY(-1); break ; } delay(10); } //进入下一阶段 phase = (phase + 1) % 4; } |
(2)实验场景图
程序十六:模拟康威的人生游戏
(1)Arduino参考开源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 程序十六:模拟康威的人生游戏 (https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life) */ #include <SPI.h>//导入驱动库 #include <DMD2.h> // 你有多少个显示器? const int WIDTH = 2; const int HEIGHT = 1; SoftDMD dmd(WIDTH, HEIGHT); void populate_random_cells() { // 随机填充初始显示 for ( int x = 0; x < dmd.width; x++) { for ( int y = 0; y < dmd.height; y++) { // 将 30 增加到更大的数字以设置更多的初始像素 if (random(100) < 30) dmd.setPixel(x, y, GRAPHICS_ON); } } } // 设置例程在您按下重置时运行一次: void setup() { Serial.begin(9600); dmd.setBrightness(255); //设置显示亮度 dmd.begin(); //初始化 randomSeed(analogRead(0)); //随机种子(模拟读取0) populate_random_cells(); } //循环例程永远一遍又一遍地运行: void loop() { // 通过复制当前 DMD 帧内容来存储当前代 DMDFrame current_generation(dmd); long start = millis(); // 更新每个像素的下一代 bool change = false ; for ( int x = 0; x < dmd.width; x++) { for ( int y = 0; y < dmd.height; y++) { bool state = current_generation.getPixel(x, y); int live_neighbours = 0; // 计算当前一代有多少活着的邻居 for ( int nx = x - 1; nx < x + 2; nx++) { for ( int ny = y - 1; ny < y + 2; ny++) { if (nx == x && ny == y) continue ; if (current_generation.getPixel(nx, ny)) live_neighbours++; } } // 更新下一代的像素数 if (state && (live_neighbours < 2 || live_neighbours > 3)) { state = false ; change = true ; } else if (!state && (live_neighbours == 3)) { state = true ; change = true ; } dmd.setPixel(x, y, state ? GRAPHICS_ON : GRAPHICS_OFF); } } Serial.println(String( "Generation time: " ) + (millis() - start) + " ms" ); if (!change) { // 我们已经使它进入了一个不变的状态 delay(500); populate_random_cells(); //(我们无法检测到事物向前变化的稳定状态 // 然后返回,对于这些你需要按下重置!) } } |
(2)实验场景图
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!