【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......

 

  這里的轉換關系如下:

  數字i對應的模擬電壓區間為:

  

 

 

   如果用區間的中位數來代表數字i對應的模擬電壓:

  

 

 

 

模擬輸入:analogRead(pin)

                         - 用analogRead()讀取到的輸入值就是0~1023之間的數值

                         - pin = 0~5 / A0~A5

 

模擬輸出:analogWrite(pin, outputVal)

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

                  - outputVal的取值范圍:0~255(對應0V~5V)

 

  這里的映射關系比較多,用一個圖示說明一下:

  

 

 

 

  這種映射關系可以方便地借助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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM