创客机器人实战:基于Arduino和树莓派
上QQ阅读APP看书,第一时间看更新

4.2 模拟I/O口的操作函数

4.2.1 analogReference(type)

analogReference函数的作用是配置模拟引脚输入时的参考电压。在嵌入式应用中,引脚获取模拟电压值之后,将根据参考电压将模拟值转换到0~1023。该函数为无返回值函数,参数为type类型,有3种类型(DEFAULT/INTERNAL/EXTERNAL),具体含义如下:

DEFAULT:默认值,参考电压为5V。

INTERNAL:低电压模式,使用片内基准电压源。

EXTERNAL:扩展模式,通过AREF引脚获取参考电压。

注意:如果在AREF引脚加载外部参考电压,需要使用一个5kW的上拉电阻,这会避免由于设置不当造成控制芯片的损坏。

4.2.2 analogRead(pin)

analogRead函数用于读取引脚的模拟量电压值,每读一次需要花100ms的时间。参数pin表示所要获取模拟量电压值的引脚,该函数返回值为int型,表示引脚的模拟量电压值,其范围在0~1023。

注意:对于Arduino Uno主板,函数的参数pin范围为0~5,表示6个模拟量I/O口中的一个。

4.2.3 analogWrite(pin,value)

analogWrite函数为无返回值函数,有两个参数pin和value。其中,参数pin表示设置的引脚,只能选择Arduino Uno主板支持的引脚;参数value表示PWM输出的占空比,范围在0~255,对应的占空比为0~100%。

analogWrite函数通过PWM的方式在引脚上输出一个模拟量,较多的应用在LED亮度控制、电机转速控制等方面。

脉冲宽度调制(Pulse Width Modulation,PWM)通过对一系列脉冲的宽度进行调制,来等效地获得所需要的波形或电压。这是一种模拟控制方式,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。如图4-1所示是一个简单的PWM波示意图。

图4-1 PWM波

在Arduino中执行该操作之后,需要等待一定时间后才能对该引脚进行下一次操作。该函数在使用Arduino UNO开发板时,支持的引脚:3、5、6、9、10、11。即在Arduino控制板上引脚号旁边标注~的就是可用作PWM的引脚,如图4-2所示。Arduino中的PWM的频率大约为490Hz。

图4-2 Arduino UNO开发板

注意:PWM输出位数为8位,范围为0~255。

例如,Arduino开发板的A0引脚接电位器,使用电位器控制板上LED的亮度,代码如下: