还记得前几个咱们都是在讲解数字IO,而其实咱们生活中大多数信号都是模拟信号,如声音以及温度变化。在Arduino中,经常使用0~5v的电压来表示模拟信号。git
在Arduino,编号前带有“A”的引脚是模拟输入引脚,Arduino能够读取这些引脚上输入的模拟值,也就是能够读取引脚上输入的电压大小。
模拟输入引脚带有ADC功能(ADC:Analog-to-Digital Converter 模数转换)。它能够将外部输入的模拟信号转换为芯片运算时能够识别的数字信号,从而实现读取模拟值的功能。函数
模拟输入功能须要使用analogRead(pin)函数,其中pin是读取模拟值的引脚,被指定的引脚必须是模拟输入引脚。oop
要使用analogWrite()函数来实现模拟输出功能。学习
注意:ui
当使用analogWrite函数,指定引脚会经过高低电平的不断转换来输出一个周期固定(约490Hz)的方波,经过改变高低电平在每一个周期中所占比例(占空比),而获得近似输出不一样电压的效果。code
analogWrite(pin,value):参数pin为要输出的PWM波的引脚,参数value是PWM的脉冲宽度,范围为0~255。
大多数Arduino控制器的PWM引脚都会用“~”标识,能够查看一下本身的板子。常见几款板子PWM引脚为:blog
基础知识介绍好了,那么就开始接下来的实验了。it
主要实现两个实验内容:io
实验介绍:
将LED链接到PWM引脚,主要利用模拟输出功能 analogWrite 函数输出电压,呼吸频率固定。class
实验代码:
/** * @Desc 固定呼吸灯 * @author 单片机菜鸟 * @Date 2016/12/8 * 注意:LED的一端接到5V,另一端接到输出引脚,低电平亮 * 按键是高电平有效 */ #define LED 9 #define DELAY_TIME 30 //延时时间 void setup() { // put your setup code here, to run once: } void loop() { //从暗到亮,每次亮度值加5,直到最亮 for(int fadeValue = 0;fadeValue<=255;fadeValue+=5){ //输出PWM analogWrite(LED,fadeValue); //延时一下 delay(DELAY_TIME); } //从亮到暗 每次亮度-5直到最暗 for(int fadeValue=255;fadeValue>=0;fadeValue-=5){ //输出PWM analogWrite(LED,fadeValue); //延时一下 delay(DELAY_TIME); } }
实验介绍:
在固定呼吸灯基础上,经过读入的模拟电压大小(模拟输入咱们采用一个电位器来分压)来调整频率,同时利用analogRead以及analogWrite函数。
实验代码:
/** * @Desc 可调呼吸灯 * @author 单片机菜鸟 * @Date 2016/12/8 * 注意:LED的一端接到5V,另一端接到输出引脚,低电平亮 * 按键是高电平有效 */ #define LED 9 void setup() { // put your setup code here, to run once: } void loop() { //从暗到亮,每次亮度值加5,直到最亮 for(int fadeValue = 0;fadeValue<=255;fadeValue+=5){ //输出PWM analogWrite(LED,fadeValue); //延时一下 int delaytime = analogRead(A0)/5;//读取电位器输出电压 用于延时 delay(delaytime); } //从亮到暗 每次亮度-5直到最暗 for(int fadeValue=255;fadeValue>=0;fadeValue-=5){ //输出PWM analogWrite(LED,fadeValue); //延时一下 int delaytime = analogRead(A0)/5; delay(delaytime); } }
固然,上面电位器能够换成光敏电阻之类的,这样就能够考虑作一个晚上呼吸白天熄灭的呼吸灯。
这一课,相对很简单,咱们主要学习模拟IO口的使用。之后当咱们遇到光敏电阻、热敏电阻、温度传感器、气体传感器之类的能够产生模拟信号的,就应该想到模拟IO口了。