#include <ESP32Servo.h>
// Định nghĩa chân kết nối
const int BUTTON_PIN = 14; // Chân GPIO kết nối với nút bấm
const int SERVO_PIN = 13; // Chân GPIO kết nối với servo
Servo myservo; // Tạo đối tượng servo
bool isRunning = false; // Biến theo dõi trạng thái servo
bool lastButtonState = HIGH; // Trạng thái nút bấm ở lần đọc trước
bool currentButtonState; // Trạng thái nút bấm hiện tại
void setup() {
Serial.begin(115200);
// Thiết lập chân nút bấm là INPUT_PULLUP
pinMode(BUTTON_PIN, INPUT_PULLUP);
// Khởi tạo servo
ESP32PWM::allocateTimer(0);
myservo.setPeriodHertz(50); // Tần số PWM cho servo
myservo.attach(SERVO_PIN);
// Đặt servo về vị trí ban đầu
myservo.write(0);
}
void loop() {
// Đọc trạng thái nút bấm
currentButtonState = digitalRead(BUTTON_PIN);
// Kiểm tra xem nút có được nhấn không (thay đổi từ HIGH xuống LOW)
if (lastButtonState == HIGH && currentButtonState == LOW) {
// Đảo trạng thái servo
isRunning = !isRunning;
if (isRunning) {
// Nếu đang chạy, quay servo
myservo.write(180);
} else {
// Nếu dừng, đưa servo về vị trí 0
myservo.write(90);
}
// Đợi một chút để tránh dội nút
delay(50);
}
// Cập nhật trạng thái nút bấm
lastButtonState = currentButtonState;
}