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-hant/n/249106.html
微信掃一掃
支付寶掃一掃