ADC是用于将模拟信号转换为数字信号的电路。将输入的模拟信号经过ADC转换为数字信号,处理器才能对其进行处理。函数
这里讲的模拟输入是指0~5v的电压值。在Arduino上,ADC具备10位分辨率,这意味着它能够经过1,024个数字表示模拟电压。至关于将连续的电压值0~5v映射到离散的数值0~1023。将0 ~ 5V的电压分红1024份(2^10),算出来约为4.882mV的测量精度。即:0~4.882mV之间的电压值映射到数字0,4.883mV~9.764mV之间的电压值映射到数字1......ui
这里的转换关系以下:spa
数字i对应的模拟电压区间为:blog
若是用区间的中位数来表明数字i对应的模拟电压:it
- 用analogRead()读取到的输入值就是0~1023之间的数值map
- pin = 0~5 / A0~A5im
- pin = 3,5,6,9,10,11(PWM引脚)db
- outputVal的取值范围:0~255(对应0V~5V)img
这里的映射关系比较多,用一个图示说明一下:di
这种映射关系能够方便地借助map()函数实现:
- value : 要处理的数值,在这里就是指模拟输入端读的数值
- fromLow, fromHigh : 输入的上下限
- toLow, toHigh : 想要映射到的数值范围的上下限
- 这里的fromLow和fromHigh,toLow和toHigh没有明确的大小关系。map函数作的只是获得一个把fromLow映射到toLow,fromHigh映射到toHigh的线性映射关系,不在意toLow和toHigh哪一个大哪一个小。
- 返回值:根据获得的线性映射关系将value映射到的那个值
值得注意的是:map()函数并无限制value的大小必须在fromLow和fromHigh之间,它只是根据获得的线性映射关系来输出一个相对应的值。所以使用map()的时候可能会借助constrain()函数来限制输出值的范围:
- value < min : return min
- value > max : return max
- min <= value <= max : return value