c++趣味编程玩转物联网:树莓派Pico控制 LED点阵屏

8×8 LED点阵屏是一种常见的数字显示设备,被广泛应用于电子时钟、公交车显示屏和游戏设备中。在本项目中,我们使用树莓派Pico开发板,通过I2C协议驱动HT16K33芯片,实现点阵屏显示心形图案、倒计时、动态矩形和动态圆等内容。本文详细介绍硬件连接、库的使用以及C++代码实现,帮助开发者掌握点阵屏控制技术。


一、项目目标与硬件清单

1. 项目目标

通过树莓派Pico控制8×8点阵屏实现:

  • 心形图案的显示。
  • 倒计时数字显示。
  • 动态矩形和动态圆的绘制。
  • 显示“I Love Coding!”文本内容。
2. 所需硬件

  • 树莓派Pico开发板 × 1
  • 8×8 LED点阵屏模块(HT16K33驱动芯片) × 1
  • 4P转杜邦线 × 1
  • USB数据线 × 1

二、8×8点阵屏与HT16K33简介

1. HT16K33芯片特点
  • 低功耗:适合便携设备。
  • I2C通信:大幅简化引脚使用,仅需时钟和数据引脚。
  • 多功能:支持动态显示、亮度调节和多种图案绘制。
2. 通信地址

HT16K33模块的I2C地址由拨码开关决定,本文使用的模块地址固定为 0x70


三、电路连接

1. 接线说明
  • CLK(时钟):接Pico的GP20。
  • DIO(数据):接Pico的GP21。
  • VCCGND:分别接Pico的3.3V和GND。
2. 电路图和接线图

根据模块与Pico的引脚定义,完成硬件连接,确保模块与开发板的电源、电平兼容。


四、代码实现与解析

1. 必要的库安装

本项目使用了 Matrix 库来控制点阵屏,安装步骤如下:

  1. 打开Arduino IDE。
  2. 点击“项目” → “加载库” → “添加 .ZIP 库”。
  3. 选择 Matrix.ZIP 文件并导入。
2. 完整代码实现

以下是实现动态显示功能的完整代码:

#include "Matrix.h"// 定义I2C引脚
Matrix matrix(20, 21);void setup() {matrix.begin(0x70);       // 初始化点阵屏matrix.setBrightness(8);  // 设置亮度(0-15)
}const int LED_ON = 1;// 心形图案定义
uint8_t heart[8] = {0b01100110,  // ##  ##0b10011001,  // #  ##  #0b10000001,  // #      #0b10000001,  // #      #0b01000010,  //  #    # 0b00100100,  //   #  #  0b00011000,  //    ##   0b00000000   //         
};void loop() {// 倒计时数字for (int i = 9; i >= 0; i--) {matrix.clear();matrix.setCursor(2, 0);matrix.print(i);matrix.writeDisplay();delay(500);}// 动态矩形for (int size = 6; size > 0; size -= 2) {matrix.clear();matrix.drawRect((8 - size) / 2, (8 - size) / 2, size, size, LED_ON);matrix.writeDisplay();delay(500);}// 动态圆for (int radius = 1; radius <= 3; radius++) {matrix.clear();matrix.drawCircle(3, 3, radius, LED_ON);matrix.writeDisplay();delay(500);}// 显示心形图案matrix.clear();for (uint8_t y = 0; y < 8; y++) {for (uint8_t x = 0; x < 8; x++) {if (heart[y] & (1 << (7 - x))) {matrix.drawPixel(x, y, LED_ON);}}}matrix.writeDisplay();delay(1000);// 显示文本matrix.clear();matrix.drawStr("I Love Coding!!");delay(1000);
}

五、代码解析与关键知识点

1. 显示心形图案

通过按行定义图案的二进制数据实现:

uint8_t heart[8] = { ... };

  • 每一行8位数据对应点阵屏的一行。
  • 使用位运算逐点绘制图案。
2. 倒计时

通过循环从 9 倒数到 0

for (int i = 9; i >= 0; i--) { matrix.print(i); }

3. 动态图案
  • 动态矩形:逐步缩小矩形边长实现动画效果。
  • 动态圆:逐步增大半径实现动画效果。
4. 文本显示

直接调用 drawStr() 显示字符串内容。


六、项目现象

代码上传并运行后,8×8点阵屏将按以下顺序动态显示:

  1. 倒计时数字。
  2. 动态变化的矩形。
  3. 动态增长的圆形。
  4. 心形图案。
  5. 字符串 “I Love Coding!!”。

七、技术扩展与优化

  1. 实时交互:通过按钮切换显示内容。
  2. 动态亮度调节:实现根据环境光线调节亮度。
  3. 复杂图案设计:扩展显示更复杂的动态图案。
  4. 增加语音交互:结合语音识别模块,用语音指令控制图案切换。

八、学习意义

本项目帮助开发者:

  • 理解I2C协议与LED点阵屏工作原理。
  • 掌握图案与动态效果的实现方法。
  • 提高对C++面向硬件编程的理解和动手能力。

结语

通过树莓派Pico和8×8 LED点阵屏的结合,本项目展示了如何用编程语言控制硬件实现复杂图案显示。希望本文能帮助您进一步掌握C++编程与硬件结合的开发技能。

如果您喜欢这篇文章,请点赞、收藏并分享,让更多人了解嵌入式开发的乐趣!

 动手实践学习套件请点击-》物联网-树莓派开发套件

欢迎加V交流

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

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

相关文章

transformer.js(四): 模型接口介绍

前面的文章底层架构及性能优化指南介绍了transformer.js的架构和优化策略&#xff0c;在本文中&#xff0c;将详细介绍 transformer.js 的模型接口&#xff0c;帮助你了解如何在 JavaScript 环境中使用这些强大的工具。 推荐阅读 ansformer.js&#xff08;二&#xff09;&…

11.25 校内模拟赛总结

难评 复盘 7:40 开题 还是决定采取前期审题时间长一点的策略 T1&#xff0c;显然枚举斜率比较优&#xff0c;算一下复杂度是对的&#xff0c;就会了&#xff1b;T2 好神秘啊&#xff0c;感觉又是什么根据结论然后贪心删数&#xff1b;T3 显然是优化 dp&#xff0c;感觉可做…

学习编程,学习中间件,学习源码的思路

01 看的多&#xff0c;内化不足 最近想复习一下编程相关的知识&#xff0c;在复习前我翻开了之前的一些笔记&#xff0c;这些笔记基本都是从书本、视频、博客等摘取记录的&#xff0c;看着这些笔记心里总结&#xff1a;看的多&#xff0c;内化不足。 02 整理大纲 为了解决这个…

[C++]vector:迭代器失效和vector<string>中更深层次拷贝的问题

迭代器失效 一、迭代器失效的两大类型异地扩容后的失效原地删除后的失效 二、vector<string>出现的深层次拷贝问题 一、迭代器失效的两大类型 异地扩容后的失效 在vector容器中&#xff0c;通常情况下的扩容都是异地扩容&#xff0c;例如resize, reserve&#xff0c;但…

初识 Django

声明 适用于想要快速入门的开发者&#xff0c;有前后端开发以及语言基础&#xff0c;想要学习语法或者特性。 想要学会快速开发&#xff0c;快速入门&#xff0c;请看博客【实用向】Django 框架入门并结合本篇文章。 命令 命令描述startproject创建一个 Django 项目startapp…

.net core MVC入门(一)

文章目录 项目地址一、环境配置1.1 安装EF core需要包1.2 配置数据库连接二、使用EF创建表2.1 整体流程梳理2.1 建表详细流程三、添加第一个视图3.1整体流程梳理3.1 添加视图,并显示在web里四、使用EF增加Catogory数据,并且读取数据到页面4.1整体流程梳理4.2 实现五、增加Cat…

【freertos】FreeRTOS消息队列的介绍与使用

FreeRTOS消息队列的介绍与使用 一、概述二、消息队列的运作机制三、API函数1、消息队列创建函数2、消息队列静态创建函数3、用于向队列尾部发送一个队列消息4、在中断服务程序中用于向队列尾部发送一个消息5、向队列队首发送一个消息6、在中断服务程序中向消息队列队首发送一个…

页的初步认识

关于准备 我们在之前的学习中&#xff0c;已经学习了相当一部分有关段的知识&#xff0c;CPU提供了段的机制来给我们的内存进行保护&#xff0c;但实际上我们在x86下的段base是0&#xff0c;实际上并没有偏移 两种分页模式 我们有两种分页模式&#xff0c;29912分页和101012…

题目一:bugku---game1

2024.11.21 1、题目连接&#xff1a; 2、打开是个小游戏 3、正常玩一把结束后&#xff0c;用bp抓包 4、查看url有三个参数&#xff0c;score对应的就是我们结束这把游戏时获得的分数&#xff0c;sign的zM后面为这把游戏分数的base64加密 5、将抓到的包&#xff0c;发送到重放…

小柴冲刺软考中级嵌入式系统设计师系列三、嵌入式硬件设计(1)嵌入式系统电源管理

越努力&#xff0c;越幸运&#xff01; 人生的意义在于体验&#xff01; 目录 越努力&#xff0c;越幸运&#xff01; 一、电源管理 (1)系统上电行为 (2)空闲模式 (3)断电 (4)电压与频率缩放 例如 具体实现如下: ① 12V 转8V ② 12V 转-8V ③ 12V 转5V ④ 5V 转3…

C++ 优先算法 —— 长度最小的子数组(滑动窗口)

目录 题目&#xff1a;长度最小的子数组 1. 题目解析 2. 算法原理 Ⅰ. 暴力枚举 Ⅱ. 滑动窗口&#xff08;同向双指针&#xff09; 滑动窗口正确性 3. 代码实现 Ⅰ. 暴力枚举(会超时&#xff09; Ⅱ. 滑动窗口&#xff08;同向双指针&#xff09; 题目&#xff1a;长…

uniapp定义new plus.nativeObj.View实现APP端全局弹窗

为什么要用new plus.nativeObj.View在APP端实现弹窗&#xff1f;因为uni.showModal在APP端太难看了。 AppPopupView弹窗函数参数定义 参数一:弹窗信息(所有属性可不填&#xff0c;会有默认值) 1.title:"", //标题 2.content:"", //内容 3.confirmBoxCo…

网络安全——SpringBoot配置文件明文加密

一、前言 在日常开发中&#xff0c;项目中会有很多配置文件。比如SpringBoot项目核心的数据库配置、Redis账号密码配置都在properties、yml配置文件 中。 如果这些信息以明文的方式存储&#xff0c;你的电脑被拿去修理&#xff0c;就会容易泄露&#xff0c;一旦被其他人获取到…

Linux系统编程之进程基础知识

概述 在Linux系统中&#xff0c;进程是指一个正在运行的程序实例。每个进程都有一个唯一的进程标识符&#xff0c;即PID&#xff0c;操作系统通过这个PID来唯一识别和管理各个进程。进程不仅仅是程序代码的运行实例&#xff0c;它还包含了程序运行时所需的各种资源&#xff0c;…

2024智能机器人与自动控制国际学术会议 (IRAC 2024)

主办&#xff0c;承办&#xff0c;支持单位 会议官网 www.icirac.org 大会时间&#xff1a;2024年11月29-12月1日 大会简介 2024智能机器人与自动控制国际学术会议 &#xff08;IRAC 2024&#xff09;由华南理工大学主办&#xff0c;会议将于2024年11月29日-12月1日在中国广…

【Pytest+Yaml+Allure】实现接口自动化测试框架

一、框架思想 requestsyamlpytestallure实现接口自动化框架。结合数据驱动和分层思想&#xff0c;将代码与数据分离&#xff0c;易维护&#xff0c;易上手。使用yaml编写编写测试用例&#xff0c;利用requests库发送请求&#xff0c;使用pytest管理用例&#xff0c;allure生成…

利用 Jsoup 进行高效 Web 抓取与 HTML 处理

Jsoup 是一款 Java 的 HTML 解析器&#xff0c;可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API&#xff0c;可通过 DOM&#xff0c;CSS 以及类似于 JQuery 的操作方法来取出和操作数据。 官网&#xff1a;https://jsoup.org/ 中文文档&#xff1a;Jsou…

蓝桥杯不知道叫什么题目

小蓝有一个整数&#xff0c;初始值为1&#xff0c;他可以花费一些代价对这个整数进行变换。 小蓝可以花贵1的代价将教数增加1。 小蓝可以花费3的代价将整数增加一个值,这个值是整数的数位中最大的那个(1到9) .小蓝可以花费10的代价将整数变为原来的2倍, 例如&#xff0c;如果整…

【JavaEE初阶】枫叶经霜艳,梅花透雪香-计算机是如何运行的?

本篇博客给大家带来的是与计算机相关的知识点, 包括:计算机的组成, 指令, 进程(重点). 文章专栏: JavaEE初阶 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 1. 计算机的组成 1.1 计算机的发展史 计算…

SuperMap Objects组件式GIS开发技术浅析

引言 随着GIS应用领域的扩展&#xff0c;GIS开发工作日显重要。一般地&#xff0c;从平台和模式上划分&#xff0c;GIS二次开发主要有三种实现方式&#xff1a;独立开发、单纯二次开发和集成二次开发。上述的GIS应用开发方式各有利弊&#xff0c;其中集成二次开发既可以充分利…