ESP32新版的語法不一樣,遇到背光燈板調整亮度的問題。Lilygo T-Disply S3

為了能控制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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

請輸入下列驗證碼計算後阿拉伯數字 (Translate it, if not Taiwanese to post reply) *