## 數位整合設計-按鈕控制RGB LED顏色切換作業
### 授課教師:馮嘉慧(wanda@stust.edu.tw)
課程TA:張翊芠、黃筱萱
## HW02
:computer:按鈕控制RGB LED顏色切換

使用按鈕模組來控制 RGB LED 的顏色變化,按下按鈕時,RGB LED 變換顏色,
if...else判斷按鈕為"切換顏色"或"未按下",並顯示於串列視窗。
## 硬體連接
將Button模組連接至D3接腳,
RGB_LED模組連接至D6

## 範例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; // 更新按鈕狀態
}
```
## 顯示結果影片

影片連結: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("未按下");
}
```
---
### 結果影片

影片連結:https://youtu.be/V765c34KCO4
{"title":"Homework02-按鈕控制RGB LED顏色切換","description":"課程TA:張翊芠、黃筱萱","contributors":"[{\"id\":\"c3512447-9e7d-46f4-bf25-cd314aadf156\",\"add\":24668,\"del\":1818}]"}