Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //FALTA SOH JOGAR NA MEMORIA EEPROM
- // inclusão de bilibotecas
- #include <EEPROM.h>
- const int releTempo = 12;
- int releTempoState = LOW;
- long previousMillis = 0;
- long releTempoInterval = 7000;
- #include <Wire.h>
- //#include <LiquidCrystal_I2C.h>
- #include <LiquidCrystal.h>
- // LiquidCrystal lcd (9, 8, 7, 6, 5, 4);
- #include <Keypad.h>
- #include <Servo.h>
- Servo servo1;
- //LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3, POSITIVE);
- // declarção de variáveis
- int count = 0;
- char passwordMaster [4] = {'1', '2', '3', '4'}; // senha padrão
- char passwordEeprom [4] ;
- // char passwordEeprom [4] = {'5', '6', '7', '8'};
- // const int audioPin = 9;
- const int audioPin = 11;
- const int duration = 200;
- const byte ROWS = 4; //Quatro linhas
- const byte COLS = 3; //Três colunas
- char keys[ROWS][COLS] = {
- {'1','2','3'},
- {'4','5','6'},
- {'7','8','9'},
- {'*','0','#'}
- }; // deinição do layout do teclado
- byte rowPins[ROWS] = {7, 6, 5, 4}; // pinagem para as linhas do teclado
- byte colPins[COLS] = {10, 9, 8}; // pinagem para as colunas do teclado
- // byte rowPins[ROWS] = {8, 7, 6, 5}; // pinagem para as linhas do teclado
- // byte colPins[COLS] = {4, 3, 2}; // pinagem para as colunas do teclado
- // mapeamento do teclado
- Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
- int address = 0; // endereço de escrita na memória
- int addr = 0;
- byte value; // valor lido da EEPROM
- //---------------------------------------------------
- void setup()
- {
- Serial.begin(9600);
- pinMode(releTempo, OUTPUT);
- servo1.attach(10);
- servo1.write(0);
- // lcd.begin (16,2);
- // lcd.setBacklight(HIGH);
- Serial.begin(9600); // inicializa serial
- // modo dos pinos de audio e LEDs
- pinMode(audioPin, OUTPUT);
- // lcd.clear();// limpa LCD
- key_init();// inicializa processo
- LeSenhaGravada();
- }
- //---------------------------------------------------
- void loop()
- {
- //Temporizador para Desligar o Relé
- unsigned long currentMillis = millis(); //Tempo atual em ms
- if (currentMillis - previousMillis > releTempoInterval) //Lógica de verificação do tempo
- {
- previousMillis = currentMillis; // Salva o tempo atual
- if (releTempoState == LOW) //E aqui muda o estado do led //verificando como ele estava anteriormente
- {
- releTempoState = HIGH;
- }
- else
- {
- releTempoState = LOW;
- }
- digitalWrite(releTempo, releTempoState);
- }
- char key = keypad.getKey(); // obtém informação do teclado
- if (key != NO_KEY)
- { // se foi teclado algo
- Serial.print("key Inicial ");
- Serial.println(key);
- if (key == '#')
- { // se foi teclado #
- code_entry_init(); // mensagem, som e LED
- int entrada = 0; // variável de apoio; números de entradas feitas via teclado
- while (count < 4 )
- { // enquanto não entrou os 4 números necessários para a senha
- char key = keypad.getKey(); // obtém informação do teclado
- if (key != NO_KEY)
- { // se foi teclado algo
- Serial.print("key 2 ");
- Serial.println(key);
- entrada += 1; // aumenta contrador de entradas
- tone(audioPin, 1080, 100); // sinal audível
- delay(duration);
- noTone(audioPin);
- if (key == passwordEeprom[count])count += 1 ; // verifica na sequencia da senha, se correto aumenta contador
- if ( count == 4 && passwordEeprom)
- {
- unlocked(); // chegou a 4 digitos corretos, libera acesso
- key_init(); // inicializa
- break; // interrompe loop
- }
- if((key == '#') || (entrada == 4))
- { // foi teclado # ou 4 entradas incorretas
- locked();
- key_init(); // inicializa
- break; // interrompe loop
- }
- }
- }
- }
- if(key == '*')
- { // se foi teclado *
- old_pass_check(); // mensagem para entrar a senha antiga
- int entrada = 0;
- while (count < 4 )
- {
- char key = keypad.getKey();
- if (key != NO_KEY)
- {
- entrada += 1;
- tone(audioPin, 1080, 100);
- delay(duration);
- noTone(audioPin);
- if (key == passwordMaster[count])count += 1;
- if ( count == 4 )
- { // foi teclado a senha antiga corretamente
- Serial.print("Count ");
- Serial.println(count);
- get_new_pass(); // chama função para entrada da nova senha
- }
- if ((key == '*') || (entrada == 4))
- { // foi teclado * ou entrou 4 números errados
- key_init();// inicializa
- break; // interrompe loop
- }
- }
- }
- }
- }
- }
- //---------------------------------------------------
- void locked()
- {
- // lcd.clear();
- // lcd.print(" ACESSO,");
- // lcd.setCursor(0,1);
- // lcd.print(" NEGADO!");
- Serial.println(" ACESSO,");
- Serial.println(" NEGADO!");
- for(int i=0; i<5; i++)
- {
- tone(audioPin, 1080, 100);
- delay(duration);
- noTone(audioPin);
- delay(100);
- }
- delay(1000);
- }
- //---------------------------------------------------
- void get_new_pass()
- {
- new_pass_entry();
- int entrada = 0; // inicializa entrada
- while(count < 4) // enquanto contrador for menor que 4
- {
- char key = keypad.getKey(); // obtem informação do teclado
- if(key != NO_KEY) // se algo foi teclado
- {
- Serial.println("rotina get_new_pass");
- entrada += 1; // aumenta contador de entrada
- tone(audioPin, 1080, 100); // tom para cada dígito
- delay(duration);
- noTone(audioPin);
- passwordEeprom[count] = key; // aramazena o novo dígito
- count += 1; // próximo dígito
- if(count == 4)
- Serial.print("addr ");
- Serial.println(addr);
- Serial.print("key ");
- Serial.println(key);
- // EEPROM.write(addr, key-48);
- EEPROM.write(addr, key);
- addr += 1;
- if((key == '*') || (entrada == 4))
- {
- delay(500);
- // lcd.clear();
- // lcd.print(" Senha OK");// foi telcado * 4 entradas
- Serial.println(" Senha OK");
- delay(500);
- }
- }
- }
- }
- //---------------------------------------------------
- void new_pass_entry()
- {
- // mensagem no display
- // lcd.clear();
- // lcd.print(" Nova Senha");
- Serial.println(" Senha OK");
- count = 0;
- // lcd.setCursor(0,1);
- // lcd.print(" Tecle *");
- Serial.println(" Tecle *");
- // gera sinal audível
- tone(audioPin, 1500, 100);
- delay(duration);
- noTone(audioPin);
- tone(audioPin, 1500, 100);
- delay(duration);
- noTone(audioPin);
- tone(audioPin, 1500, 100);
- delay(duration);
- noTone(audioPin);
- }
- //---------------------------------------------------
- void old_pass_check()
- {
- // mensagem no display
- // lcd.clear();
- // lcd.print(" Senha antiga?");
- Serial.println(" Senha antiga?");
- count = 0;
- // lcd.setCursor(0,1);
- // lcd.print(" Tecle *");
- Serial.println(" Tecle *");
- // gera tom audível
- tone(audioPin, 1500, 100);
- delay(duration);
- noTone(audioPin);
- tone(audioPin, 1500, 100);
- delay(duration);
- noTone(audioPin);
- tone(audioPin, 1500, 100);
- delay(duration);
- noTone(audioPin);
- }
- //---------------------------------------------------
- void key_init ()
- {
- // mensagem no display
- // lcd.clear();
- // lcd.print(" Bem vindo...");
- Serial.println(" Bem vindo...");
- // lcd.setCursor(0,1);
- // lcd.print(" Tecle: # ou *");
- Serial.println(" Tecle: # ou *");
- count = 0;// contador para zero
- tone(audioPin, 1080, 100);
- delay(duration);
- noTone(audioPin);
- tone(audioPin, 980, 100);
- delay(duration);
- noTone(audioPin);
- tone(audioPin, 770, 100);
- delay(duration);
- noTone(audioPin);
- }
- //---------------------------------------------------
- void code_entry_init()
- {
- // mensagem no display
- // lcd.clear();
- // lcd.print(" Entre a Senha:");
- Serial.println(" Entre a Senha:");
- count = 0; // contador para zero
- // gera sinal audível
- tone(audioPin, 1500, 100);
- delay(duration);
- noTone(audioPin);
- tone(audioPin, 1500, 100);
- delay(duration);
- noTone(audioPin);
- tone(audioPin, 1500, 100);
- delay(duration);
- noTone(audioPin);
- }
- //---------------------------------------------------
- void unlocked()
- {
- // mensagem no display
- // lcd.clear();
- // lcd.print("Acesso Liberado!");
- Serial.println("Acesso Liberado!");
- servo1.write(25);
- // pisca LED verde e gera sinal audível
- for (int x = 0; x < 5; x++)
- {
- //digitalWrite(greenPin, HIGH);
- tone(audioPin, 2000, 100);
- delay(duration);
- noTone(audioPin);
- //digitalWrite(greenPin, LOW);
- tone(audioPin, 2000, 100);
- delay(duration);
- noTone(audioPin);
- delay(250);
- }
- }
- //----------------------------------------------
- void LeSenhaGravada()
- {
- for (int i = 0 ; i < 4; i ++)
- {
- //Serial.println(EEPROM.read(i));
- passwordEeprom[i] = EEPROM.read(i);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement