前面幾節講的都是數位的處理,也就是只有 0 和 1 兩種訊號,但我們的世界並不是只有 0 和 1 兩種訊號而已,我們還有更複雜的類比訊號。
諸如電壓、聲音、光亮、溫度等等的,都無法單純的由 0 和 1 構成。
那當我們需要處理這些訊號的時候該怎麼辦呢?
這時候就是 ADC (Analog to Digital Convert, ADC) 出場的時候啦!
Arduino 中的 ADC
Arduino 所採用的 AVR 微控制器內建有一組可多通道輸入多 ADC,根據型號的不同,其通道數目與效能也有所不同。
以我們常用的 Arduino UNO 為例,其所採用的 ATmega328p 微控制器內建有一組 6 通道 10 位元解析度的 A/D 轉換器,這 6 個通道的輸入腳位分別為 A0 ~ A5。
基本語法
在 Arduino 中要讀取 ADC 的輸入很簡單,但一樣要先在 setup() 中加入的設定。
| 1 2 | pinMode(腳位, INPUT); // Arduino UNO: A0~A5 | 
讀值的語法也很簡單,就這樣:
| 1 2 | int val = analogRead(腳位);   // Arduino UNO: A0~A5 | 
事前準備
- 可變電阻 x1
基本讀取
在這個範例中,我們將直接把可變電阻的電壓值透過 Arduino UNO 讀取後直接回傳到電腦上顯示。
硬體接線

程式碼
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | void setup()  {     // 設定 RS232     Serial.begin(9600);     // 設定 A0 輸入     pinMode(A0, INPUT); } void loop()  {     // 讀值     int val = analogRead(A0);     // 傳送資料至電腦     Serial.println( val ); } | 
LED 亮度控制
透過可變電阻來改變 LED 的亮度。
硬體接線

程式碼
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | int led = 9;             // LED 腳位 int analogPin = A0;  // 可變電阻腳位 int val = 0;         // 讀到的數值 void setup() {     // 設定 led 為輸出     pinMode(led, OUTPUT);     // 設定 A0 輸入     pinMode(A0, INPUT); } void loop() {     // 讀值     val = analogRead(analogPin);     // 將 0 ~ 1023 的 ADC 值轉成可被接收的 0 ~ 255     analogWrite(led, val / 4);  } | 
LED 跑馬燈速度控制
硬體接線

程式碼
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | int BASE = 10; // 從腳位 10 開始 int NUM = 4;   // LED 的總數 int analogPin = A0; int val = 0;      // 存放 ADC 數值 void setup() {     // 用迴圈設定腳位    for (int i = BASE; i < BASE + NUM; i ++)     {      pinMode(i, OUTPUT);    }    // 設定 A0 為輸入    pinMode(analogPin, INPUT); } void loop() {    for (int i = BASE; i < BASE + NUM; i ++)     {      digitalWrite(i, LOW);      val = analogRead(analogPin);      delay(val);    }    for (int i = BASE; i < BASE + NUM; i ++)     {      digitalWrite(i, HIGH);      val = analogRead(analogPin);      delay(val);    }   } | 
模擬
到這邊,類比輸入的部分就算介紹完了,希望這篇文章的內容對你有所幫助~
 
	
請問如何把監控視窗中的ADC數值顯示在LCD上呢? 有程式嗎?
我記得有相關的套件可以使用,挺方便的