#define red 33
#define purple 25
#define white 32
#define pinoPIR 4
#define trigger 18
#define echo 19
int distancia;
int senha;
const int buzzer = 13;
int senhaCorreta = 1234;
void setup() {
Serial.begin(115200);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(red, OUTPUT);
pinMode(purple, OUTPUT);
pinMode(white, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(pinoPIR, INPUT);
ledcSetup(0, 5000, 8);
ledcAttachPin(buzzer, 0);
}
void loop() {
Serial.println("Digite a senha: ");
while (true) {
if (Serial.available()) {
senha = Serial.parseInt();
break;
}
}
Serial.read();
if (senha == senhaCorreta) {
digitalWrite(white, HIGH);
delay(2000);
digitalWrite(white, LOW);
Serial.println("Senha correta! Cofre aberto");
Serial.print("Objeto localizado a distancia de: ");
distancia = Ultrasonic(trigger, echo);
delay(10);
Serial.print(distancia);
Serial.println(" cm");
delay(1000);
if(distancia < 10){
Serial.println("Nível 1 violado.");
digitalWrite(red,HIGH);
delay(2000);
digitalWrite(red,LOW);
}
if (distancia < 10 && digitalRead(pinoPIR) == HIGH) {
digitalWrite(purple, HIGH);
delay(2000);
digitalWrite(purple, LOW);
Serial.println("Nível 2 violado");
delay(2000);
digitalWrite(red, LOW);
digitalWrite(white, LOW);
} else if (distancia > 10) {
digitalWrite(red, LOW);
digitalWrite(purple, LOW);
digitalWrite(white, LOW);
Serial.println("Nenhum nível foi obstruído.");
delay(5000);
}
} else {
Serial.println("Senha errada! Nível 3 violado.");
tocarSirene(buzzer);
for (int i = 0; i < 5; i++) {
digitalWrite(white, HIGH);
delay(500);
digitalWrite(white, LOW);
delay(500);
}
delay(2000);
}
}
float Ultrasonic(int pintrigger, int pinecho) {
int distancia = 0;
while (distancia == 0) {
digitalWrite(pintrigger, 0);
delayMicroseconds(5);
digitalWrite(pintrigger, 1);
delayMicroseconds(5);
float tempo = pulseIn(pinecho, 1);
distancia = (tempo / 2 / 29.15);
}
return distancia;
}
void tocarSirene(int buzzer) {
int freq = 1000;
int amplitude = 255;
for (int i = 0; i < 3; i++) {
while (freq <= 5000) {
ledcWriteTone(0, freq);
ledcWrite(0, amplitude);
delay(20);
freq += 200;
}
while (freq >= 1000) {
ledcWriteTone(0, freq);
ledcWrite(0, amplitude);
delay(20);
freq -= 200;
}
}
ledcWrite(0, 0);
}