# LAB2 可變電阻調整LED ## DEMO <iframe width="560" height="315" src="https://www.youtube.com/embed/FpCYZQQDTxw?si=g6TqX5cqcoVbMrZt" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> ## 電路圖 ![image](https://hackmd.io/_uploads/r1XRyknCR.png) - 不要接12! - 不要接12! - 不要接12! - 不要接12! - 這是血的教訓 ## 程式碼說明 - 讀取可變電阻數值,並映射到0~255 ```c++ // 讀取紅色輸入數值 int red_val = analogRead(potpinr); red_val = map(red_val, 0, 4095, 0, 255); // 讀取綠色輸入數值 int green_val = analogRead(potping); green_val = map(green_val, 0, 4095, 0, 255); // 讀取藍色輸入數值 int blue_val = analogRead(potpinb); blue_val = map(blue_val, 0, 4095, 0, 255); ``` - LED燈輸出 ```c++ color(red_val, green_val, blue_val); ``` - `color`函數 ```c++ void color (unsigned char red, unsigned char green, unsigned char blue) { analogWrite(redPin, red); analogWrite(greenPin, green); analogWrite(bluePin, blue); } ``` - LCD更新 ```c++ lcd.clear(); lcd.setCursor(0,0); lcd.print("(R, G, B)"); lcd.setCursor(0, 1); lcd.print(String(red_val) + ", " + String(green_val) + ", " + String(blue_val)); ``` ## 程式碼 ```c++= /* * 電路模組用全彩LED模組、LCD模組 * ESP32 有匯入analogWrite.h,需去 草稿碼 > 匯入函式庫 > 管理函式庫 * ESP32 LiquidCrystal_I2C.h,需去 草稿碼 > 匯入函式庫 > 管理函式庫 */ #include <analogWrite.h> #include <LiquidCrystal_I2C.h> // LED 和可變電阻的腳位 int redPin = 17; int greenPin = 16; int bluePin = 15; int potpinr = 27; int potping = 14; int potpinb = 13; LiquidCrystal_I2C lcd(0x27,16,2); void setup() { // 初始化 Serial Serial.begin(9600); // 設定 LED 腳位為輸出 pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); lcd.init(); lcd.backlight(); } void loop() { // 讀取紅色輸入數值 int red_val = analogRead(potpinr); red_val = map(red_val, 0, 4095, 0, 255); // 讀取綠色輸入數值 int green_val = analogRead(potping); green_val = map(green_val, 0, 4095, 0, 255); // 讀取藍色輸入數值 int blue_val = analogRead(potpinb); blue_val = map(blue_val, 0, 4095, 0, 255); Serial.printf("r: %u g: %u b: %u\n", red_val, green_val, blue_val); //更新LCD數值 lcd.clear(); lcd.setCursor(0,0); lcd.print("(R, G, B)"); lcd.setCursor(0, 1); lcd.print(String(red_val) + ", " + String(green_val) + ", " + String(blue_val)); // 更新 LED 顏色 color(red_val, green_val, blue_val); delay(100); } // 控制LED顏色 void color (unsigned char red, unsigned char green, unsigned char blue) { analogWrite(redPin, red); analogWrite(greenPin, green); analogWrite(bluePin, blue); } ```