相關(guān)推薦
您可能對(duì)下面課程感興趣
Arduino視頻教程基礎(chǔ)篇

75小節(jié)已有140818人學(xué)過(guò)

模擬I/O的使用呼吸燈實(shí)驗(yàn)
發(fā)布時(shí)間:2022-03-10 10:39 [ 我要自學(xué)網(wǎng)原創(chuàng) ] 發(fā)布人: 小劉2175 閱讀: 3157
之前的章節(jié)已經(jīng)介紹了多種方法控制LED,但單是開(kāi)關(guān)LED未免顯得太過(guò)單調(diào)了,還可以嘗試用analogWrite() 函數(shù)輸出PWM波,來(lái)制作一個(gè)帶呼吸效果的LED燈。

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

連接示意圖



原理圖



如圖所示,實(shí)驗(yàn)中我們將LED連接到了帶PWM功能的D9引腳。
可以在 Arduino IDE菜單>文件>示例>03.Analog>Fading 打開(kāi)呼吸燈示例程序,程序如下:


  1. /*
  2. Fading
  3. 通過(guò)analogWrite() 函數(shù)實(shí)現(xiàn)呼吸燈效果
  4. */

  5. int ledPin = 9;    // LED連接在9號(hào)引腳上

  6. void setup()  {
  7.   // Setup部分不進(jìn)行任何處理
  8. }

  9. void loop()  {
  10.   // 從暗到亮,以每次加5的形式逐漸亮起來(lái)
  11.   for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
  12.     // 輸出PWM
  13.     analogWrite(ledPin, fadeValue);         
  14.     // 等待30ms,以便觀察到漸變效果
  15.     delay(30);                           
  16.   }

  17.   // 從亮到暗,以每次減5的形式逐漸暗下來(lái)
  18.   for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {
  19.     // 輸出PWM
  20.     analogWrite(ledPin, fadeValue);         
  21.     // 等待30ms,以便觀察到漸變效果
  22.     delay(30);                           
  23.   }
  24. }
復(fù)制代碼


上傳程序到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í)。

  1. /*
  2. 另一種呼吸燈寫(xiě)法
  3. 感謝PPeach推薦
  4. */

  5. int led = 9;           // LED燈連接在9號(hào)引腳
  6. int brightness = 0;     // LED燈亮度
  7. int fadeAmount = 5;   // 亮度漸變值

  8. void setup() {
  9.   pinMode(led, OUTPUT);
  10. }

  11. void loop() {
  12.   analogWrite(led, brightness);
  13.   brightness = brightness + fadeAmount;
  14.   if (brightness == 0 || brightness == 255) {
  15.     fadeAmount = -fadeAmount ;
  16.   }
  17.   delay(30);
  18. }
復(fù)制代碼




現(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)程序代碼如下:

  1. int ledPin = 9;  // 9號(hào)引腳控制LED
  2. int pot=A0;    // A0引腳讀取電位器輸出電壓
  3. void setup(){}

  4. void loop(){
  5.   // LED逐漸變亮
  6.   for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5)
  7.   {
  8.     analogWrite(ledPin, fadeValue);
  9. // 讀取電位器輸出電壓,除以5時(shí)為了縮短延時(shí)時(shí)間
  10. int time=analogRead(pot)/5;
  11.     delay(time);  // 將time用于延時(shí)
  12.   }
  13.   // LED逐漸變暗
  14.   for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5)
  15.   {
  16. analogWrite(ledPin, fadeValue);
  17.     delay(analogRead(pot)/5);  // 讀取電位器輸出電壓,并用于延時(shí)
  18.   }
  19. }
復(fù)制代碼


上傳該程序后,你便可以通過(guò)電位器來(lái)調(diào)節(jié)呼吸燈的呼吸頻率了。

需要注意的是,程序中的語(yǔ)句
  1. delay( analogRead(pot) / 5 );
復(fù)制代碼

等效于語(yǔ)句
  1. int time=analogRead(pot) / 5;
  2. delay(time);
復(fù)制代碼


Arduino視頻教程基礎(chǔ)篇
我要自學(xué)網(wǎng)商城 ¥40 元
進(jìn)入購(gòu)買
文章評(píng)論
0 條評(píng)論 按熱度排序 按時(shí)間排序 /350
添加表情
遵守中華人民共和國(guó)的各項(xiàng)道德法規(guī),
承擔(dān)因您的行為而導(dǎo)致的法律責(zé)任,
本站有權(quán)保留或刪除有爭(zhēng)議評(píng)論。
參與本評(píng)論即表明您已經(jīng)閱讀并接受
上述條款。
V
特惠充值
聯(lián)系客服
APP下載
官方微信
返回頂部
相關(guān)推薦
您可能對(duì)下面課程感興趣
Arduino視頻教程基礎(chǔ)篇

75小節(jié)已有140818人學(xué)過(guò)

分類選擇:
電腦辦公 平面設(shè)計(jì) 室內(nèi)設(shè)計(jì) 室外設(shè)計(jì) 機(jī)械設(shè)計(jì) 工業(yè)自動(dòng)化 影視動(dòng)畫(huà) 程序開(kāi)發(fā) 網(wǎng)頁(yè)設(shè)計(jì) 會(huì)計(jì)課程 興趣成長(zhǎng) AIGC