#include <ESP32Servo.h>
const int pinServo = 13; // Pino que conecta a torreta
const int pinTrigger = 12; // Pino que conecta o mecanismo de disparo
//const int pinLed = 14;
const int pinSound = 15;
const int pinPir = 16;
int pirState = LOW;
int valor = 0;
const int pinBuzzer = 17;
int soundLevel = 0;
int soundState = LOW;
Servo torreta; // Objeto que controla o movimento da torreta
Servo trigger; // Objeto servo que controla o disparo da torreta
int pos = 0;
int soundThreshold = 700; // Limite para o sensor de som
void setup() {
pinMode(pinSound, INPUT);
pinMode(pinPir, INPUT);
pinMode(pinBuzzer, OUTPUT);
pinMode(pinTrigger, OUTPUT);
if (!torreta.attach(pinServo)) {
Serial.println("Não conectado a torreta");
}; // Conecta o servo ao pino especificado
//trigger.attach(pinTrigger);
Serial.begin(115200);
torreta.write(0);
}
void loop() {
// Leitura do sensor PIR (se quiser usar a leitura real também)
valor = digitalRead(pinPir); // lê o estado do sensor PIR
Serial.println(valor);
soundLevel = analogRead(pinSound);
Serial.print("Nível de som detectado: ");
Serial.println(soundLevel);
soundState = (soundLevel > soundThreshold);
// Simula a alternância entre detectar movimento e não detectar
if (valor == HIGH || soundState == HIGH) {
Serial.println("Movimento anormal detectado!");
digitalWrite(pinBuzzer, HIGH);
tone(pinBuzzer, 100, 1000);
if (pirState == LOW) {
pirState = HIGH; // Movimento detectado
// Movendo a torreta para a posição de disparo
for (pos = 0; pos <= 90; pos += 1) {
torreta.write(pos);
delay(20);
}
delay(2000);
digitalWrite(pinTrigger, HIGH); // Aciona o disparo
delay(2000); // Tempo para o disparo
digitalWrite(pinTrigger, LOW); // Desativa o disparo
}
} else { // Não detectar movimento
Serial.println("Sem movimento.");
if (pirState == HIGH) {
pirState = LOW; // Sem movimento
noTone(pinBuzzer);
for (pos = 90; pos >= 0; pos -= 1) { // Retorna o servo para 0 graus
torreta.write(pos);
delay(20);
}
}
}
delay(5000); // pequeno atraso para evitar leituras repetidas
}