搜尋程式碼

第98-8課:用Arduino同按鈕同LED整走路燈

第98-8課:用Arduino同按鈕同LED整走路燈

呢個項目會教你點樣整一個「走馬燈」,每次你撳一下按鈕,佢就會前進一格。唔似得嗰啲自己跟時間行嘅燈,你可以直接用手控制:每撳一下,著緊嘅 LED 就會向前移一個位,去到最後一粒 LED 之後就會繞返去第一粒。呢個係 Arduino 學習入面最有用嘅基礎之一,因為佢教你點樣將一個數位輸入(按鈕)同一個循環狀態機(邊粒 LED 而家著緊)結合埋一齊 — 呢個模式你之後會不斷用到。

5 leds on breadboard with push button shown connected to Arduino UNO
5 leds on breadboard with push button shown connected to Arduino UNO

一旦你明白咗呢個模式,同樣嘅邏輯可以應用喺好多真實項目度。以下係幾個你可以用佢嚟整嘅實用諗頭:

  • 一個裝置上面嘅選單選擇器,每撳一下就會亮起下一個選項。
  • 一個機器或者流程嘅順序步驟指示器(步驟 1、步驟 2、步驟 3……)。
  • 一個你可以用手動撳掣嚟推進嘅分數或者等級顯示。
  • 一個燈光控制器嘅「下一個頻道」或者「下一個模式」指示器。
  • 一個簡單嘅遊戲或者問答搶答器,玩家輪流點亮下一盞燈。
  • 一個繼電器或者負載順序器,每撳一下就會按順序啟動下一個輸出。

比起自動走馬燈,呢個最大嘅好處就係控制:你唔撳就唔會有嘢發生,所以盞燈只會喺決定嘅時候先至會前進。段片仲提到,同樣嘅切換同順序概念可以驅動繼電器去開關交流電燈或者控制摩打,唔淨止係 LED(喺片入面 19:52 位置)。

硬件同零件

零件清單好短而且唔貴:

  • 一塊 Arduino 板(Uno、Nano、Mega,或者任何兼容嘅板)。
  • 五粒 LED — 5 mm 或者 3 mm,咩顏色都得。
  • 五粒限流電阻,200 Ω 到 1000 Ω(段片用嘅係 1 kΩ)。
  • 一個按鈕開關(最好用瞬時輕觸開關)。
  • 一塊麵包板同埋一啲杜邦跳線。

關於 LED 嘅小提示:陰極係短嗰隻腳同埋有平邊嗰邊,而陽極係長嗰隻腳(喺片入面 03:13 位置)。電阻值唔係好關鍵 — 電阻越大 LED 就越暗,所以由大約 300 Ω 到 1000 Ω 都冇問題(喺片入面 05:33 位置)。

接線指南

Schematic for Arduino walking light LEDs
Schematic for Arduino walking light LEDs
wiring for Arduino walking light LEDs with push button
wiring for Arduino walking light LEDs with push button

接線基本上同標準嘅五粒 LED 走馬燈一樣,只係加多一個按鈕。每粒 LED 嘅陽極連去自己嘅 Arduino 腳位,而每粒陰極就透過自己嘅電阻連去麵包板上共用嘅接地軌。喺呢個製作入面,LED 係接去腳位 3、4、5、6 同 7(喺片入面 31:37 位置)。按鈕就放喺麵包板上,一隻腳接地,另一隻腳接去腳位 2 — 即係程式碼用嚟讀按鈕嘅同一隻腳(喺片入面 37:04 位置)。

因為程式碼會啟用 Arduino 嘅內部上拉電阻,所以按鈕唔需要外接電阻。當按鈕冇撳嘅時候,隻腳會讀到 HIGH,而當你撳落去嘅時候,隻腳就會被拉去接地,讀到 LOW(喺片入面 14:02 位置)。

程式碼解釋

完整嘅程式喺呢篇文章下面可以搵到。呢度我哋集中講你會真正想改嘅部分。

喺 sketch 嘅頂部,每粒 LED 同按鈕都會指派去一個腳位。呢度就係你根據自己嘅接線嚟自訂嘅地方:

const int pushButtonPin = 2; // push button pin
const int LED1 = 3;
const int LED2 = 4;
const int LED3 = 5;
const int LED4 = 6;
const int LED5 = 7;

int LED_ON = LED1; // which LED is currently lit

LED_ON 呢個變數就係呢個項目嘅核心。佢記住而家邊粒 LED 著緊,由 LED1 開始。每次你撳按鈕,程式碼就會將 LED_ON 推進到序列入面嘅下一粒 LED,並且熄咗之前嗰粒,所以任何時候都只會有一粒 LED 著緊。

每次撳完之後仲有一個短暫嘅延遲:

delay(200); // debounce / give the user time between presses

呢個 200 毫秒嘅停頓可以防止一次物理撳壓被記錄成多次撳壓。如果你隻手指震或者覺得按鈕太敏感,就加大呢個數字;如果你想反應快啲,就調低佢。要注意設定得太低可能會令盞燈意外咁跳格(喺片入面 41:20 位置)。

主要邏輯喺 loop() 入面。佢會讀取按鈕,只有當按鈕被按下(讀到 LOW)嗰陣,先至會推進燈光。個序列用一串 if / else if 檢查,由 LED1 移到 LED2 再到 LED3,如此類推,最後一個之後就繞返去 LED1。如果你想改方向或者 LED 嘅順序,就係呢個區塊要改 — 只要重新指定邊個引腳跟邊個就得。

即時專案同示範

上傳完代碼之後,按下按鈕就會著第一粒 LED;放開佢就會令嗰粒 LED 保持亮住。下一次按下就會將燈光移到第二粒 LED,然後第三、第四、第五粒,再下一次按下就會返返去第一粒 — 一個連續嘅循環(影片入面 40:22)。

200 毫秒延遲嘅一個好處係,如果你撳住按鈕唔放,燈光就會自己每 200 毫秒繼續推進,實際上令個專案喺撳住按鈕期間變成一個自動走馬燈(影片入面 42:07)。放開按鈕,佢就會停喺當前嗰粒 LED。咁樣你就可以用一粒按鈕同時做到手動步進同免持運行。

如果你反而想燈光完全唔使按鈕都自動運行,嗰個係另一個製作。自動版本喺 第 98-7 課:使用 Arduino 同 5 粒 LED 嘅走馬燈 有講。

呢條影片相關嘅專案

章節

  • [00:00] 10 個 Arduino LED 專案概覽
  • [01:22] Arduino 逐步課程簡介
  • [02:29] 了解 LED:符號、極性同引腳
  • [03:49] 計算 LED 限流電阻
  • [30:47] 用 5 粒 LED 嘅走馬燈:接線同原理
  • [32:52] 走馬燈代碼:引腳、時序同迴圈
  • [36:41] 用按鈕推進燈光
  • [37:44] 用按鈕嘅走馬燈:代碼講解
  • [40:22] 示範同調整按下延遲
  • [57:16] 結語同課程收尾

圖片

wiring for Arduino walking light LEDs with push button
wiring for Arduino walking light LEDs with push button
Schematic for Arduino walking light LEDs with push button
Schematic for Arduino walking light LEDs with push button
Schematic for Arduino walking light LEDs
Schematic for Arduino walking light LEDs
5 個 LED 喺麵包板上,按鈕連接到 Arduino UNO
5 個 LED 喺麵包板上,按鈕連接到 Arduino UNO
940-Lessson 98-LED-8: Arduino code walking LED light with push button
語言: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

文件📁

Arduino 函式庫 (zip)

用户手册