Arduino學習筆記⑤ 模擬IO實驗

1.前言

    還記得前幾個咱們都是在講解數字IO,而其實咱們生活中大多數信號都是模擬信號,如聲音以及溫度變化。在Arduino中,經常使用0~5v的電壓來表示模擬信號。git

1.1 模擬輸入功能

    在Arduino,編號前帶有「A」的引腳是模擬輸入引腳,Arduino能夠讀取這些引腳上輸入的模擬值,也就是能夠讀取引腳上輸入的電壓大小。
    模擬輸入引腳帶有ADC功能(ADC:Analog-to-Digital Converter 模數轉換)。它能夠將外部輸入的模擬信號轉換爲芯片運算時能夠識別的數字信號,從而實現讀取模擬值的功能。函數

  • 使用AVR芯片的Arduino模擬輸入功能有10位精度,意味着0~5V電壓會轉換成0~1023的整數形式表示。

    模擬輸入功能須要使用analogRead(pin)函數,其中pin是讀取模擬值的引腳,被指定的引腳必須是模擬輸入引腳。oop

1.2 模擬輸出功能

    要使用analogWrite()函數來實現模擬輸出功能。學習

注意:ui

  • 該函數並非輸出真正意義上的模擬值,而是以一種特殊的方式來達到輸出模擬值的效果,也就是咱們常常聽到的「PWM」(脈衝寬度調製 Pulse Width Modulation)。

    當使用analogWrite函數,指定引腳會經過高低電平的不斷轉換來輸出一個週期固定(約490Hz)的方波,經過改變高低電平在每一個週期中所佔比例(佔空比),而獲得近似輸出不一樣電壓的效果。code

image

    analogWrite(pin,value):參數pin爲要輸出的PWM波的引腳,參數value是PWM的脈衝寬度,範圍爲0~255。
    大多數Arduino控制器的PWM引腳都會用「~」標識,能夠查看一下本身的板子。常見幾款板子PWM引腳爲:blog

image

    基礎知識介紹好了,那麼就開始接下來的實驗了。it

2.實驗內容

    主要實現兩個實驗內容:io

  • 固定呼吸燈
  • 可調呼吸燈

2.1 固定呼吸燈

實驗介紹:
    將LED鏈接到PWM引腳,主要利用模擬輸出功能 analogWrite 函數輸出電壓,呼吸頻率固定。class

實驗代碼:

/**
* @Desc  固定呼吸燈
* @author 單片機菜鳥
* @Date  2016/12/8
* 注意:LED的一端接到5V,另一端接到輸出引腳,低電平亮
*       按鍵是高電平有效
*/

#define LED 9
#define DELAY_TIME 30 //延時時間

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  //從暗到亮,每次亮度值加5,直到最亮
  for(int fadeValue = 0;fadeValue<=255;fadeValue+=5){
     //輸出PWM
     analogWrite(LED,fadeValue);
     //延時一下
     delay(DELAY_TIME);  
  }

  //從亮到暗 每次亮度-5直到最暗
  for(int fadeValue=255;fadeValue>=0;fadeValue-=5){
     //輸出PWM
     analogWrite(LED,fadeValue);
     //延時一下
     delay(DELAY_TIME);  
  }
}

2.2 可調呼吸燈

實驗介紹:
    在固定呼吸燈基礎上,經過讀入的模擬電壓大小(模擬輸入咱們採用一個電位器來分壓)來調整頻率,同時利用analogRead以及analogWrite函數。

實驗代碼:

/**
* @Desc  可調呼吸燈
* @author 單片機菜鳥
* @Date  2016/12/8
* 注意:LED的一端接到5V,另一端接到輸出引腳,低電平亮
*       按鍵是高電平有效
*/

#define LED 9

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  //從暗到亮,每次亮度值加5,直到最亮
  for(int fadeValue = 0;fadeValue<=255;fadeValue+=5){
     //輸出PWM
     analogWrite(LED,fadeValue);
     //延時一下
     int delaytime = analogRead(A0)/5;//讀取電位器輸出電壓 用於延時
     delay(delaytime);  
  }

  //從亮到暗 每次亮度-5直到最暗
  for(int fadeValue=255;fadeValue>=0;fadeValue-=5){
     //輸出PWM
     analogWrite(LED,fadeValue);
     //延時一下
     int delaytime = analogRead(A0)/5;
     delay(delaytime);  
  }
}

    固然,上面電位器能夠換成光敏電阻之類的,這樣就能夠考慮作一個晚上呼吸白天熄滅的呼吸燈。

3.總結

    這一課,相對很簡單,咱們主要學習模擬IO口的使用。之後當咱們遇到光敏電阻、熱敏電阻、溫度傳感器、氣體傳感器之類的能夠產生模擬信號的,就應該想到模擬IO口了。

相關文章
相關標籤/搜索