josephalmanza

hola si, sucede que no se usar la eerpom. estoy creando una cerradura electronica pero no se gaurdar la contraeña y cada que desconecto el arduino de la alimentacion se pierde y debo ingresar contraseña.
este es mi codigo si algui me puede decir como usar la libreria eeprom y que variable usar al momento de guardar la password se lo agradecere

#include <EEPROM.h>
#include <LiquidCrystal.h>
#include <Keypad.h>
#include <Servo.h> //Control del servomotor
Servo seguro; //servomotor
const byte rows=4;
const byte cols=4;
char keys[rows][cols]= //crear el teclado como en fisico
{
{‘1’,‘2’,‘3’,‘A’},
{‘4’,‘5’,‘6’,‘B’},
{‘7’,‘8’,‘9’,‘C’},
{’*’,‘0’,’#’,‘D’}
};
byte rowpins[rows]={A3,A2,A1,8}; //pines para las filas 1234
byte colpins[cols]={1,0,6,7}; //pines para las columnas ABCD

//crea y nombra el teclado
Keypad kpd=Keypad(makeKeymap(keys),rowpins,colpins,rows,cols);
LiquidCrystal lcd(12,11,5,4,3,2); //inicializo lcd
// rs,e,D4,D5,D6,D7
char pss1[10],pss2[10];
int led=13;

void setup()
{
pinMode(10, OUTPUT); // LEDS QUE INDICAN ABIERTO(13) O CERRADO(19)
pinMode(13,OUTPUT);
digitalWrite(10, HIGH); //enciende el led de cerrado
lcd.begin(16,2);
seguro.attach(9); // Pin del servomotor
}

void loop()
{
int i=0,j=0,f=0,w=0,k=0;
//Primero se crea un password
lcd.setCursor(1,0);
lcd.print(“CREAR PASSWORD”);
lcd.setCursor(2,1);
lcd.print(“DE 4 DIGITOS”);
delay(4000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“DIGITE SU CODIGO”);
lcd.setCursor(6,1);
for(i=0;i<=3;i++)

{
pss1*=kpd.waitForKey();*
_ lcd.print("*");_

  • delay(100);*

  • }*

  • delay(50);*
    //bucle para ingresar contraseña

  • while(f==0)*

  • {*

  • //pide que ingreses la contraseña*

  • lcd.clear();*

  • lcd.setCursor(0,0);*

  • lcd.print(“PUERTA BLOQUEADA”);*

  • lcd.setCursor(6,1);*

  • for(j=0;j<=3;j++)*

  • {*

  • pss2[j]=kpd.waitForKey();*
    _ lcd.print("*");_
    }

  • delay(50);*

  • //verifica los caracteres correctos*

  • w=0;*

  • for(k=0;k<=3;k++)*

  • {*

  • if(pss1[k]==pss2[k])*

  • {*

  • w++;*

  • }*

  • }*

  • //compara la contraseña original vs la ingresada*

  • if(w==4)*

  • {*

  • lcd.clear();*

  • digitalWrite(led,HIGH);*

  • lcd.setCursor(2,0);*

  • lcd.print(“PASS CORRECTO”);*

  • lcd.setCursor(0,1);*

  • lcd.print(“ACCESO PERMITIDO”);*

  • seguro.write(9); //abrir puerta*

  • delay(3000);*

  • lcd.clear();*

  • digitalWrite(led,LOW);*

  • }*

  • else*

  • {*

  • lcd.clear();*

  • lcd.setCursor(1,0);*

  • lcd.print(“ERROR DE CODIGO”);*

  • lcd.setCursor(0,1);*

  • lcd.print(“INTENTE NUEVAMENTE”);*

  • delay(2000);*

  • }*

  • }*
    }

Jose para la proxima los códigos van usando este icono

TU HARDWARE y SUS DEFINICIONES:
Un par de cosas antes...

byte rowpins[rows]={A3,A2,A1,8};  //pines para las filas 1234
byte colpins[cols]={1,0,6,7};  //pines para las columnas ABCD

A3,A2,A1, 8 // 8??? que secuencia rara elijes. Porque no A6, A5, A4, A3

1, 0??? esto funciona? pq no, 2,3, 4, 5

Que arduino estas usando?

Luego veo que usas en el LCD 12,11,5,4,3,2 podria aser mas en sucesión tipo 6 en adelantes pero bueno, eso es materia opinable.
Lo que no entiendo es el 0, 1 lo demas podria ser.
Funciona tu sketch?

TU CODIGO:

No esta mal pero no esta bien tampoco.
Tal como esta siempre que arrancas te pido que crees la contraseña.
Tiens que hacer algunos cambios.
Fijate alguna combinación de teclas o alguna teclas que indique que vas a cargar la contraseña.
Entonces si, podrás por ejemplo esperar a que se digita la combinación y compararla con el password almacenado.

Mira esto EEPROM READ o EEPROM WRITE