2024-07-01
和本書內容直接相關的,是 PWM 輸出相關指令,如 ledcSetup()、ledcAttachPin() 等。
指令全部改寫,使用方式不同。詳細請況請登入 https://www.mosme.net/mosme/book_detail/AB13704?c=5_46
作者提供各種範例程式碼,以及更新的內容
寫過程式的人都知道,往往修了一個 Bug,會觸發更多 Bug。這個版本的 Bug 是 RX2、TX2 不能用,原因是被移走了。
RX2 從原本的 16 腳移至 4 腳
TX2 從原本的 17 腳移至 25 腳
理由是 PSRAM(外接記憶體)用到16、17腳。開發者說 在 2.0.16 版會修正。
原始討論串:
https://github.com/espressif/arduino-esp32/issues/9500
症頭:執行 analogWritre() 無法輸出
核心版本:Arduino ESP32核心2.0.9版到2.0.14版 (之後的版本沒測過)
本書第2章類比輸出的部份、及例5-3,會觸碰到Bug。
程式碼如下,必須在analogWrite()前加入Serial.println(),analogWrite()才有功用。
/*
* 例5-3:旋轉可變電阻,改變馬達轉速
* 註:Arduino ESP32 核心有 Bug,在此例必須啟動序列傳輸並列印,功能才會正常
*/
const byte MotorA1 = 32; //馬達第一支接腳
const byte MotorA2 = 33; //馬達第二支接腳
const byte VR = 25; //可變電阻接腳
void setup() {
pinMode(VR, INPUT);
pinMode(MotorA1, OUTPUT);
pinMode(MotorA2, OUTPUT);
Serial.begin(9600); //開啟序列傳輸功能
}
void loop() {
int speed = analogRead(VR); //從可變電阻讀取類比讀值
speed = map(speed, 0, 4095, 0, 255); //透過map()函式轉換數值
Serial.println(speed); //印出轉換後的PWM值
analogWrite(MotorA1, speed); //送至馬達
analogWrite(MotorA2, 0); //另一支腳為0電位
}