【Arduino学习笔记07】模拟信号的输入与输出 analogRead() analogWrite() map() constrain()

  • 模拟信号:Arduino中的模拟信号就是0v~5v的连续的电压值
  • 数字信号:Arduino中的数字信号就是高电平(5V)或者低电平(0V),是两个离散的值

 

模拟信号->数字信号:ADC(模数转换器)

  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(pin)

                         - 用analogRead()读取到的输入值就是0~1023之间的数值map

                         - pin = 0~5 / A0~A5im

 

模拟输出:analogWrite(pin, outputVal)

                  - pin = 3,5,6,9,10,11(PWM引脚)db

                  - outputVal的取值范围:0~255(对应0V~5V)img

 

  这里的映射关系比较多,用一个图示说明一下:di

  

 

 

 

  这种映射关系能够方便地借助map()函数实现:

 

map(value, fromLow, fromHigh, toLow, toHigh):

  - value : 要处理的数值,在这里就是指模拟输入端读的数值

       - fromLow, fromHigh : 输入的上下限

       - toLow, toHigh : 想要映射到的数值范围的上下限

       - 这里的fromLow和fromHigh,toLow和toHigh没有明确的大小关系。map函数作的只是获得一个把fromLow映射到toLow,fromHigh映射到toHigh的线性映射关系,不在意toLow和toHigh哪一个大哪一个小。

       - 返回值:根据获得的线性映射关系将value映射到的那个值

      

  值得注意的是:map()函数并无限制value的大小必须在fromLow和fromHigh之间,它只是根据获得的线性映射关系来输出一个相对应的值。所以使用map()的时候可能会借助constrain()函数来限制输出值的范围:

constrain(value, min, max) :

       - value < min : return min

       - value > max : return max

       - min <= value <= max : return value

相关文章
相关标签/搜索