Control de Acceso

SE PIDE QUE SE SUMEN LOS DIGITOS QUE SE INGRESAN Y LOS PORYECTE AL FINAL DE HABER INGRESADO CONTRASEÑA

Proyecto introduccion clave
por teclado matricial con LCD I2C

Funciones de teclas:

 * Borra clave introducida y resetea
 # enciende o apaga la pantalla
 
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
/* Funcion de configuracion
 de pines del modulo LCD/I2C (Direccion,en,rw,rs,d4,d5,d6,d7,backlight,polaridad)*/
//LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); 
LiquidCrystal_I2C lcd(0x27, 16, 2);  
#include <Keypad.h>

const byte Filas = 4;     //Cuatro filas
const byte Cols = 4;    //Cuatro columnas

byte Pins_Filas[] = {9,8,7,6};   //Pines Arduino a los que contamos las filas.
byte Pins_Cols[] = {5,4,3,2};   // Pines Arduino a los que contamos las columnas.
//no utilizar los pines 1 y 0 para no interferir en Rx y Tx

char Teclas [ Filas ][ Cols ] = 
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};

char codigoSecreto[5] = {'A','2','B','5','D'}; // Aqui va el codigo secreto
// Para cambiar el tamaño de la clave, solo hay que cambiar el tamaño del array

int posicion=0; // necesaria para la clave
int cursor=5; // posicion inicial de la clave en el LCD
int clave=0; // para el LCD
int luz=0;  // para el LCD
int tiempo=0;  // para el LCD
int ledVerde=11; // pin para el LED verde
int ledRojo=12;  // pin para el LED rojo
int buzzer=10;  // pin altavoz

Keypad Teclado1 = Keypad(makeKeymap(Teclas), Pins_Filas, Pins_Cols, Filas, Cols);

void setup(){
Serial.begin(9600) ;
//lcd.begin(); // inicializamos el LCD.
lcd.init();
lcd.noBacklight(); // apagamos LCD
pinMode (ledVerde,OUTPUT);
pinMode (ledRojo, OUTPUT);
pinMode (buzzer, OUTPUT);
digitalWrite(ledRojo,HIGH);  // encendemos el LED rojo
digitalWrite(ledVerde, LOW);  // apagamos el verde

lcd.setCursor(0,0); // situamos el cursor el la posición 2 de la linea 0.
lcd.print("Introduzca clave por favor :v"); // escribimos en LCD
lcd.setCursor(cursor,1); // cursor en la posicion de la variable, linea 1
}


void loop(){

char pulsacion = Teclado1.getKey() ;  // leemos pulsacion
if (pulsacion != 0){  // Si el valor es 0 es que no se ha pulsado ninguna tecla

if (pulsacion != '#' && pulsacion != '*' && clave==0){  // descartamos almohadilla y asterisco

 lcd.print(pulsacion);  // imprimimos pulsacion
 cursor++;  // incrementamos el cursor
 tone(buzzer,350);  // tono de pulsacion
 delay(200);
 noTone(buzzer);
 
//--- Condicionales para comprobar la clave introducida -----------

if (pulsacion == codigoSecreto[posicion]){ // comparamos entrada con cada uno de los digitos, uno a uno
   posicion ++;  // aumentamos en uno el contador de posicion si es correcto el digito  

   }
   
if (posicion == 5){ // comprobamos que se han introducido los 4 correctamente
     
   digitalWrite (13,HIGH);  // encendemos LED
   lcd.setCursor(0,0); // situamos el cursor el la posición 0 de la linea 0.
   lcd.print("Clave correcta:v  "); // escribimos en LCD
   
   delay(200); // tono de clave correcta
   tone(buzzer,500);
   delay(100);
   noTone(buzzer);
   tone(buzzer,600);
   delay(100);
   noTone(buzzer);
   tone(buzzer,800);
   delay(100);
   noTone(buzzer);
   
   lcd.setCursor(5,1); // cursor en la posicion 5, linea 1
   clave=1;  // indicamos que se ha introducido la clave
   digitalWrite(ledRojo,LOW);  // apagamos el LED rojo
   digitalWrite(ledVerde, HIGH);  // encendemos el verde 
     
   }
//--- En el caso de que este incompleta o no hayamos acertado ----------   
 if(cursor>9){  // comprobamos que no pase de la cuarta posicion
   cursor=5;  // lo volvemos a colocar al inicio
   posicion=0; // borramos clave introducida
   lcd.setCursor(5,1);
   lcd.print("       ");  // borramos la clave de la pantalla
   lcd.setCursor(5,1);
 if(clave==0){           // comprobamos que no hemos acertado
   tone(buzzer,70,500);  // para generar
   delay(250);           // tono de error
   noTone(buzzer);
   }
   }
 
 }
 }
//--- Condicionales para encender o apagar el LCD --------------

if (pulsacion == '#' && luz==0){ // comprobamos tecla y encendemos si esta apagado
 lcd.backlight();  // encendemos
 luz=1;  // indicamos que esta encendida
 pulsacion =0; // borramos el valor para poder leer el siguiente condicional
}
if (pulsacion == '#' && luz==1){  //  comprobamos tecla y estado
 lcd.noBacklight();  // apagamos
 luz=0;  // indicamos que esta apagada
   }
//---------------------------------------------------------------

//--- Condicionales para resetear clave introducida -------------  

if (pulsacion == '*'){ // asterisco para resetear el contador
   posicion = 0;
   cursor = 5;
   clave=0;
   posicion=0;
   lcd.setCursor(0,0); // situamos el cursor el la posición 2 de la linea 0.
   lcd.print("Introduzca clave por favor :v"); // escribimos en LCD
   
   lcd.setCursor(5,1);
   lcd.print("      "); // borramos de la pantalla los numeros
   lcd.setCursor(5,1);
   

   digitalWrite(ledRojo,HIGH);  // encendemos el LED rojo
   digitalWrite(ledVerde, LOW);  // apagamos el verde

  }
}

Moderador: Código editado usando tags.

Control_acceso.ino (5.25 KB)

Porfavor,repasa las normas del foro ,tu post es un ejemplo de todo lo que no se debe hacer.Gracias.

Te envié privado con las intrucciones para que edites tu post de acuerdo a las normas.
Tambiénmodifiqué tu titulo inútil "Ayuda..". Si vienes a un foro lo único que recibirás es Ayuda, entonces que sentido tiene pedirla?