【雕爷学编程】Arduino动手做(117)---P10V706LED屏模组3

news2024/12/23 17:49:14

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百一十七:P10单红V706模组 32*16单元板LED显示屏

在这里插入图片描述

程序十二:滚动字母,在滚动框中一次显示一个字符
(1)Arduino参考开源代码

/*
  【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参考开源代码

/*
  【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参考开源代码

/*
  【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参考开源代码

/*
  【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参考开源代码

/*
  【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)实验场景图

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/744515.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亚马逊买家号如何绑定信用卡

要在亚马逊上绑定信用卡作为买家号的支付方式&#xff0c;请按照以下步骤进行操作&#xff1a; 1、登录亚马逊账户&#xff1a;使用您的亚马逊账户用户名和密码登录到亚马逊网站。 2、导航至"我的账户"&#xff1a;在页面右上角&#xff0c;将鼠标悬停在"你好…

安装使用docker-compose

Docker-Compose项目是Docker官方的开源项目&#xff0c;负责实现对Docker容器集群的快速编排 Docker-Compose将所管理的容器分为三层&#xff0c;分别是工程&#xff08;project&#xff09;&#xff0c;服务&#xff08;service&#xff09;以及容器&#xff08;container&…

【单周期CPU】LoongArch | LA32R | 二选一控制器MUX | 数据通路

前言&#xff1a;本章内容主要是演示在vivado下利用Verilog语言进行单周期简易CPU的设计。一步一步自己实现模型机的设计。本章先介绍单周期简易CPU中数据通路的设计。 &#x1f4bb;环境&#xff1a;一台内存4GB以上&#xff0c;装有64位Windows操作系统和Vivado 2017.4以上版…

华为OD机试真题 Java 实现【矩阵中非1的元素个数】【2023 B卷 200分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明先将[0,0]位置的值变为1。第一次同化&#xff1a;第二次同化&#xff1a; 大家好&#xff0c;我是哪吒。 一、题目描述 存在一个m*n的二维数组&#xff0c;其成员取…

小程序项目时间选择器用法

项目需求是要实现这种形式, 但是相信大家都试了各种插件,都不太合适,uView框架也不能满足自己的需要; 推荐使用:uview-ui-plus 基本上小程序遇到的单选多选 日期 省市区 都可以完美的实现,可以通过插件市场安装使用 但是要实现ui给的原型图 还需要做一下调整 弹性布局给两个选…

Linux查找关键字出现的位置

在Linux中&#xff0c;您可以使用以下命令来查找文件中关键字出现的位置&#xff1a; grep -rnw /path/to/search -e keyword其中&#xff1a; - -r 递归地搜索指定路径下的所有子目录。 - -n 显示匹配行的行号。 - -w 完整匹配单词&#xff0c;而不是部分匹配。 - /path/to/s…

pandas 重复数据处理详解

概要 重复值处理主要涉及两个部分&#xff0c;一个是找出重复值&#xff0c;第二个是删除重复值&#xff0c;也就是根据自己设定的条件进行删除操作。本次来介绍关于重复数据处理的几个常用方法。 定位重复值 对于重复值&#xff0c;我们首先需要查看这些重复值是什么样的形式…

LFU算法的详细介绍与实现

LRU 算法的淘汰策略是 Least Recently Used&#xff0c;也就是每次淘汰那些最久没被使用的数据&#xff1b;而 LFU 算法的淘汰策略是 Least Frequently Used&#xff0c;也就是每次淘汰那些使用次数最少的数据。 LRU 算法的核心数据结构是使用哈希链表 LinkedHashMap&#xff…

spring全家桶(一):如何创建springboot项目

一.如何创建springboot项目 1.通过官网网站创建项目&#xff1a;https://start.spring.io/ 2.eclipse通过插件Spring Tool Suite(sts)创建项目 3.idea默认已经有spring插件 二.程序入口 SpringBootApplication public class HelloApplication {public static void main(Strin…

Linux--获取当前进程的父进程PID(即PPID)

方法一&#xff1a;编程法 #include <sys/types.h>pid_t ppidgetppid(); 方法二&#xff1a;指令法 ps axj | head -1 && ps axj | grep 当前进程PID 注&#xff1a;你会发现&#xff0c;每次查看当前进程PID时&#xff0c;PID都不相同&#xff0c;但是它的P…

设计模式——原型模式

原型模式比较简单&#xff0c;本质就是将一个设置好一部分公共属性的对象进行克隆&#xff0c;产生出大量的对象&#xff0c;再对每个对象进行相应的个性化处理需要注意的是&#xff1a;对象克隆时&#xff0c;如果其成员变量中存在引用类型&#xff08;数组、引用对象等&#…

《人工智能.一种现代方法》原版精读思维导图-第二章

目录 书籍 相关 2. Intelligent Agents 2.1 Agents and Environments 2.2 Good Behavior: The Concept of Rationality 2.3 The Nature of Environments 2.4 The Structure of Agents summary 书籍 人工智能.一种现代方法 Artificial Intelligence. The Modern Appro…

基于LLM大模型开发Web App生成器

随着越来越多的代码生成模型公开可用&#xff0c;现在可以以我们以前无法想象的方式进行文本到网络甚至文本到应用程序。 本教程介绍了一种通过流式传输和渲染内容来生成 AI Web 内容的直接方法。 推荐&#xff1a;用 NSDT设计器 快速搭建可编程3D场景。 1、在 Node 应用程序中…

13 个最佳免费 PDF 编辑器清单

您正在寻找一款真正免费的 PDF 编辑器&#xff0c;不仅可以编辑和添加文本&#xff0c;还可以更改图像、添加您自己的图形、签署您的名字、填写表格等等&#xff1f;您来对地方了&#xff1a;我研究了这些类型的应用程序&#xff0c;以得出您正在寻找的内容的列表。 其中一些是…

element 表格套输入框

实现效果&#xff1a; 编辑&#xff1a; 查看&#xff1a;点击平台补贴展示弹窗 <el-table:data"tableData"border:header-cell-style"{background:#D7D7D7,color:#000}"style"width: 100%"row-dblclick"dbclick":cell-class-name…

c++中的时间处理(3)与sleep相关的时间函数

1、Sleep()函数 头文件&#xff1a; Windows下为&#xff1a;windows.h Linux下为&#xff1a;unistd.h 注意&#xff1a; &#xff08;1&#xff09;Sleep是区分大小写的&#xff0c;有的编译器是大写&#xff0c;有的是小写。 &#xff08;2&#xff09;Sleep括号里的时间&…

ELK中grok插件、mutate插件、multiline插件、date插件的相关配置

目录 grok 正则捕获插件 自定义表达式调用 mutate 数据修改插件 示例&#xff1a; ●将字段old_field重命名为new_field ●添加字段 ●将字段删除 ●将filedName1字段数据类型转换成string类型&#xff0c;filedName2字段数据类型转换成float类型 ●将filedName字段中…

Nginx调优和探活配置

Nginx基本参数优化 1 . worker_processes 1; # 指定 Nginx 要开启的进程数&#xff0c;结尾的数字就是进程的个数&#xff0c;可以为 auto。 这个参数调整的是 Nginx 服务的 worker 进程数&#xff0c;Nginx 有 Master 进程和 worker 进程之分&#xff0c;Master 为管理进程、真…

Web常见请求参数接收的总结

首先本文所展示的参数接收的总结&#xff0c;都是基于Spring Boot框架而言的&#xff0c;不是一般传统方式使用request对象来完成参数的接收 简单参数的接收 对于简单参数的接收&#xff0c;在Spring Boot框架中&#xff0c;在Controller类中设置对应的处理方式时&#xff0c;…

SpringMVC 中的数据验证如何使用 @Valid 注解

SpringMVC 中的数据验证如何使用 Valid 注解 在 Web 开发中&#xff0c;数据验证是一个非常重要的环节。它可以确保数据的合法性和正确性&#xff0c;保护系统不受到恶意攻击或用户误操作的影响。在 SpringMVC 中&#xff0c;我们可以使用 Valid 注解来实现数据验证。 Valid 注…