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