為了能控制TFT螢幕的背光燈板亮度,被這個函式庫宣告問題,搞了好一陣子卡關,才發現網路上大部分範例是舊版的撰寫語法。
連ChatGPT和Github Copilet,都還是用舊版的指導說明寫法。
還是需要靠GOOGLE我大哥舊方法,找一下是不是有最新的教學說明。
還真的有看到新舊比較的訊息…XD
總之,差別在於新版的宣告變簡單了。
***舊版寫法:
初始化PWM
ledcSetup(channel, freq, res)
+
ledcAttachPin()
輸出
PWM ledcWrite(channel, value)
***新版寫法:
初始化PWM
ledcAttach(PIN, freq, resolution);
輸出
ledcWrite(PIN, duty);
參考來源:
使用ESP32 Arduino開發平台3.x版製作呼吸燈效果
https://swf.com.tw/?p=2000
趁現在記憶猶新,除了呼吸燈範例。
我也把自己的單純亮度控制,和監控時間設定亮度,給自己一個紀錄。
範例程式如下:
#define LED_PIN 38 // LED腳位,Lilygo T-Disply S3是PIN 38。
#define MAX_BRIGHTNESS 255 // 亮度上限
#define PWM_RES 12 // 12位元解析度
#define PWM_FREQ 5000 // PWM頻率500Hz
#define MAXDUTY ((1 << PWM_RES) - 1) // 工作週期上限
#define FADE_DELAY 30 // 變化間隔時間
#define FIXED_BRIGHTNESS 196 // 固定亮度(0~255)暗到亮
unsigned long LEDlastTime = 0;
void setup() {
//Turn on display power(連接電池用)
pinMode(15, OUTPUT);
digitalWrite(15, HIGH);
// 初始化設定PWM輸出腳位、頻率和解析度
ledcAttach(LED_PIN, PWM_FREQ, PWM_RES);
// 設定固定亮度
ledcWrite(LED_PIN, FIXED_BRIGHTNESS);
}
void loop() {
//呼吸燈
// unsigned long LEDnow = millis();
// if (LEDnow - LEDlastTime >= FADE_DELAY) {
// LEDlastTime = LEDnow;
// fadeLED();
// }
if (millis() – lastNTPUpdate > NTP_UPDATE_INTERVAL) {
timeClient.update();
lastNTPUpdate = millis();
// 監控時間,背光亮度調整
int currentHr = getCurrentHour(); // 取時間
int brightness = 224; // 預設白天亮度
if (currentHr >= 23 || currentHr < 7) {
// 晚上23:00 ~ 隔天07:00
brightness = 164;
} else if (currentHr >= 18) {
// 晚上18:00 ~ 23:00
brightness = 196;
} else {
// 白天07:00 ~ 18:00
brightness = 224;
}
ledcWrite(LED_PIN, brightness);
Serial.print(“LED_currentHr: “);
Serial.println(currentHr);
Serial.print(“LED_brightness: “);
Serial.println(brightness);
}
}
void fadeLED() {
static int brightness = 0; // 亮度值
static int fadeAmount = 5; // 每次的亮度變化量
int duty = (MAXDUTY / MAX_BRIGHTNESS) * min(brightness, MAX_BRIGHTNESS);
ledcWrite(LED_PIN, duty);
// 上面這一行可以改成:
// analogWrite(LED_PIN, duty);
brightness += fadeAmount; // 調整亮度
// 完成淡入或淡出效果後,反轉亮度變化量。
if (brightness <= 0 || brightness >= MAX_BRIGHTNESS) {
fadeAmount = -fadeAmount;
}
}
Be the first to reply