上一篇讲了逐个点亮LED,我们用的是digitalWrite()函数,顾名思义是数字信号;并且用的是数字引脚,仅有0和1两种电平,即仅有亮暗两种状态。
为了提升它的美观性,大家有没有一个大胆的想法就是让它的亮暗发生渐变(总归好看一丢丢吧)
这时候数字信号就很难满足我们的要求了,只有亮暗两种选择不够啊。所以我们就引入了模拟信号这种登西,用的引脚也必须是模拟引脚!模拟信号的范围就比较大啦,但是由于存储器本身的限制,电平的范围是0~255。
模拟信号的端口在Arduino单片机上就是带有~的端口
此图中,可以看到3、5、6、9、10、11都是模拟信号的端口,在这个呼吸灯实验中,大家可以在这几个端口里随意选择(程序中对应的ledPin要改成对应引脚号)
接下来先来展示一下接线方式,就是很传统的发光二极管接线方式。
以下展示代码,可以尝试运行以下,可以看到发光二极管逐渐变亮,然后逐渐变暗(别盯着看太久,亲测伤眼orz)
int ledPin=3;//此处我二极管正极连接的端口是3
int i;
void setup() {
pinMode(3,OUTPUT);//将端口设置为输出
digitalWrite(3,0);//前面一个数字是端口,后面那个是电平(0是低电平),将二极管的出状态设置为暗
}
void loop() {
for(i=0;i<255;i++){//由于存储器位数的限制,i的范围为0~255
analogWrite(3,i);//输出逐渐升高的电平
delay(20);//有延迟停留,让人眼能分辨光亮暗的变化
}
for(i=255;i>0;i--){//输出逐渐降低的电平
analogWrite(3,i);
delay(20);
}
}
Tips:
-
一定要注意模拟端口和数字端口的区别,要连带~的端口!
-
此处模拟信号用的就是analogWrite()函数,注意括号中有两个参数
-
不要忘记delay()函数,delay()函数中的1代表一毫秒,此处的20就是20毫秒。如果没有delay()函数进行一小下停顿,我们人眼是无法观测到光线亮暗的瞬间变化的。
接下来是展示环节
先是模拟演示:
基于Arduino的呼吸灯模拟演示
接下来是实演示:
基于Arduino的呼吸灯实物演示
作者的话:
注意看注释!很多知识点是在注释里说明的!
这一篇主要就是引入了模拟信号这个东西,之后会经常出现,要把它和数字信号区分开。如果不能理解,就记一下它的应用场景。这篇还是挺简单的。