#include <ESP32Servo.h>
Servo servo;
#define servoPin 26
#define buzzer 25
#define botao 13
#define LED 14
#define sensorPir 27
bool controleDoUsuario = true;
bool estadoSensor = true;
bool estadoBotao = true;
bool estadoBotaoAnterior = true;
int canalBuzzer = 1;
bool estadoBuzzer = false;
const int debounce = 20;
unsigned long tempoDebounce = 0;
const int intervalo = 250;
unsigned long tempoAnterior = 0;
void alarme(){
if(millis() - tempoAnterior >= intervalo){
tempoAnterior = millis();
estadoBuzzer = !estadoBuzzer;
}
if(estadoBuzzer){
ledcWriteChannel(canalBuzzer, 128);
}
else{
ledcWriteChannel(canalBuzzer, 0);
}
}
void setup() {
Serial.begin(115200);
servo.attach(servoPin);
ledcAttachChannel(buzzer, 5000, 8, canalBuzzer);
pinMode(botao, INPUT_PULLUP);
pinMode(LED, OUTPUT);
pinMode(sensorPir, INPUT);
}
void loop() {
estadoBotao = digitalRead(botao);
estadoSensor = digitalRead(sensorPir);
if(millis() - tempoDebounce >= debounce){
tempoDebounce = millis();
if(estadoBotao == false && estadoBotaoAnterior == true){
controleDoUsuario = !controleDoUsuario;
}
estadoBotaoAnterior = estadoBotao;
}
if(estadoSensor && controleDoUsuario){
digitalWrite(LED, HIGH);
alarme();
servo.write(180);
}
else{
digitalWrite(LED, LOW);
ledcWriteChannel(canalBuzzer, 0);
servo.write(0);
}
}