【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

相關文章
相關標籤/搜索