Está en la página 1de 7

Cdigo de la programacin de la cerradura electrnica

#include <Keypad.h> // Controla el teclado

void setup(){

#include <LiquidCrystal.h> //controla el LCD


#include <Servo.h> //Control del servomotor

Serial.begin(9600);

#include <EEPROM.h> //COntrola E/S EEPROM

pinMode(18, OUTPUT); //buzzer


pinMode(2,OUTPUT); //led1

//*****************************************

pinMode(19, OUTPUT); //led2

//*** Declaracion de variables locales*****

digitalWrite(19, HIGH); //enciende el led de cerrado

//*****************************************
Servo seguro; //servomotor
LiquidCrystal lcd(4 , 5, 14, 15, 16, 17); //display LCD

for(int i =0;i<=3;i++){ //LEER CONTRASEA DE LA


EEPROM
co[i]= EEPROM.read(i); //almacenarla en co[]
} //fin del for

const byte filas = 4;


const byte columnas = 4;
byte pinsFilas[filas]= {6,7,8,9};

seguro.attach(3); // Pin del servomotor

byte pinsColumnas[columnas] = {10,11,12,13};

lcd.begin(16, 2); //Configuracion lcd 16X2 (columnas,fila)

char teclas[filas][columnas] = {

lcd.setCursor(6,1); // La escritura de numero siempre sera en


el sgundo renglon a partir dle 6to cuadrito

{'1','2','3','A'},

// Declaracin del teclado

{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'},
};
Keypad teclado = Keypad(makeKeymap(teclas),
pinsFilas,pinsColumnas, filas, columnas);

lcd.print("____"); // Espacios a escribir


seguro.write(90); //Cerrar puerta
/*lcd.setCursor(0,0);
lcd.print("'A' para introdu");
delay(1000);
lcd.setCursor(0,0);
lcd.print("cir la pass

");

char co[5] = {'1','2','3','4'}; //almacena la contrasea en eeprom

delay(1000);

char cl[5]; //almacena la contrasea nueva

lcd.setCursor(0,0);

char cn[5]; //confirmacion de la contrasea

lcd.print("'C' para cambiar");

char ca[7]= {'3','7','1','9','2','A'}; //clave admin establecida

delay(1000);

char cal[7]; // Clave admin leida

lcd.setCursor(0,0);

int contador = 0; //Lleva la posicion del array

lcd.print(" la pass

int cursorr = 6; //Lleva la posicion del cursor

delay(1000);*/

int comp; // comparacion entre 2 arrays

lcd.setCursor(0,0);

int a; //aux

lcd.print(" **PASSWORD** ");

int b=0;
}//fin del setup

");

b=0;
void loop(){
if(b>2){

} //fin del if de comp >=4

digitalWrite(18, HIGH);

else{ //si al pulsar 'A' no son iguales

digitalWrite(13,LOW);

b++;

delay(15000);

ledrojoblink();

digitalWrite(18, LOW);

lcdtextocentrado("Error");

digitalWrite(13,LOW);

delay(600);

b=0;

lcd.setCursor(0,1);

lcd.print(comp);

cl[contador] = teclado.getKey(); // almacenar en la posicion


contador la tecla pulsada

delay(500);
lcdnumero();

Serial.print(co);

} // fin del else al if comp>=4

Serial.print(" ");

break; //break al caso 'a'

Serial.println(cl);
if (cl[contador] != NO_KEY){
entonces

// Si se puls alguna tecla


//*************************************//
// ***Cierra la puerta si se pulsa B //
//*************************************//

switch (cl[contador]){
pulsada

//condiciones segun la tecla

case 'B':
lcdtextocentrado("Cerrado");
void ledrojo();

//*****************************************//

delay(500);

//Comprobar si la contrasea es correcta

seguro.write(90); //cierra el seguro

//******************************************//

ledrojo();
for(int i = 0 ; i<4;i++){ // borra el codigo temporal

case 'A':

guardado
cl[i]='0';

comp = comprobacion(cl,co)+1; // comp almacena


si los 4 numeros son iguales
if (comp==4){
mismos entonces

//si los 4 digitos son los

lcdnumero();
break; //fin del caso B

lcdtextoizq(" **Correcto**");
seguro.write(15);

}//fin del for

//abrir puerta

ledverde();

case 'C':
repetirpass();
if (comp>=4){ //si la contrasea concide entonce

delay(600);

lcdtextoizq("Pass correcta");

lcdtextoizq("Pulse B para cerrar");

delay(500);

delay(600);

nuevapass();

lcdtextoizq("Cerrar");

vuelve(); //volver a introducir

} //funcion cambio de password


else{

} //fin del if si se pulso alguna tecla

lcdtextoizq("No pudo cambiar");}

comp = comprobacion(cn,cl);

if (contador==4){ //Vuelve a hacer que el cursor comience a


partir de cuadrito 6
contador=0;

if (comp>=4){

cursorr=6;

lcdtextoizq("Correcto");
delay(500);
lcdtextoizq("Nueva pass");

}
}//fin del loop

delay(500);
lcdtextoizq("pass guardada");
delay(500);
for(int i =0;i<=4;i++){

//*********************************
//*****Seccion de funciones********
//*********************************

EEPROM.write(i,cl[i]);}
for(int i =0;i<=4;i++){
co[i]= EEPROM.read(i);}

void lcdnumero(){ //reseta los valores del cursor del lcd asi
como del contador
lcd.setCursor(0,1);
lcd.print("

//segundo renglon
");

lcd.setCursor(6,1);
lcdnumero();

lcd.print("____");

lcdtitulo(" **PASSWORD** ");

cursorr=6;

break;//fin caso c

contador=0;
} //fin de lcdresetparanumero

case '#': //seccion admin


admin();
break;

void lcdtextocentrado(String A){ //escribe el mensaje


segundo renglon 1er cuadro
lcd.setCursor(0,1);
lcd.print("

");

lcd.setCursor(6,1);
default:
escribirn(cl);

lcd.print(A); //imprime el valor introducido


} //fin de lcdresetparatexto

void lcdtextoizq(String A){ //escribe el mensaje segundo


renglon 6tocuadro
} //fin del switch

lcd.setCursor(0,1);

lcd.print("

");

lcd.setCursor(0,1);
lcd.print(A); //imprime el valor introducido
} //fin de lcdresetparatexto

for(int i = 0; i<=5; i++){


if(v1[i]==v2[i])

void ledrojo(){ //enciende led rojo

igual= igual + 1;

digitalWrite(19, HIGH);
}

digitalWrite(2,LOW);

return igual;

}
}
void ledrojoblink(){ //enciende led rojo parpadeando
digitalWrite(19, HIGH);

void lcdtitulo(String a){

digitalWrite(2,LOW);
delay(200);

lcd.setCursor(0,0);

digitalWrite(19, LOW);

lcd.print("

delay(200);

lcd.setCursor(0,0);

digitalWrite(19, HIGH);

lcd.print(a); //imprime el valor introducido

");

} //fin de lcdresetparatexto

void repetirpass(){
void ledverde(){ //enciende led verde

int i =0;

digitalWrite(19, LOW);

lcdtitulo("Introduzca pass");

digitalWrite(2, HIGH);

delay(800);

digitalWrite(18,LOW);

lcdtitulo("pass anterior");
delay(1000);

lcdtextoizq("Finalice con *");


void escribirn(char *v){ //escribe el valor de un array en la
posicion actual del contador

lcdnumero();
while (i<=4){

//har esto 4 vces

lcd.setCursor(cursorr,1);
lcd.print(v[contador]);
v[contador+1]= (' ');
delay(250);

cl[contador] = teclado.getKey(); //obtiene valor


if (cl[contador]!=NO_KEY){ //si detecta una tecla
entonces

lcd.setCursor(cursorr,1);
lcd.print('*');

switch (cl[contador]){

cursorr++;
contador++;

case '*': //comprueba si la pass escrita es igual a la


anterior
comp=0;

comp = comprobacion(cl,co);
if (comp>=4){ //si es igual
int comprobacion(char *v1,char *v2){
int igual = 0;

lcdtextocentrado("Correcto");
ledverde();

delay(300);

contador=5;

ledrojo();

}//fin del if contador==$

i=5;} //fin if comp<=4

else { // si no escribio 4 numeros

else{

lcdtextoizq("Error de pass");

lcdtextocentrado("Error");
ledrojoblink();
i=5;

delay(500);

}//end else

lcd.setCursor(0,1);

break; //fin del caso *

lcdtextoizq(" ");
lcd.print(contador);

default:

contador =5;

escribirn(cl);

}//Fin del else

i++;

break;

}//fin del switch


}//fin del if no key

default:

}//fin del if contador==4

escribirn(cl);

//fin del while

}//fin del switch

}//fin de la funcion repetirpass


//fin del if

void nuevapass(){

}//fn del if no key

lcdtitulo("Intro nueva pass");


lcdtextoizq("Finalice con 'D'");

}//fin de while

delay(1500);
lcdtextoizq("SOLO NUMEROS");

}//finde nueva pass

delay(1500);
lcdnumero();
while(contador<=4){ //cuatro veces el ciclo

void vuelve(){
lcdtitulo("Escribe otra vez");

cl[contador] = teclado.getKey();
if (cl[contador]!=NO_KEY){

//si escribi algo

lcdtextoizq("Finalice con '#'");


delay(1500);

switch (cl[contador]){

lcdnumero();
while(contador<=4){ //cuatro veces el ciclo

case 'D':
if (contador>=4){ // si ya escribio 4 numeros

cn[contador] = teclado.getKey();
if (cn[contador]!=NO_KEY){

lcdtextoizq("Vuelve a ingresarla");
delay(1000);
switch (cn[contador]){

//si escribi algo

case '#':

if (cal[contador]!=NO_KEY){

//si escribi algo

if (contador>=3){ // si ya escribio 4 numeros


lcdtextoizq("Contrasea leida");

switch (cal[contador]){

contador=5;
}//fin del if contador==$

case '*':

else { // si no escribio 4 numeros

comp =comprobacion(cal,ca);

lcdtextoizq("Error de pass");

if (comp>=6){
lcdtitulo("Hola admin");
contador =20;
adminpass();

delay(500);
}

lcd.setCursor(0,1);
lcdtextoizq(" ");

//fin del if contador==$

lcd.print(contador);

else { // si no escribio 4 numeros


lcdtextoizq("Error de pass");

}//Fin del else

contador =20;

break;

lcdtitulo(" **PASWORD** ");


lcdnumero();

default:
escribirn(cn);

}//fin del switch

//fin del if

break;

}//fn del if no key


default:
}//fin de while

escribirn(cal);
}//fin del switch

}
//finde volver pass

//fin del if
void admin(void){

lcdtitulo("Admin pass");

}//fn del if no key

}//fin de while

lcdtextoizq("'*' = Aceptar");
delay(1500);
lcdnumero();
cursorr=4;
while(contador<=8){
cal[contador]=teclado.getKey();

}//finde admin

void adminpass(){

lcdtitulo(" **PASSWORD** ");

lcdtitulo("Pass nueva");

lcdtextoizq("Confirma con 'A'");

lcdtextoizq("Finalice con '#'");

}//fin del if contador==$

delay(1500);

else { // si no escribio 4 numeros

lcdnumero();

lcdtextoizq("Error de pass");

while(contador<=4){ //cuatro veces el ciclo

cn[contador] = teclado.getKey();
if (cn[contador]!=NO_KEY){

delay(500);
//si escribi algo

lcd.setCursor(0,1);
lcdtextoizq(" ");

switch (cn[contador]){

lcd.print(contador);
}//Fin del else

case '#':

break;

if (contador>=3){ // si ya escribio 4 numeros


lcdtextoizq("Contrasea leida");

default:

for(int i =0;i<=4;i++){

escribirn(cn);

EEPROM.write(i,cn[i]);}

}//fin del switch

for(int i =0;i<=4;i++){
co[i]= EEPROM.read(i);}
delay(500);

//fin del if
}//fn del if no key

lcdtextoizq("Pass actualizada");
contador = 10;
delay(500);

}//fin de while
}//finde volver pass

También podría gustarte