Arduino Basic (6) – AnalogRead 類比輸入

前面幾節講的都是數位的處理,也就是只有 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() 中加入的設定。

pinMode(腳位, INPUT); // Arduino UNO: A0~A5

讀值的語法也很簡單,就這樣:

int val = analogRead(腳位);   // Arduino UNO: A0~A5

事前準備

  • 可變電阻 x1

基本讀取

在這個範例中,我們將直接把可變電阻的電壓值透過 Arduino UNO 讀取後直接回傳到電腦上顯示。

硬體接線

硬體接線

程式碼

void setup() 
{
    // 設定 RS232
    Serial.begin(9600);
    // 設定 A0 輸入
    pinMode(A0, INPUT);
}

void loop() 
{
    // 讀值
    int val = analogRead(A0);
    // 傳送資料至電腦
    Serial.println( val );
}

LED 亮度控制

透過可變電阻來改變 LED 的亮度。

硬體接線

程式碼

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 跑馬燈速度控制

硬體接線

程式碼

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);
   }  
}

模擬

到這邊,類比輸入的部分就算介紹完了,希望這篇文章的內容對你有所幫助~

獨夜:

看評論 (2)