#include <Keypad.h>
char* senha = "ABC123"; // def senha
const byte LINHAS = 4; // qtd linhas
const byte COLUNAS = 4; // qtd colunas
char digitos [LINHAS] [COLUNAS] = {
('1', '2', '3', 'A');
('4', '5', '6', 'B');
('7', '8', '9', 'C');
('*', '0', '#', 'D')}; // caracters do teclado
byte pinosLinha[LINHA] = (11, 10, 9, 8);
byte pinosColuna[COLUNA] = (7, 6, 5, 4); // pinos de conexao
Keypad keypad = Keypad( makeKeymap(digitos), pinosLinha, pinosColuna, LINHAS, COLUNAS );
// leitura das teclas
int position = 0;
int ledVermelho = 15;
int ledVerde = 20;
int ledRosa = 25;
int buzzer = 1;
int tempoBuzz = 50;
int tempoAberto = 2000;
void setup()
{
estadoPorta(true); // porta aberta ou trancada
pinMode(ledVermelho,OUTPUT);
pinMode(ledVerde,OUTPUT);
pinMode(ledRosa,OUTPUT);
pinMode(buzzer,OUTPUT); // pinos de saída
}
void loop()
{
char digito = keypad.getKey(); // ler teclas
if (digito !=0)
{
digitalWrite(buzzer, HIGH);
delay(tempoBuzz);
digitalWrite(buzzer, LOW); // ativar o buzzer
if (digito == senha[position]) // vê se o dígito é igual a senha
{
position ++;
}
else { // volta pra primeira posição de leitura se estiver errado
position = 0;
}
if (position == 6) // altera estado da porta
{
estadoPorta(false);
}
delay(100);
}
}
void estadoPorta(int trancado)
{
if (trancado) // fecha a porta
{
digitalWrite(ledVermelho, HIGH);
digitalWrite(ledVerde, LOW);
digitalWrite(ledRosa, LOW);
}
else // abertura da porta
{
digitalWrite(ledVermelho, LOW);
digitalWrite(ledVerde, HIGH);
digitalWrite(ledRosa, HIGH);
digitalWrite(buzzer, HIGH);
delay(tempoBuzz*10);
digitalWrite(buzzer, LOW); // buzzer mostra que a senha estava correta
delay(tempoAberto);
position = 0;
digitalWrite(ledRosa, HIGH);
estadoPorta(true); // tranca a porta
}
}