實(shí)驗(yàn)所需材料
Arduino Uno、面包板、LED一個(gè)、220Ω電阻一個(gè)
連接示意圖

原理圖

如圖所示,實(shí)驗(yàn)中我們將LED連接到了帶PWM功能的D9引腳。
可以在 Arduino IDE菜單>文件>示例>03.Analog>Fading 打開(kāi)呼吸燈示例程序,程序如下:
- /*
- Fading
- 通過(guò)analogWrite() 函數(shù)實(shí)現(xiàn)呼吸燈效果
- */
- int ledPin = 9; // LED連接在9號(hào)引腳上
- void setup() {
- // Setup部分不進(jìn)行任何處理
- }
- void loop() {
- // 從暗到亮,以每次加5的形式逐漸亮起來(lái)
- for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
- // 輸出PWM
- analogWrite(ledPin, fadeValue);
- // 等待30ms,以便觀察到漸變效果
- delay(30);
- }
- // 從亮到暗,以每次減5的形式逐漸暗下來(lái)
- for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {
- // 輸出PWM
- analogWrite(ledPin, fadeValue);
- // 等待30ms,以便觀察到漸變效果
- delay(30);
- }
- }
上傳程序到Arduino Uno后,可以觀察到LED亮滅交換漸變,好似呼吸一般的效果。
以上程序中,通過(guò)for循環(huán),逐漸改變LED的亮度,達(dá)到呼吸的效果。在兩個(gè)for循環(huán)中都有delay(30) 的延時(shí)語(yǔ)句,這是為了讓我們?nèi)庋勰苡^察到亮度調(diào)節(jié)的效果。如果沒(méi)有這個(gè)語(yǔ)句,整個(gè)變化效果將一閃而過(guò)。
在編程開(kāi)發(fā)中,可以用多種不同的程序?qū)懛▽?shí)現(xiàn)近似的效果。這里再提供一種呼吸燈程序的寫(xiě)法,供大家研究學(xué)習(xí)。
- /*
- 另一種呼吸燈寫(xiě)法
- 感謝PPeach推薦
- */
- int led = 9; // LED燈連接在9號(hào)引腳
- int brightness = 0; // LED燈亮度
- int fadeAmount = 5; // 亮度漸變值
- void setup() {
- pinMode(led, OUTPUT);
- }
- void loop() {
- analogWrite(led, brightness);
- brightness = brightness + fadeAmount;
- if (brightness == 0 || brightness == 255) {
- fadeAmount = -fadeAmount ;
- }
- delay(30);
- }
現(xiàn)在我們要對(duì)呼吸燈實(shí)驗(yàn)做一個(gè)升級(jí),使用電位器控制呼吸燈的呼吸頻率。

電位器是一個(gè)可調(diào)電阻,其原理如圖2-38所示。通過(guò)旋轉(zhuǎn)旋鈕改變2號(hào)腳位置,從而改變2號(hào)腳到兩端的阻值。
實(shí)驗(yàn)中,我們需要將電位器1、3腳分別接到GND和3.3V,再通過(guò)模擬輸入引腳讀取電位器2號(hào)腳輸出的電壓,根據(jù)我們旋轉(zhuǎn)電位器的情況,2號(hào)腳的電壓會(huì)在0V至3.3V間變化。
實(shí)驗(yàn)所需材料
Arduino Uno、面包板、LED一個(gè)、220Ω電阻一個(gè)、10K電位器一個(gè)
連接示意圖

圖 2 37 調(diào)節(jié)呼吸燈頻率實(shí)驗(yàn)連接示意圖
原理圖

如圖所示,Arduino通過(guò)模擬輸入口A0讀入經(jīng)過(guò)電位器分壓的電壓,程序通過(guò)判斷電壓的大小,來(lái)調(diào)節(jié)LED的閃爍頻率。
呼吸頻率修改,即是修改每次亮度改變后的延時(shí)長(zhǎng)短。因此我們將原來(lái)的延時(shí)函數(shù)中固定的參數(shù)替換為變量time,通過(guò)time的變化,來(lái)調(diào)節(jié)LED呼吸頻率的變化。
實(shí)現(xiàn)程序代碼如下:
- int ledPin = 9; // 9號(hào)引腳控制LED
- int pot=A0; // A0引腳讀取電位器輸出電壓
- void setup(){}
- void loop(){
- // LED逐漸變亮
- for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5)
- {
- analogWrite(ledPin, fadeValue);
- // 讀取電位器輸出電壓,除以5時(shí)為了縮短延時(shí)時(shí)間
- int time=analogRead(pot)/5;
- delay(time); // 將time用于延時(shí)
- }
- // LED逐漸變暗
- for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5)
- {
- analogWrite(ledPin, fadeValue);
- delay(analogRead(pot)/5); // 讀取電位器輸出電壓,并用于延時(shí)
- }
- }
上傳該程序后,你便可以通過(guò)電位器來(lái)調(diào)節(jié)呼吸燈的呼吸頻率了。
需要注意的是,程序中的語(yǔ)句
- delay( analogRead(pot) / 5 );
等效于語(yǔ)句
- int time=analogRead(pot) / 5;
- delay(time);
承擔(dān)因您的行為而導(dǎo)致的法律責(zé)任,
本站有權(quán)保留或刪除有爭(zhēng)議評(píng)論。
參與本評(píng)論即表明您已經(jīng)閱讀并接受
上述條款。