找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 39588|回复: 9
收起左侧

Arduino教程-让LED神灯亮度渐变

  [复制链接]
ID:99556 发表于 2015-12-19 21:36 | 显示全部楼层 |阅读模式
Hi,大家好!上一次我们一起学习了如何让LED神灯闪烁。闪烁的状态只能表现出两种状态,要么亮,要么灭。今天我们换一种变化方式,让LED神灯的亮度有渐变的效果。
嗯,在开始之前,我们要先在硬件和软件方面做一些准备。
硬件方面 arduino-led.jpg
图片来源:Arduino-UNO-LED
像之前一样,依然是一块Arduino UNO电路板,一盏标准的LED神灯,还有一条连接Arduino和电脑的USB线。
软件方面Arduino官方提供的IDE即可。
像之前一样,准备好上面的软硬件之后,接下来需要连接好电路,然后敲几行代码,就可以让LED神灯产生亮度渐变的效果啦!
连接电路 arduino-led-fade.jpg
图片来源:Arduino连接LED电路示意图
和让LED神灯闪烁的电路连接一样,只需要简单的一步,即可连接好我们的电路。这里唯一要注意的点是,LED的长针脚要插入11号孔,短针脚插入GND地线孔内,这一点要注意!最后,用USB线把Arduino连接到电脑上,连好之后会看到Arduino电路板上的一个小电源灯被点亮!
添加几行代码像之前一样,最后需要我们添加几行代码,即可大功告成!
首先打开Arduino的IDE,新建一个Arduino项目窗口。
arduino-ide-new.jpg
图片来源:Arduino官方IDE
新建完成之后,需要向其中添加几行代码。


  1. // 定义LED神灯的针脚号是 11
  2. int led = 11;
  3. // 定义LED神灯当前亮度值为整数值0
  4. int brightness = 0;
  5. // 定义LED神灯亮度变化的幅度为整数值5
  6. int fadeAmount = 5;

  7. // 对Arduino电路板或相关状态进行初始化方法         
  8. void setup() {
  9.   // 声明11号针脚为输出状态
  10.   pinMode(led, OUTPUT);
  11. }

  12. // 系统调用,无限循环方法
  13. void loop() {
  14.   // 设置LED神灯的当前亮度
  15.   analogWrite(led, brightness);

  16.   // 计算LED神灯的此次循环的亮度数值,
  17.   // 每次循环累加5(fadeAmount定义的数值)。
  18.   brightness = brightness + fadeAmount;

  19.   // 此判断语句实现的效果是,判断LED神灯的当前亮度,
  20.   // 当LED神灯全亮,将fadeAmount数值变为负数,
  21.   // 达到降低LED神灯亮度的效果。
  22.   // 当LED神灯熄灭,将fadeAmount数值变为正数,
  23.   // 达到增加LED神灯亮度的效果。
  24.   if (brightness == 0 || brightness == 255) {
  25.     fadeAmount = -fadeAmount ;
  26.   }
  27.   // 每次循环结束,进入下一次循环之前,延时30毫秒执行
  28.   delay(30);
  29. }
复制代码


完工!比起之前的学习,好像这次多了点什么?是的,多了一个if判断语句,小括号中出现的两根竖线||是或的意思,即符号两边的语句只要有一个正确,即可执行大括号的程序。
除此之外,还出现了一个新方法,即analogWrite(),这个方法和之前在学习中遇到的那个digitalWrite()是两兄弟,分别对应着电路中的模拟信号和数字信号的设置,从方法名即可看出,前一个是对针脚进行模拟信号的设置,后一个是对针脚进行数字信号的设置。为什么要使用analogWrite()方法呢?很简单,因为模拟信号是连续的,数字信号是非连续的。只有连续的信号才可以让LED神灯产生渐变的效果,所以这里使用的是模拟信号。
还剩最后一步!把代码烧入Arduino!只需要点击新建项目文件上,那个指向右侧箭头的图标,即可自动完成代码的烧入。
arduino-menu.jpg
图片来源:Arduino官方IDE的文件编辑菜单选项(注意此处不是指Arduino顶部工具栏)
如果在此操作中碰到了连接Arduino的失败错误,可以查看点亮LED神灯那一节中,关于这部分需要注意的两个小细节。
如果一切顺利,将会看到LED神灯渐变闪烁的效果!
总结通过这次学习,我们实现了LED神灯的亮度进行渐变的效果。多出来的知识点呢,一共有两个,一个是if语句,另一个是analogWrite()方法。
下期预告至此呢,我们已经学习了点亮LED神灯,以及点亮神灯的两种方式。通过这两种点亮LED神灯的方式,我们了解了如何向外输出数字信号,以及模拟信号。接下来,我们将会学习如何从Arduino读出元器件输入的数字信号以及模拟信号。


ohcoder的系列精彩Arduino教程:
Arduino教程-初识Arduino(包含本教程目录):http://www.51hei.com/bbs/dpj-41334-1.html
Arduino教程-开篇:http://www.51hei.com/bbs/dpj-41335-1.html
Arduino教程-点亮LED神灯:http://www.51hei.com/bbs/dpj-41336-1.html
Arduino教程-让LED神灯闪烁:http://www.51hei.com/bbs/dpj-41337-1.html
Arduino教程-让LED神灯亮度渐变:http://www.51hei.com/bbs/dpj-41338-1.html
Arduino教程-获取输入数字信号:http://www.51hei.com/bbs/dpj-41339-1.html
Arduino教程-获取输入模拟信号:http://www.51hei.com/bbs/dpj-41340-1.html
Arduino教程-另一种时间延迟:http://www.51hei.com/bbs/dpj-41331-1.html
Arduino教程-按键开关:http://www.51hei.com/bbs/dpj-41341-1.html
Arduino教程-停止抖动!:http://www.51hei.com/bbs/dpj-41333-1.html
Arduino教程-抛弃外部电阻!:http://www.51hei.com/bbs/dpj-41332-1.html
Arduino教程-用按键开关计数:http://www.51hei.com/bbs/dpj-41330-1.html

………后续持续更新中请打开:http://www.51hei.com/bbs/dpj-41334-1.html

评分

参与人数 1黑币 +1 收起 理由
是阿阿阿周 + 1

查看全部评分

回复

使用道具 举报

ID:173823 发表于 2017-3-19 22:24 来自手机 | 显示全部楼层
大师你好我想求一个源程序(我只是想学习用Ardunio NANO同时控制一个舵机在45度-90度-135度之间来回停顿运行和1组绿LED灯和8组蓝LED灯(其中8组蓝灯要像呼吸灯那样一闪一闪的)可以吗?如果可以请麻烦大师把源程序发到我邮箱:285883100@qq.com万分感谢
回复

使用道具 举报

ID:237069 发表于 2017-10-4 17:42 | 显示全部楼层
新人加入,等级够了再来下载学习
回复

使用道具 举报

ID:470631 发表于 2019-1-19 21:37 | 显示全部楼层
既然是模拟信号为什么针脚不用A0--A5反而选用了数字端口11呢
回复

使用道具 举报

ID:543640 发表于 2019-5-22 10:42 | 显示全部楼层
哪里买这些硬件 淘宝都是套装 比较贵
回复

使用道具 举报

ID:452731 发表于 2019-7-8 17:01 | 显示全部楼层
有大师吗? 每 次循环累加5,能够实现例子里的,亮度渐变,变亮然后逐渐熄灭,但是如果每次循环累加变为偶数数值,就是变亮,然后突然熄灭,然后逐渐变亮,没有了变暗的过程,这是怎么回事?
回复

使用道具 举报

ID:450950 发表于 2019-7-21 19:35 | 显示全部楼层
azi197417 发表于 2019-7-8 17:01
有大师吗? 每 次循环累加5,能够实现例子里的,亮度渐变,变亮然后逐渐熄灭,但是如果每次循环累加变为偶数数值 ...

  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ;

brightness每次从0开始加5 直到255 再减小 这样没有问题,而每次加偶数的话 brightness==255就会直接超过255 而超过255后pwm信号就会认为又是从0开始
尝试改成 brightnes<=0||brightness>=255试试
回复

使用道具 举报

ID:698787 发表于 2020-6-10 12:57 | 显示全部楼层
210482244 发表于 2019-1-19 21:37
既然是模拟信号为什么针脚不用A0--A5反而选用了数字端口11呢

A0~A5应该是输入引脚吧
回复

使用道具 举报

ID:138707 发表于 2021-7-3 20:51 | 显示全部楼层
新人加入,等级够了再来下载学习
回复

使用道具 举报

ID:1023753 发表于 2022-7-2 13:48 | 显示全部楼层
210482244 发表于 2019-1-19 21:37
既然是模拟信号为什么针脚不用A0--A5反而选用了数字端口11呢

ANALOG IN
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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