Alterar a Senha pelo teclado (Keypad + Password + EEPROM)

Boa noite amigos, sou novo por aqui e depois de muito pesquisar na net não encontrei a solução para o meu problema. É o seguinte: Trata-se de um sistema de verificação da senha, só que eu que implementar uma opção para o usuário alterar a senha sem ter que usar o IDE do Arduino, ou seja, utilizando o teclado mesmo. Pontos importantes: 1 - a senha depois de alterada não deve se perder com a queda de energia (acho que o caminho é gravar na EEPROM); 2 - antes de gravar nova senha, tem que haver a verificação da senha antiga.

No meu código estou com dois leds nas portas 2 e 3, simulando os componentes finais.

Code:

/** Funcionamento: digite a senha, no caso 1234 e digite # para checar

caso digite errado clique * para começar novamente **/

#include <Keypad.h>
#include <Password.h>

int motor = 2;
int buzzy = 3;


int passinput = 0;

const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'*','0','#','D'}}; // Mapeia as teclas
byte rowPins[ROWS] = {13, 12, 11, 10}; // Define pino das linhas
byte colPins[COLS] = {9, 8, 7, 6}; // Define pino das colunas

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //cria o teclado
Password password = Password("1234"); // defina a senha, neste caso 1234
byte maxPasswordLength = 6; //define o tamanho da senha - OBS: SE A SENHA TIVER A MESMA QUANTIDADE DE CARACTERES DO TAMANHO DE SENHA NÃO PRECISA CONFIRMAR NO #
byte currentPasswordLength = 0; // inicia a senha sem qualquer valor

void setup(){
Serial.begin(9600);
pinMode(motor, OUTPUT);
pinMode(buzzy, OUTPUT);

}

void loop(){
char key = keypad.getKey();
if (key != NO_KEY){
delay(60);
switch (key){

case '#': checkPassword(); break;
case '*': resetPassword(); break;
default: processNumberKey(key);
}
}
}

void processNumberKey(char key) {
Serial.print(key);
currentPasswordLength++;
password.append(key);
if (currentPasswordLength == maxPasswordLength) {
checkPassword();
}
}

void checkPassword() {
if (password.evaluate()){
digitalWrite (motor, HIGH);
digitalWrite (buzzy, HIGH);
delay (4000);
digitalWrite (motor, LOW);
digitalWrite (buzzy, LOW);
} else {
for (int x=0; x<10; x++) {
digitalWrite(buzzy, HIGH);
delay(250);
digitalWrite(buzzy, LOW);
delay(250);
}
}
resetPassword();
}

void resetPassword() {
password.reset();
currentPasswordLength = 0;
}

FIM DO CODE

Alguém tem alguma Luz?

Consigo gravar os valores na EEPROM mas não consigo ulitiza-los no caso concreto.

OBS.: SE POSTEI DE FORMA ERRADA OU NO LUGAR ERRADO POR GENTILEZA REMOVER PARA O LOCA CORRETO E PEÇO DESCULPAS ANTECIPADAS.

 

Exibições: 3549

Responder esta

Respostas a este tópico

Alguém tem alguma ideia?

RSS

© 2021   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço