還記得前幾個咱們都是在講解數字IO,而其實咱們生活中大多數信號都是模擬信號,如聲音以及溫度變化。在Arduino中,經常使用0~5v的電壓來表示模擬信號。git
在Arduino,編號前帶有「A」的引腳是模擬輸入引腳,Arduino能夠讀取這些引腳上輸入的模擬值,也就是能夠讀取引腳上輸入的電壓大小。
模擬輸入引腳帶有ADC功能(ADC:Analog-to-Digital Converter 模數轉換)。它能夠將外部輸入的模擬信號轉換爲芯片運算時能夠識別的數字信號,從而實現讀取模擬值的功能。函數
模擬輸入功能須要使用analogRead(pin)函數,其中pin是讀取模擬值的引腳,被指定的引腳必須是模擬輸入引腳。oop
要使用analogWrite()函數來實現模擬輸出功能。學習
注意:ui
當使用analogWrite函數,指定引腳會經過高低電平的不斷轉換來輸出一個週期固定(約490Hz)的方波,經過改變高低電平在每一個週期中所佔比例(佔空比),而獲得近似輸出不一樣電壓的效果。code
analogWrite(pin,value):參數pin爲要輸出的PWM波的引腳,參數value是PWM的脈衝寬度,範圍爲0~255。
大多數Arduino控制器的PWM引腳都會用「~」標識,能夠查看一下本身的板子。常見幾款板子PWM引腳爲:blog
基礎知識介紹好了,那麼就開始接下來的實驗了。it
主要實現兩個實驗內容:io
實驗介紹:
將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); } }
實驗介紹:
在固定呼吸燈基礎上,經過讀入的模擬電壓大小(模擬輸入咱們採用一個電位器來分壓)來調整頻率,同時利用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); } }
固然,上面電位器能夠換成光敏電阻之類的,這樣就能夠考慮作一個晚上呼吸白天熄滅的呼吸燈。
這一課,相對很簡單,咱們主要學習模擬IO口的使用。之後當咱們遇到光敏電阻、熱敏電阻、溫度傳感器、氣體傳感器之類的能夠產生模擬信號的,就應該想到模擬IO口了。