在前面几章中,我们知道了如何控制LED亮灭。但Arduino还有个很强大的功能通过程序来控制LED的明亮度。 ArduinoUNO数字引脚中有六个引脚标有“~”,这个符号就说明该口具有PWM功能。我们动手做一下,在做的过程中体会PWM的神奇力量!下面就介绍一个呼吸灯,所谓呼吸灯,就是让灯有一个由亮到暗,再到亮的逐渐变化的过程,感觉像是在均匀的呼吸。 所需元件 硬件连接 数字食人鱼红色LED发光模块 连接数字引脚10 硬件分析(模拟输出) 和项目一(点亮一盏灯)类似的装置,同样没有输入设备,只有一个输出设备,但又有所不同。项目一LED是作为数字输出,而这里我们是作为模拟 输出。代码部分会说明。 控制设备 输出设备 输入代码 代码下载完成后,我们可以看到LED会有个逐渐由亮到灭的一个缓慢过程,而不是直接的亮灭,如同呼吸一般,均匀变化。 代码回顾 当我们需要重复执行某句话时,我们可以使用for语句。 for语句格式如下: for循环顺序如下: 第一轮:1 2 3 4 第二轮:2 3 4 ? 直到2不成立,for循环结束。 知道了这么个顺序之后,回到代码中: for (int value = 0; value 255; value=value+1){ ... } for (int value = 255; value 0; value=value-1){ ... } 这两个for语句实现了value的值不断由0增加到255,随之在从255减到0,在增加到255……,无限循环下去。 再看下for里面,涉及一个新函数analogWrite()。 我们知道数字口只有0和1两个状态,那如何发送一个模拟值到一个数字引脚呢?就要用到该函数。观察一下Arduino板,查看数字引脚,你会发现其中6个引脚旁 标有“~”,这些引脚不同于其他引脚,它们可以输出 PWM信号。 函数格式如下: analogWrite(pin,value) analogWrite()函数用于给PWM口写入一个0~255的模拟值。所以,value是在0~255之间的值。特别注意的是,analogWrite()函数只能写入具有PWM功能的数字 引脚,也就是3,5,6,9,10,11引脚。 PWM是一项通过数字方法来获得模拟量的技术。数字控制来形成一个方波,方波信号只有开关两种状态(也就是我们数字引脚的高低)。通过控制开与关所持续时 间的比值就能模拟到一个0到5V之间变化的电压。开(学术上称为高电平)所占用的时间就叫做脉冲宽度, 所以PWM也叫做脉冲宽度调制。 通过下面五个方波来更形象的了解一下PWM。 Pulse Width Modulation 0% Duty Cycle-analogWrite(0) 上图橘色竖线代表方波的一个周期。每个analog Write(value)中写入的value都能对应一个百分比,这个百分比 也称为占空比(Duty Cycle),指的是一个周期内高电平持 续时间比上低电平持续时间得到的百分比。图中,从上往下,第一个方波,占空比为0%,对应的value为0。LED 亮度最低,也就是灭的状态。高电平持续时间越长,也就越亮。所以,最后一个占空比为100%的对应value是255 , LED最亮。50%就是最亮的一半了,25%则相对更暗。 PWM比较多的用于调节LED灯的亮度。或者是电机的转动速度,电机带动的车轮速度也就能很容易控制了,在玩 一些Ar-duino小车时,更能体现PWM的好处。 这一节介绍结束了!同样的硬件连接,通过软件的变化, 可以呈现出完全不一样的效果,是不是觉得Arduino很酷炫! |
|
来自: 旭日东升4k165w > 《文件夹1》