学习手记

数字输入、模拟输入与 PWM 的区别

结合 Arduino Uno 的按钮和旋钮课程,对照理解 digitalRead、analogRead 与 analogWrite。

先看结论

按钮读取两种状态;电位器提供 0–1023 的模拟读数;PWM 用 0–255 调整数字脉冲占空比。这三个数值范围不能混为一谈。

数字输入回答两种状态的问题

digitalRead() 返回 HIGH 或 LOW。按钮课程中,下拉电阻使松开时的输入保持 LOW,按下按钮后输入连接到高电平。悬空的输入没有可靠的默认状态。如果采用内部上拉,接线和按下时的逻辑含义会不同。

模拟输入测量一个电平

Uno 的模拟输入将电压转换为 0–1023 的 10 位数值。旋钮课程把电位器中间的滑动端接到 A0,在课程使用的 5 V 参考条件下,读数随旋转变化。这是有分辨率限制的测量,并非无限精确的电压值。

PWM 改变的是时间比例

在 Uno 支持 PWM 的引脚上,analogWrite() 使用 0–255,改变每个周期内输出保持 HIGH 的比例。LED 看起来变暗,是因为平均获得的能量减少;信号本身仍在数字电平之间切换。PWM 不等同于真正的数模转换输出。

用一个实验连接三个概念

打开“电位器”课程,运行后对照串口读数与 LED 亮度。程序将 0–1023 的输入除以四,适配 0–255 的输出范围。尝试两端与中点,再与按钮课程的两态控制比较,解释输入、程序映射和输出之间的关系。

开始动手实验

从实验,再多走一步

回到一手资料

真实开发板的参数与接线应以官方文档和元件数据表为准。