PWM调节LED亮度通了,接下来可以玩玩ADC。LinkIt 7697板子的ADC通道一共有四个,对应的Arduino分配号自然就是A0-A3啦,这四个ADC通道分别接在GPIO57-60上,即板子的P14到P17,不过要注意的是,Arduino的ADC通道分配号跟GPIO分配号是不一样的,一个板子的ADC通道一般只有几个,都是A0开始到A3或者A4这样。说到这里是不是很乱?其实GPIO分配号的意义在上一篇帖子已经讲了,这篇帖子只是向大家介绍多一个分配号叫ADC通道分配号而已,简单来说,没有ADC通道复用功能的GPIO只有两个名字,一个叫GPIO号,就是MCU的引脚号,另一个叫Arduino分配号,是用于控制数字输入输出的;而可以复用为ADC通道的GPIO除了有前面两个名字以外,还多了一个名字叫ADC通道分配号,这个ADC通道分配号只在GPIO引脚用作ADC通道的时候才有意义。
使用ADC通道采集的语句比PWM和点灯都要简单,就是一句话:int adc_val = analogRead(A0);adc_val存放的是采集到的数据,把这个语句放到loop()循环里面,就是不断采集新的数据,覆盖存放到adc_val变量。
先做好硬件的接线准备,P14(A0)引脚接一个电位器,电位器两端接5V和地,那么,当电位器转动的时候,电压取值就是0-5V,MCU采集到A0的数据之后再通过计算转化为线性的PWM比较值,所以LED灯的亮度和电位器的值就是线性关系了。
直接上图:
贴代码:
void setup()
{
pinMode(7,OUTPUT);
Serial.begin(115200);
}
int val=0,flag=0;
void loop()
{
int adc_val = analogRead(A0);
//Serial.println(adc_val);
analogWrite(7,adc_val/20);
//digitalWrite(17, HIGH);
//delay(100);
//digitalWrite(17, LOW);
//delay(100);
}