// Cofre Arduino - Projeto Usinainfo para controle de fechaduras.
// Código teste para liberação de acesso ao Cofre Arduino
 
#include <Password.h>   // Inclui biblioteca Password.h
#include <Keypad.h>       // Inclui biblioteca Keypa.h
#include <BuzzerManager.h> // incluir biblioteca BuzzerManager
 
#define rele 3              // Define o pino D2 como rele
#define buzzer 11           // Define o pino D11 como buzzer 
 
Password senha = Password("ABACA01DA06");      // Senha para liberação de acesso
 
const byte linha = 4;     // Define número de linhas
const byte coluna = 4;    // Define número de colunas
 
// Relaciona linha e colunas para determinação dos caracteres
char keys[linha][coluna] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
 
byte pinolinha[linha] = {10, 9, 8, 7};       // Declara os pinos de interpretação das linha
byte pinocoluna[coluna] = {6, 5, 4, 2};      // Declara os pinos de interpretação das coluna
 
Keypad keypad = Keypad(makeKeymap(keys), pinolinha, pinocoluna, linha, coluna);
 
void setup() {
  pinMode(rele, OUTPUT);             // Declara o pino como um pino de Saída de sinal
  pinMode(buzzer, OUTPUT);           // Declara o pino como um pino de Saída de sinal
  Serial.begin(9600);
  keypad.addEventListener(keypadEvent);
  keypad.setDebounceTime(5);         // Tempo de atraso para leitura das teclas.
}
 
void loop() {
  keypad.getKey();
}
 
// Realiza a leitura das teclas pressionadas e aguarda confirmação para verificar
void keypadEvent(KeypadEvent eKey) {
    switch (keypad.getState()) {
      case PRESSED:
        Serial.print("Digitado: ");
        Serial.println(eKey);
        digitalWrite(buzzer, HIGH);
        delay(50);
        digitalWrite(buzzer, LOW);
        switch (eKey) {
          case '*': verificasenha();
            break;
          default:
            senha.append(eKey);
        }
    }
  }
 
// Verifica o senha digitada após pressionar C
void verificasenha() {
  Serial.print("Verificando, aguarde... ");
  if (senha.evaluate()) {
    Serial.println("Acionando rele... ");
    digitalWrite(buzzer, HIGH);
    delay(500);
    digitalWrite(buzzer, LOW);
    digitalWrite(rele, HIGH);
    delay(2000);
    digitalWrite(rele, LOW);
    senha.reset();
  }
  else {
    digitalWrite(rele, LOW);
    Serial.println("Senha Invalida !");
    tone(buzzer, 500);
    delay(500);
    noTone(buzzer);
    delay(50);
    tone(buzzer, 1500);
    delay(500);
    noTone(buzzer);
    delay(500);
    senha.reset();
  }
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
keypad1:R1
keypad1:R2
keypad1:R3
keypad1:R4
keypad1:C1
keypad1:C2
keypad1:C3
keypad1:C4
bz1:1
bz1:2
NOCOMNCVCCGNDINLED1PWRRelay Module
relay1:VCC
relay1:GND
relay1:IN
relay1:NC
relay1:COM
relay1:NO