#define ledUS 26
#define ledPIR 25
#define trigger 19
#define echo 18
#define pir 4
#define ledcofre 2
#define buzzer 16
float distance;
int leiturapir;
String senha;

void setup() {
  pinMode(ledPIR, OUTPUT);
  pinMode(ledUS, OUTPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(ledcofre, OUTPUT);
  pinMode(trigger, OUTPUT); // trigger
  pinMode(echo, INPUT); //echo
  pinMode(pir, INPUT);
  Serial.begin(115200);
}

void loop() {
  digitalWrite(ledUS, 0);
  digitalWrite(ledPIR, 0);
  distance = Ultrasonic(trigger, echo);
  leiturapir = digitalRead(pir);

  if (distance <= 50) {
    Serial.print("Presença detectada há ");
    Serial.print(distance);
    Serial.print(" cm.\n\n");
    digitalWrite (ledUS, 1);
    delay (2500);
    digitalWrite(ledUS, 0);
    
    if (leiturapir == 1) {
      while (leiturapir == 1 && distance <= 50) {
        funcionapir ();
      }
      
    }
  }
  else if (distance > 50 && leiturapir == 1) {
      Serial.print("Movimento INVÁLIDO.\nNenhuma presença detectada no campo do Ultrasonico.\n\n");
      delay (2000);
  }
  else if (distance > 50) {
    Serial.print("Nenhuma presença detectada.\n\n");
    delay (2000);
  }
}

void funcionapir () {
  Serial.print ("Movimento detectado, acesso liberado.\n");
  Serial.print("Digite a senha do cofre.\n\n");
  digitalWrite(ledPIR, 1);
  digitalWrite(ledUS, 1);
  delay (5000);
  digitalWrite(ledPIR, 0);
  digitalWrite(ledUS, 0);
  digitasenha ();
}

void digitasenha () {
  while (true) {.
    if (Serial.available()) {
      senha = Serial.readStringUntil('\n');
      break;
    }
  }
  if (senha=="nima") {
    Serial.print("SENHA CORRETA.\nAbra o cofre.\n\n");
    acendeledetocabuzzer ();
  }
  else {
    Serial.print("SENHA INCORRETA.\nTente novamente.\n\n");
    delay (500);
    return digitasenha ();
  }
}

void acendeledetocabuzzer () {
  for (int i=0; i<=10; i++) {
    tone(buzzer, 392);
    digitalWrite(ledcofre, 1);
    delay (500);
    noTone(buzzer);
    digitalWrite(ledcofre, 0);
    delay (500);
  }
  Serial.print("Fechando cofre. . .\n\n");
  for (int j=0; j<=6; j++) {
    tone(buzzer, 392);
    digitalWrite(ledcofre, 1);
    delay (250);
    noTone(buzzer);
    digitalWrite(ledcofre, 0);
    delay (250);
  }
  Serial.print("Cofre fechado.\nProcurando Movimento...\n\n");
  return loop ();
}

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;
}
Loading
esp32-devkit-c-v4