公司动态

【实验七】Arduino开发板实战

📅 2026/7/19 1:35:03
【实验七】Arduino开发板实战
目录一、barGraph 实验测试1.1 硬件接线方式1.2 中文注释代码1.3 核心原理二、RowColumnScanning 实验测试2.1 硬件接线方式2.2 中文注释代码2.3 核心原理本实验硬件平台为Arduino Uno R3主控板核心主控芯片为 ATmega328P具备多路数字与模拟引脚、串口通信接口可通过 USB 直接供电和程序烧录。软件开发环境为 Arduino IDE本次测试代码为内置07.Display显示输出官方示例路径为文件→示例→07.Display包含 barGraph、RowColumnScanning 共 2 个范例主要用于学习 LED 光柱条图模拟显示、行列扫描点阵矩阵驱动等 IO 可视化显示输出编程技术。一、barGraph 实验测试1.1 硬件接线方式电位器接线电位器两端引脚分别接 5V、GND中间抽头引脚接模拟输入 A0LED 光柱接线10 颗 LED 各自串联 220Ω 限流电阻正极依次接 D2~D11 引脚负极统一接 GND整体供电Arduino Uno R3 通过 USB 数据线连接电脑完成供电与程序烧录无需串口监视器即可直观观察光柱变化1.2 中文注释代码/* LED bar graph LED光柱条形图显示示例 读取电位器模拟输入数值映射为LED点亮等级实现光柱可视化指示效果 电位器数值越大点亮的LED数量越多模拟条形柱状图显示模拟量大小。 电路说明 - 电位器中间引脚接模拟引脚A0 - 10个LED经220Ω电阻分别连接数字引脚2~11负极接GND */ // 常量定义 const int analogPin A0; // 电位器模拟输入引脚 const int ledCount 10; // 光柱LED总数量 // 数组存储全部LED引脚编号 int ledPins[] { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; void setup() { // 遍历数组将全部LED引脚设置为输出模式 for (int thisLed 0; thisLed ledCount; thisLed) { pinMode(ledPins[thisLed], OUTPUT); } } void loop() { // 读取电位器原始0~1023模拟数值 int sensorReading analogRead(analogPin); // 将模拟量映射为0~10的LED点亮等级 int ledLevel map(sensorReading, 0, 1023, 0, ledCount); // 循环遍历所有LED分级点亮 for (int thisLed 0; thisLed ledCount; thisLed) { // 索引小于等级则点亮该LED if (thisLed ledLevel) { digitalWrite(ledPins[thisLed], HIGH); } // 超出等级的LED全部熄灭 else { digitalWrite(ledPins[thisLed], LOW); } } }1.3 核心原理数组批量管理 IO 引脚使用一维数组存储 10 路 LED 引脚配合 for 循环批量初始化、批量控制输出简化多 LED 管理代码模拟量映射分级map()函数将 0~1023 连续模拟值线性映射为 0~10 的整数等级对应可点亮的 LED 个数光柱分级显示逻辑循环遍历 LED 数组索引序号小于当前等级则保持点亮其余熄灭形成从左到右逐级增长的光柱条形图模拟量可视化方案把看不见的电压数值转换为直观的灯光长度可用于音量、液位、压力等传感器可视化指示功能目的学习数组批量 IO 控制、map 数值映射、分级显示逻辑掌握多 LED 光柱可视化显示的基础编程方法二、RowColumnScanning 实验测试2.1 硬件接线方式8×8 共阴极点阵矩阵接线行接阳极列接阴极点阵 8 根行阳极引脚依次接数字引脚2、7、19 (A5)、5、13、18 (A4)、12、16 (A2)点阵 8 根列阴极引脚依次接数字引脚6、11、10、3、17 (A3)、4、8、9模拟引脚 A2~A5 复用为数字输出引脚扩展 IO 数量驱动矩阵双电位器输入XY 光标控制X 轴电位器中间抽头接 A0两端分别接 5V、GNDY 轴电位器中间抽头接 A1两端分别接 5V、GND整体供电Arduino Uno R3 通过 USB 数据线供电、烧录程序转动电位器可移动点阵上的光标位置以下是基于上图的引脚连接矩阵2.2 中文注释代码/* Row-Column Scanning 8×8点阵行列扫描显示示例 使用行列动态扫描驱动8×8共阴极LED点阵搭配两路电位器控制屏幕内光标坐标 二维数组存储每一个灯珠亮灭状态逐行循环刷新实现稳定画面显示。 适配Lumex LDM-24488NI共阴极点阵行引脚为阳极列引脚为阴极。 电路说明 - 点阵行阳极D2、D7、A5、D5、D13、A4、D12、A2 - 点阵列阴极D6、D11、D10、D3、A3、D4、D8、D9 - 两个电位器分别接模拟A0、A1控制光标X、Y坐标 */ // 一维数组存储8根点阵行阳极引脚 const int row[8] { 2, 7, 19, 5, 13, 18, 12, 16 }; // 一维数组存储8根点阵列阴极引脚 const int col[8] { 6, 11, 10, 3, 17, 4, 8, 9 }; // 二维数组pixels[行][列]存储8×8点阵每个灯珠的亮灭状态 int pixels[8][8]; // 光标当前坐标 int x 5; int y 5; void setup() { // 初始化所有行、列引脚为输出模式 for (int thisPin 0; thisPin 8; thisPin) { pinMode(col[thisPin], OUTPUT); pinMode(row[thisPin], OUTPUT); // 阴极默认高电平所有LED初始熄灭 digitalWrite(col[thisPin], HIGH); } // 初始化整个点阵全部灯珠默认熄灭HIGH for (int x 0; x 8; x) { for (int y 0; y 8; y) { pixels[x][y] HIGH; } } } void loop() { readSensors(); // 读取电位器更新光标坐标 refreshScreen(); // 行列扫描刷新点阵画面 } // 读取两路电位器更新光标XY位置 void readSensors() { // 清除上一帧光标位置 pixels[x][y] HIGH; // A0映射为X轴数值反转实现左右方向对应 x 7 - map(analogRead(A0), 0, 1023, 0, 7); // A1映射为Y轴 y map(analogRead(A1), 0, 1023, 0, 7); // 设置新光标位置为点亮状态LOW pixels[x][y] LOW; } // 逐行动态扫描刷新8×8点阵屏幕 void refreshScreen() { // 遍历每一行阳极 for (int thisRow 0; thisRow 8; thisRow) { digitalWrite(row[thisRow], HIGH); // 选中当前行阳极拉高 // 遍历该行所有列阴极 for (int thisCol 0; thisCol 8; thisCol) { int thisPixel pixels[thisRow][thisCol]; digitalWrite(col[thisCol], thisPixel); // 当前像素需要点亮时阴极拉低扫描完成立即拉高消隐防止重影 if (thisPixel LOW) { digitalWrite(col[thisCol], HIGH); } } digitalWrite(row[thisRow], LOW); // 关闭当前行切换下一行 } }2.3 核心原理二维数组画面缓存pixels[8][8]二维数组存储 8×8 点阵每颗 LED 的亮灭状态相当于屏幕显存统一管理画面内容动态行列扫描驱动逐行拉高中阳极再根据显存状态控制每一列阴极电平利用人眼视觉暂留快速循环刷新实现稳定画面共阴极点阵电平逻辑行阳极 HIGH、列阴极 LOW 时对应 LED 点亮扫描完成立刻拉高阴极消隐消除拖影、重影模拟量坐标映射两路电位器 ADC 数值通过map()映射为 0~7 点阵坐标一路反转映射实现左右方向匹配控制光标移动IO 引脚复用扩展复用 A2~A5 模拟引脚作为数字输出扩展可用 IO 口满足 8×8 点阵 16 根控制线需求功能目的学习二维数组存储画面、点阵行列动态扫描驱动原理掌握模拟量映射坐标、多 IO 引脚扩展控制理解 LED 矩阵低占空比扫描显示技术参考链接 https://docs.arduino.cc/built-in-examples