Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 手把手教你智能硬件開發(三) 控制LED燈

手把手教你智能硬件開發(三) 控制LED燈

編輯:關於Android編程

第3節 控制LED燈

現在我們開始嘗試用代碼控制一個真正的直觀的硬件設備。

第一個例子:讓Arduino開發板上的一個LED小燈周期性的打開、關閉。
第二個例子:讓LED燈亮度逐漸的變亮變暗。

3.1 LED燈的開關

3.1.1 原理介紹

Arduino開發板上,都會有兩個LED指示燈。不同的開發板,LED指示燈的位置、顏色略有不同。

電源指示燈。當開發板連接上電源(或者通過USB線供電)後,用來指示電源是否接通。這個LED燈旁邊肯定有一個“On”標記;

測試用指示燈。這是一個用來做內部測試的指示燈,也正是本示例要使用到的指示燈。在這個LED燈旁看到個‘L’標記;

\

前面的章節中,我們介紹了Arduino開發板提供了3類引腳。其中數字引腳D13就控制著這個測試用指示燈。因此我們只需要在代碼中控制好這個引腳就好了。
沒有可外接的LED模塊時,就用D13引腳來做測試。

3.1.2 代碼設計

通過菜單欄創建一個叫做LEDTest.ino的文件,啟動這個示例。

任何引腳在使用之前,都要在setup()中對它進行初始化,告知這個引腳用來輸出-OUTPUT,還是用來輸入-INPUT。這裡是要初始化D13引腳,讓它作為輸出。

//定義引腳的編號,這裡使用的是數字引腳13。
int pin = 13;

void setup()
{
    //設置該引腳類型為輸出
    pinMode(pin, OUTPUT);
}

通過digitalWrite()函數,讓指示燈變亮一秒,然後變暗一秒,如此往復,

void loop()
{
    //將該引腳設置成高電平,也就是通電,打開指示燈
    digitalWrite(pin, HIGH);

    //延時1秒,在這1秒鐘,LED燈狀態不變,即點亮狀態
    delay(1000);

    //將該引腳設置成低電平,也就是斷電,關閉指示燈
    digitalWrite(pin, LOW);

    //延時1秒,在這1秒鐘,LED燈狀態不變,即熄滅狀態
    delay(1000); 
}

loop()執行之後,會被循環再次執行,我們設計的效果就是LED燈一秒亮、一秒暗的不停的循環。

digitalWrite()函數專門用來為數字引腳設置高低電平,

//將該引腳設置成高電平
digitalWrite(pin, HIGH);

//將該引腳設置成低電平
digitalWrite(pin, LOW);

3.1.3 結果觀察

將工程編譯部署到開發板上,就能看到D13連接到LED指示燈,一秒亮、一秒暗的不停閃爍。

3.2 LED燈明暗調節

3.2.1 原理介紹

數字引腳只能輸出高電平HIGH或低電平LOW兩種,但是通過脈沖寬度調制(Pulse Width Modulation簡稱PWM)就能讓數字端口模擬輸出多級的電壓(通常是0級~255級,0級代表沒有,255級代表最高電壓)。

數字引腳上的電壓,可以看成是一個個脈沖方波,當引腳一直處於高電平的時候,輸出為V,

\

當引腳電壓的脈沖方波周期中,有50%的時間中處於高電平的時候,平均輸出就為V/2;

\

當引腳電壓的脈沖方波周期中,有33.3%的時間中處於高電平的時候,平均輸出就為V/3;

\

以此類推。

*更官方的表述請參考官網。

Arduino開發板提供的數字引腳中,有的引腳就具備了PWM的能力:能夠設置這些數字引腳的電壓輸出級數。

int pin = 13;

pinMode(pin, OUTPUT);

......

//設置成輸出10級電壓,電壓強度從0~255
analogWrite(pin, 10);

通過官網給出的規格,可以看出Arduino MEGA開發板的D13引腳,是具備PWM功能的。所以我們可以讓測試指示燈漸變明暗。

不過Arduino UNO開發板上的D13引腳並不具備PWM功能,因此要在它上面進行燈光強弱調整的實驗,必須要在其他的引腳上,外接一個LED燈硬件。這部分內容,我們將在後面介紹。

3.2.2 代碼設計

改造前面的LEDTest.ino文件。

在setup()中對它進行初始化,告知這個引腳用來輸出-OUTPUT,或者用來輸入-INPUT。這裡是要初始化D13引腳,讓它作為輸出。

//定義引腳的編號,這裡使用的是數字引腳13
int pin = 13;

void setup()
{
    //設置該引腳為輸出
    pinMode(pin, OUTPUT);
}

通過analogWrite()函數,讓指示燈逐級變亮,然後逐級變暗,如此往復,

void loop()
{
    //將該引腳從0級逐步設置到255級,指示燈逐漸變亮
    for(int level = 0; level < 256; level++)
    {
        analogWrite(pin, level);
        //延時100毫秒,LED燈狀態不變
        delay(10);
    }

    //將該引腳從255級逐步設置到0級,指示燈逐漸變暗
    for(int level = 255; level >= 0; level--)
    {
        analogWrite(pin, level);
        //延時100毫秒,LED燈狀態不變
        delay(10);
    }
}

loop()執行之後,會被循環再次執行,我們設計的效果就是LED燈逐漸變亮,再逐漸變暗。

這裡使用了analogWrite()函數向數字引腳設置電壓0級~255級中的任何一級,

//將該PWM引腳設置成0~255級中的任何一級
analogWrite(pin, level);

可見analogWrite()函數並不像它的名字那樣只是模擬引腳的專利,它對支持PWM的引腳同樣適用。

3.2.3 結果觀察

將工程編譯部署到開發板上,就能看到D13連接到LED指示燈,一會兒亮一會兒暗的逐漸變化。

3.3 其他LED燈的使用

除了使用Arduino MEGA開發板的D13引腳,我們也可以使用任何其他帶PWM功能的數字引腳。例如Arduino MEGA開發板的D2~D13 D44 D46;Arduino UNO開發板的3 5 6 9 10 11。將LED燈接到這些引腳上面,就能同樣的實現對LED燈的控制。

3.3.1 LED模塊

你的LED模塊可能是單色的:只能發出一種顏色的光,這種模塊有3個引腳,標注字符S的是控制燈光強度的引腳、VCC或者+是電源引腳、GND或者G是接地引腳,例如安豆的雜貨鋪中提供的單色LED燈模塊,

\

LED燈也可能支持3種基礎顏色-紅綠藍,這種模塊有4個引腳,例如安豆的雜貨鋪中提供的三色LED燈模塊,

標注字符R的是控制紅色燈光強度的引腳; 字符G的是控制綠色燈光強度的引腳; 字符B的是控制藍色燈光強度的引腳; GND是接地引腳, \

3.3.2 連接模塊

這裡我們先用單色的LED燈模塊舉例。

MEGA開發板,2-13引腳都支持PWM,隨便選一個都可以。

\

UNO開發板,3,5,6,9,10,11引腳支持PWM,可以在開發板上看到引腳數字邊上有個’~’。

\

這裡我們選擇D9引腳來連接LED燈。

LED燈的S引腳連接到MEGA D9引腳;VCC接到MEGA 5V引腳;GND接到MEGA GND引腳。

早期的開發板,為了防止電壓不穩定擊穿電子器件,需要連接個電阻。
現在的開發板,只在接馬達時才需要增加電阻,慣常的做法是增加一塊擴展板。

在實際的硬件連接當中,我們通常用擴展板來連接LED模塊和開發板。

\

這裡我們使用傳感器擴展板,

\

可以看到擴展板上已經印制出了每個引腳的含義,

對於數字引腳擴展槽來說,
GND或者G:接地引腳
VCC或者V:供電引腳
D或者S:被擴展出的引腳,其下方的數字代表該引腳的編號

\

對於模擬引腳擴展槽來說,
GND或者G:接地引腳
V或者+:供電引腳,
S:被擴展出的引腳,其下方的數字代表該引腳的編號

\

所以,對於這裡的情況,我們選擇標注了9的數字引腳擴展插槽。

擴展板引腳 連接 單色LED燈模塊引腳 9組V <—> + 9組G <—> G 9組S <—> S \

3.3.3 修改代碼

因為這次我們使用了D9引腳,所以需要修改前面使用的D13引腳為D9,

//定義引腳的編號,這裡使用的是數字引腳9
int pin = 9;

void setup()
{
   //設置該引腳為輸出
   pinMode(pin, OUTPUT);
}

void loop()
{
   //將該引腳從0級逐步設置到255級,指示燈逐漸變亮
   for(int level = 0; level < 256; level++)
   {
       analogWrite(pin, level);
       //延時100毫秒,LED燈狀態不變
       delay(10);
   }

   //將該引腳從255級逐步設置到0級,指示燈逐漸變暗
   for(int level = 255; level >= 0; level--)
   {
       analogWrite(pin, level);
       //延時100毫秒,LED燈狀態不變
       delay(10);
   }
}

3.3.4 結果觀察

將工程編譯部署到開發板上,就能看到D9連接到LED指示燈,一會兒亮一會兒暗的逐漸變化。

3.3.5 使用三色LED燈

使用三色的LED燈模塊,與使用單色的LED燈模塊一樣。在硬件連接時,要同時把紅R、綠G、藍B三種顏色對應的引腳連接到PWM接口上。例如使用數字引腳D9、D10、D11,分別對應紅、綠、藍三種顏色,就要多使用幾個擴展板的插槽,將對應的R G B引腳插在標注了9 10 11編號的數字擴展口上,

\

在代碼中要初始化三個PWM接口。

//定義引腳的編號,這裡使用的是數字引腳D9、D10、D11,
//分別對應紅、綠、藍三種顏色
int RED_LED_PIN = 9;
int GREEN_LED_PIN = 10;
int BLUE_LED_PIN = 11;

void setup()
{   
   //設置該引腳為輸出
   pinMode(RED_LED_PIN, OUTPUT);
   pinMode(GREEN_LED_PIN, OUTPUT);
   pinMode(BLUE_LED_PIN, OUTPUT);
}

void loop()
{
   //將該引腳從0級逐步設置到255級,指示燈逐漸變亮
   for(int level = 0; level < 256; level++)
   {
       analogWrite(RED_LED_PIN, level);
       analogWrite(GREEN_LED_PIN, level);
       analogWrite(BLUE_LED_PIN, level);
       //延時100毫秒,LED燈狀態不變
       delay(10); 
   }

   //將該引腳從255級逐步設置到0級,指示燈逐漸變暗
   for(int level = 255; level >= 0; level--)
   {
       analogWrite(RED_LED_PIN, level);
       analogWrite(GREEN_LED_PIN, level);
       analogWrite(BLUE_LED_PIN, level);
       //延時100毫秒,LED燈狀態不變
       delay(10); 
   } 
}
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved