Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //#include <Wire.h>
- #include <LiquidCrystal.h>
- #include <Keypad.h>
- #define sensorPorta 2
- #define ledDigitacao 3
- int statusPorta = 0;
- bool acessoLiberado = false;
- bool jaMostrou = false;
- bool jaMostrouPortaAberta = false;
- int count = 0; //Contador de uso geral
- char pass [4] = {'1', '9', '7', '1'}; //Senha
- const byte ROWS = 4; //four rows
- const byte COLS = 3; //three columns
- char keys[ROWS][COLS] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'}};
- byte rowPins[ROWS] = {10, 9, 8, 7}; //connect to the row pinouts of the keypad
- byte colPins[COLS] = {13, 12, 11}; //connect to the column pinouts of the keypad
- LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);
- Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
- // --------------------------
- void setup()
- {
- pinMode(ledDigitacao, OUTPUT);
- // pinMode(sensorPorta, INPUT_PULLUP); // <<<<<<< Pullup
- pinMode(sensorPorta, INPUT);
- lcd.begin(20, 4);
- lcd.setCursor(0, 0);
- lcd.clear();
- Serial.begin(9600);
- statusPorta = digitalRead(sensorPorta);
- if (statusPorta == HIGH) // se a porta está fechada...
- key_init(); // pedir pra digitar a senha
- else
- {
- lcd.print("Porta aberta");
- }
- // Interrupt pelo switch da porta ligado no port 2 ao ir de HIGH para LOW
- attachInterrupt(digitalPinToInterrupt(sensorPorta), AbriuPorta, FALLING);
- }
- //---------------------------
- void AbriuPorta()
- {
- count = 5; // Se abriu a porta o valor 5 força a saida da rotina de senha
- jaMostrou = false;
- }
- // --------------------------
- void loop()
- {
- if (portaEstaAberta()) // se a porta está fechada... tem que ativar o alarme
- {
- jaMostrouPortaAberta = false; // Apronta para exibir mensagem de porta aberta
- if(digitalRead(sensorPorta)==HIGH) // So faz aproxima linha se a porta estiver fechada
- key_init(); // aparece a tela de digitar a senha
- char key = keypad.getKey();
- if (key != NO_KEY) // Se foi pressionada uma tecla:
- {
- if (key == '#') // Se a tecla é '#'
- {
- code_entry_init(); // Então espera que seja inserida uma senha
- int entrada = 0;
- while (count < 4 ) // Conta 4 entradas/teclas
- {
- // // Creio que aqui tenho que ficar monitorando se a porta abre e interromper a execução do loop()
- char key = keypad.getKey(); // Obtém tecla pressionada
- if (key != NO_KEY) // 1 Se foi pressionada uma tecla:
- {
- lcd.print("#");
- digitalWrite(ledDigitacao, HIGH);
- delay(300);
- digitalWrite(ledDigitacao, LOW);
- entrada += 1; // Faz entrada = entrada + 1
- if (key == pass[count])count += 1; // Se a tecla pressionada corresponde ao dígito da senha correspondente, soma 1 no contador
- if ( count == 4 ) unlocked(); // Se contador chegou a 4 e com dígitos corretos, desbloqueia siatema
- if ((key == '#') || (entrada == 4)) // Se foi pressionada a tecla "#' ou foram feitas 4 entradas,
- {
- key_init(); // Reinicializa o sistema
- break; // Para o sistema e espera por uma tecla
- }
- } // fim do 1Se pressionada uma tecla
- } // fim do conta 4 entradas/teclas
- } // fim da entrada da tecla #
- } // fim do se pressionada uma tecla
- } // fim do se a porta está fechada
- }
- // --------------------------
- boolean portaEstaAberta()
- {
- statusPorta = digitalRead(sensorPorta); // verifica se a porta está aberta ou fechada
- delay(200);
- if (statusPorta == LOW)
- {
- acessoLiberado = false;
- if (!jaMostrouPortaAberta)
- {
- lcd.clear();
- lcd.print("Porta aberta");
- Serial.println("Porta aberta");
- jaMostrouPortaAberta = true;
- }
- return false;
- }
- else
- {
- return true;
- }
- }
- // --------------------------
- void key_init () // tela de "digite a senha"
- {
- if (!jaMostrou)
- {
- lcd.clear(); //Limpa o LCD
- lcd.print("Aguardando..."); //Emite mensagem
- lcd.setCursor(0, 1); //Muda de linha
- lcd.print("Tecle #"); //Emite mensagem
- Serial.println("Aguardando... Tecle#");
- jaMostrou = true;
- }
- count = 0; //Variável count é zero na inicialização
- }
- // --------------------------
- void code_entry_init() //Subrotina de Entrada da Senha
- {
- lcd.clear();
- lcd.print("Entre a Senha:");
- count = 0; //Variável count é zero na entrada de senha
- }
- // --------------------------
- void unlocked() //Subrotina para Acesso Liberado
- {
- lcd.clear(); //Limpa LCD
- lcd.print("Acesso Liberado!"); //Emite mensagem
- acessoLiberado = true;
- delay(2000);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement