## 數位整合設計-按鈕控制RGB LED顏色切換作業 ### 授課教師:馮嘉慧(wanda@stust.edu.tw) 課程TA:張翊芠、黃筱萱 ## HW02 :computer:按鈕控制RGB LED顏色切換 ![chanbalelednb1-600x450](https://hackmd.io/_uploads/HJC9CmlTyx.jpg =200x)![bgpushb1-600x450](https://hackmd.io/_uploads/HJHsR7eTyx.jpg =200x) 使用按鈕模組來控制 RGB LED 的顏色變化,按下按鈕時,RGB LED 變換顏色, if...else判斷按鈕為"切換顏色"或"未按下",並顯示於串列視窗。 ## 硬體連接 將Button模組連接至D3接腳, RGB_LED模組連接至D6 ![S__40624135](https://hackmd.io/_uploads/HJu2IHl6Jl.jpg =600x) ## 範例1:RGB三色切換顯示 ### 宣告區 ```javascript= #include <ChainableLED.h> //RGB函式庫 const int button_pin = 3; //宣告按鈕模組使用的腳位編號 #define NUM_LEDS 1 //使用的RGB_LED數量 #define LED_pin1 6 //宣告感測器使用開發版的D6腳位(宣告時需捨去字母D) #define LED_pin2 7 //宣告感測器使用開發版的D7腳位(宣告時需捨去字母D) ChainableLED leds(LED_pin1, LED_pin2, NUM_LEDS); //建立ChainableLED物件 int currentColor = 0; // 用來追蹤當前 LED 顏色狀態 bool lastButtonState = LOW; // 記錄上次按鈕狀態,避免重複觸發 ``` ### setup區(初始化設定) ```javascript=12 void setup() { pinMode(button_pin, INPUT); //將按鈕模組的接腳初始化 Serial.begin(9600); //初始化並打開串列視窗 leds.setColorRGB(0, 255, 255, 255); // 初始設為白色 } ``` ### loop區(迴圈) ```javascript=19 void loop() { int buttonState = digitalRead(button_pin); //獲取模組數據 if (buttonState == HIGH && lastButtonState == LOW){ //根據數據判斷按鈕是否按下 Serial.print("buttonState="); //印出字串buttonState= Serial.println(buttonState); //印出按鈕狀態 Serial.println("切換顏色"); //在串列視窗顯示切換顏色字串 currentColor = (currentColor + 1) % 3;// 切換 LED 顏色 switch (currentColor) { case 0: leds.setColorRGB(0, 255, 0, 0); break; // 紅色 case 1: leds.setColorRGB(0, 0, 255, 0); break; // 綠色 case 2: leds.setColorRGB(0, 0, 0, 255); break; // 藍色 }} else{ Serial.print("buttonState="); //印出字串buttonState= Serial.println(buttonState); //印出按鈕狀態 Serial.println("未按下"); } delay(100); //間隔0.1秒,再進行下一次讀取 lastButtonState = buttonState; // 更新按鈕狀態 } ``` ## 顯示結果影片 ![螢幕擷取畫面 2025-03-25 222956](https://hackmd.io/_uploads/BJ2Tp4xpJx.png) 影片連結:https://www.youtube.com/watch?v=vyClne3wD1U ## 範例2:RGB隨機切換顯示 ### 宣告區 ```javascript= #include <ChainableLED.h> // RGB LED 函式庫 const int button_pin = 3; // 宣告按鈕模組使用的腳位編號 #define NUM_LEDS 1 // 使用的 RGB LED 數量 #define LED_pin1 6 // LED 連接的 D6 腳位 #define LED_pin2 7 // LED 連接的 D7 腳位 ChainableLED leds(LED_pin1, LED_pin2, NUM_LEDS); // 建立 ChainableLED物件 bool lastButtonState = LOW; // 記錄上次按鈕狀態,避免重複觸發 ## setup區(初始化設定) ```javascript=13 void setup() { pinMode(button_pin, INPUT); Serial.begin(9600); randomSeed(analogRead(0)); // 使用類比讀取的值作為隨機種子 leds.setColorRGB(0, 255, 255, 255); // 初始設為白色 } ``` ### loop區(迴圈) ```javascript=20 void loop() { int buttonState = digitalRead(button_pin); // 讀取按鈕狀態 // 檢測按鈕是否從未按下 (LOW) 變為按下 (HIGH),避免重複觸發 if (buttonState == HIGH && lastButtonState == LOW) { Serial.print("buttonState="); //印出字串buttonState= Serial.println(buttonState); //印出按鈕狀態 Serial.println("切換顏色"); //印出字串切換顏色 // 產生 0 ~ 255 之間的隨機數作為 RGB 顏色 int red = random(0, 255); int green = random(0, 255); int blue = random(0, 255); leds.setColorRGB(0, red, green, blue);// 設定 LED 顏色 Serial.print("RGB: "); //印出字串RGB: Serial.print(red); //顯示R數值 Serial.print(", "); //印出字串, Serial.print(green); //顯示G數值 Serial.print(", "); //印出字串, Serial.println(blue); //顯示G數值 //在序列埠顯示 RGB 數值 }else{ Serial.print("buttonState="); Serial.println(buttonState); Serial.println("未按下"); } ``` --- ### 結果影片 ![螢幕擷取畫面 2025-03-25 223408](https://hackmd.io/_uploads/SJ5aRVxTke.png) 影片連結:https://youtu.be/V765c34KCO4
{"title":"Homework02-按鈕控制RGB LED顏色切換","description":"課程TA:張翊芠、黃筱萱","contributors":"[{\"id\":\"c3512447-9e7d-46f4-bf25-cd314aadf156\",\"add\":24668,\"del\":1818}]"}
Expand menu