ESP32是一款功能強大的微控制器,它不僅適用於電子製作愛好者,還適合企業和客戶端。在任何項目中,時間都是非常重要的,因此使用ESP32定時器來控制時間是非常重要的。本文將詳細介紹如何使用ESP32定時器增強項目功能。
一、ESP32定時器的介紹
ESP32微控制器的每個核心都有2個定時器,可以選擇做為通用的定時器、低功耗的定時器(僅工作在睡眠模式下)和高精度定時器(僅適用於演算法加速器)等。
ESP32的定時器可以設置安裝時間,在到達指定時間後,它可以自動開啟或關閉外設,限制其工作模式和持續時間。ESP32還提供了兩種不同類型的定時器-硬體定時器和軟體定時器。
硬體定時器是ESP32微控制器里的標準定時器,是由硬體電路實現的,並且不會受到其他任務和中斷的干擾。軟體定時器是由軟體實現的,其原理是使用中斷信號驅動。軟體定時器比硬體定時器的缺點在於,當系統有負載時,它們的準確性會下降。
二、使用ESP32定時器開關LED
// 引入 required 庫 #include "Arduino.h" // 存儲引腳信息 const int LED = 2; // 定義定時器相關的變數 unsigned long previousMillis = 0; const long interval = 1000; void setup() { pinMode(LED, OUTPUT); Serial.begin(9600); } void loop() { unsigned long currentMillis = millis(); // 獲取當前系統的時間 if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; digitalWrite(LED, !digitalRead(LED)); } }
上面的示常式序使用ESP32定時器開關LED。首先,我們必須引入所需的庫,在程序設定LED的針腳。然後定義兩個變數:previousMillis,用於存儲上一次切換LED時的時間,以及interval,即LED在開頭和關閉之間所需要保持的時間。接下來,我們將針腳設置為輸出,並開始Serial通信。
在主循環中,我們獲得當前的系統時間(currentMillis)。如果過去的時間(currentMillis-previousMillis)已經達到interval的時間,那麼previousMillis就會更新為當前時間(currentMillis)。然後,LED將翻轉。
這個例子說明了ESP32定時器的簡單用法。我們可以使用不同的時間間隔來控制其他外設的操作,比如音箱、電機和感測器。
三、使用ESP32定時器控制蜂鳴器
// 引入 required 庫 #include "Arduino.h" // 定義蜂鳴器的針腳 const int buzzer = 24; void setup() { //將蜂鳴器的引腳設置為輸出 pinMode(buzzer, OUTPUT); } void loop() { // 頻率為262(Hz)聲音 0.5 秒 tone(buzzer, 262); delay(500); // 停止聲音 0.1 秒 noTone(buzzer); delay(100); // 頻率為294(Hz)聲音 0.5 秒 tone(buzzer, 294); delay(500); // 停止聲音 0.1 秒 noTone(buzzer); delay(100); // 以此類推... }
上面的示常式序是在ESP32控制蜂鳴器的針腳。我們定義了一個蜂鳴器針腳,並將其設置為輸出。然後,在主循環中,我們定義了一系列音樂,每個音樂的時長、慣性都不同。ESP32將使用tone()方法在指定的時間內播放音符。然後,使用noTone()停止音符播放。
通過這個例子,我們可以理解使用ESP32定時器可以非常靈活地控制蜂鳴器。
四、使用ESP32定時器控制電機
// 引入 required 庫 #include // 定義電機的針腳 const int motorPin = 13; // 定義舵機庫 Servo motor; void setup() { // 將電機針腳設置為輸出 pinMode(motorPin, OUTPUT); // 將舵機應用於電機 motor.attach(motorPin); } void loop() { // 向前 1 秒 forward(); delay(1000); // 停止 1 秒 stop(); delay(1000); // 向後 1 秒 backward(); delay(1000); // 停止 1 秒 stop(); delay(1000); } void stop() { motor.write(90); // 停止 digitalWrite(motorPin, LOW); } void backward() { motor.write(0); // 向後 digitalWrite(motorPin, HIGH); } void forward() { motor.write(180); // 向前 digitalWrite(motorPin, HIGH); }
上面的示常式序是示範如何使用ESP32定時器控制電機。我們需要引入Servo庫,並將電機的針腳設置為輸出模式。
在主循環中,我們定義了幾個運動,使用delay()方法設定時間,當然可以根據需要改變。然後我們又定義了三個函數,分別控制電機向前、向後和停止。ESP32使用舵機將電機引腳上的電機控制轉化為機械運動。
五、結論
使用ESP32定時器可以提高項目功能。我們可以用它來控制LED、蜂鳴器和電機。可以發現,使用這種硬體方法比使用軟體控制更加準確和準確性高。同時,ESP32提供了很多不同類型的定時器,可以適應不同項目的要求。通過這篇文章,相信你能夠更好地理解ESP32定時器,並能夠使用它來完成自己的項目。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/249106.html