找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 743|回复: 1
打印 上一主题 下一主题
收起左侧

Arduino LED跑马灯设计

[复制链接]
跳转到指定楼层
楼主
ID:1078974 发表于 2024-6-1 17:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LED跑马灯设计
1  系统设计
1.1 设计要求
1.1.1 设计任务  
以Arduino为主控制器,一个滑动变阻器对10只LED流水灯效果进行快慢控制,实现LED跑马灯设计效果。
1.1.2 性能指标要求
(1)按照要求独立完成Arduino程序设计。
(2)滑动变阻器作为分压器,用8*8点阵显示分压点取整后的电压值,比如:0V,1V,2V,3V,4V,5V。
(3)通过滑动变阻器调整10只LED流水的速度,分压点电压越高,流水速度越快。
(4)通过按键可暂停也可启动跑马灯效果。
1.2 设计思路及设计框图
1.2.1设计思路
主控单元通过C程序编程,实现一个LED跑马灯设计。滑动变阻器三个脚,固定的两个脚一个接5V,一个接GND,滑动端接Arduino其中一个模拟端口,用于采集分压点的电压;滑动变阻器对10只LED流水灯效果进行快慢控制,实现LED跑马灯设计效果,8*8点阵显示分压点的电压值。
1.2.2总体设计框图
                              
2 各个模块程序的设计
①  点阵图案(不同情况对应不同的图案):通过开发板控制显示不同情况下需要显示的图案,如:电压是5V时候显示“5”数字图案。
②用for函数来实现流水:依次输出灯的引脚,让LED反复循环。
③用switch函数来实现不同电压的显示:用模拟引脚的读书除以200得到变量0~5,再用switch函数来实现0~5电压的显示。
④设置一个按钮的子函数:用一个变量来接收灯的位置,当按钮按下时候跑马灯就会被暂停在此刻。
⑤模拟针脚取滑动变阻:通过程序代码编写,analogRead函数通过读取滑动变阻器变化,读模拟引脚, 返回[0-1023]之间的值。得到的值用来当做两个灯之间的delay延迟。
3 调试过程
①编写程序,检查编译是否出现问题,检查编译没有物体后继续下一步。
②在面包板上搭载好LED跑马灯电路,接入电源,看是否存在短路情况。
③打开Arduino软件将编写好的程序烧录进开发板。
④不触碰开关,看LED是否按程序的顺序进行闪烁。
⑤按下开关,看跑马灯是否受开关的控制。
⑥观察点阵图案和LED灯是否按程序执。
⑦扭动滑动变阻器,看是否能控制LED流水的快慢,点阵上面的数字是否发生变化。
4 功能测试
4.1 测试仪器与设备
Arduino开发板一块、滑动变阻器一个、面包板一个、数据传输线一条、8*8点阵一块、杜邦线若干、发光二级管(红灯10个)、开关(1个)、电阻(220欧10个)、电脑及Arduino软件;
4.2 性能指标测试
LED灯进行正常的流水闪烁,安装在面包板上的按键触发有效,三脚滑动变阻器可以对10只LED灯效果进行快慢控制,点阵屏上可以显示电压数字图案。
4.3误差分析


代码:
#include<LedControl.h>
LedControl lc=LedControl(12,11,13,1);
byte d={
{B00000000,B00111100,B00100100,B00100100,B00100100,B00100100,B00100100,B00111100},
{B00000000,B00000100,B00000100,B00000100,B00000100,B00000100,B00000100,B00000100},
{B00000000,B00111100,B00000100,B00000100,B00111100,B00100000,B00100000,B00111100},
{B00000000,B00111100,B00000100,B00000100,B00111100,B00000100,B00000100,B00111100},
{B00000000,B00100100,B00100100,B00100100,B00111100,B00000100,B00000100,B00000100},
{B00000000,B00111100,B00100000,B00100000,B00111100,B00000100,B00000100,B00111100},
};

int dzp=0,a=0,b=1;
void anjian();
void dianzhenping();
void setup() {
lc.shutdown(0,false);
lc.setIntensity(0,3);
lc.clearDisplay(0);
pinMode(10,INPUT_PULLUP);
for(int k=0;k<10;k++)
pinMode(k,OUTPUT);
}
void loop() {
for(int l=0;l<10;l++)
{digitalWrite(l,HIGH);dianzhenping();delay(dzp*2);anjian();
digitalWrite(l,LOW);dianzhenping();}
}
void anjian()
{b=digitalRead(10);
while(b==LOW){b=digitalRead(10);dianzhenping();}}
void dianzhenping()
{dzp=analogRead(1);a=dzp*5/1023;
for(int f=0;f<8;f++)
{lc.setRow(0,f,d[a][f]);}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1127676 发表于 2024-6-30 20:59 | 只看该作者
感谢楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表