呼吸灯也是基于LED 灯的一个体现,它的特点是LED 灯慢慢变亮,然后慢慢变暗,实际就是亮度发生了规律性变化。而亮度规律性变化的本质是通过LED 灯的电流发生了规律性变化。
现实生活中可能会遇到要输出0 和1 之外的数值。有时候除了开灯、关灯之外,可能还需要调光,而调光也就是模拟的一种输出方式。3.3.1节所介绍的digitalWrite()函数控制LED 灯就是开灯与关灯的实现。
Arduino 的微控制器只能产生高电平(5 V)或者低电平(0 V),而不能产生变化的电压,因此必须采用脉冲宽度调制技术(PWM,Pulse Width Modulation)来模拟电压变化。
PWM 的原理是通过改变占空比,通过低通滤波得到平均电压从而实现模拟输出。简而言之,PWM 是一种对模拟信号电平进行数字编码的方法,它通过对半导体开关器件的导通和关断进行控制,使输出端得到一系列幅值相等但宽度不相等的脉冲,如图3-3-4 所示,而这些脉冲能够被用来代替正弦波或其他所需要的波形。Arduino 的数模转换PWM 输出位数为8 位,其取值为0~255。
注意:幅值相等但宽度不相等。幅值相等是最大值、最小值相同,宽度不相等是指横轴(横轴是代表时间)上的宽度不同,但其周期宽度是一样的。
如图3-3-4 所示,脉冲宽度的值取0 可以产生0 V 的模拟电压,取64 可以产生1.25 V 的模拟电压,取127 可以产生2.5 V 的模拟电压,取191 可以产生3.75 V 的模拟电压,取255 则可以产生5 V 的模拟电压。
Arduino 中实现脉宽调制(PWM)的函数就是analogWrite()函数,这是一个能实现模拟输出的函数。在3.3.1 节已经介绍过,10 号数字接口也是PWM 数字接口,因此本节的Arduino UNO 与LED 灯的电路连接和3.3.1 节一样。
测试程序代码如下:
程序中使用 analogWrite()函数,通过两个 for 循环,逐渐改变输出PWM 占空比,进而改变LED 灯的亮度。两个for 循环中都有延时语句,是为了让肉眼能观察到亮度调节的效果。(www.daowen.com)
程序详解:
作用:让一个支持PWM 输出的引脚持续输出指定脉冲宽度的方波,或称写一个模拟值(PWM)到引脚,可以用来控制LED 的亮度, 或者控制电机的转速。
pin 表示PWM 输出的引脚编号;
value 表示用于控制占空比,范围为0~255。值为0 表示占空比为0,值为255 表示占空比为100%,值为127 表示占空比为50%。
for 循环:
用于重复执行被花括号包围的语句块,其语法是:
初始化部分被第一个执行,且只执行一次。每次通过这个循环,条件判断部分将被测试;如果为真,语句块和数据递增部分就会依次被执行,然后条件判断部分就会被再次测试,当条件测试为假时,结束 for循环。
运算名称及符号含义见表3-3-1。
表3-3-1 运算名称及符号含义
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。