#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Keypad.h>
#include <Servo.h>
Servo SG2;
/* Funcion de configuracion de pines del modulo LCD/I2C
(Direccion,en,rw,rs,d4,d5,d6,d7,backlight,polaridad)*/
LiquidCrystal_I2C lcd(0x27, 20,4);
const byte Filas = 4; //Cuatro filas
const byte Cols = 4; //Cuatro columnas
byte Pins_Filas[] = {13,12,11,10};//Pines Arduino a las filasbyte
byte Pins_Cols[] = {9,8,7,6}; // Pines Arduino a 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[4] = {'1','2','3','4'}; // Aqui va el codigo secreto
char codigoSecreto2[4] = {'3','5','0','1'}; // Aqui va el codigo secreto
char clave[4];
// 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=7; // posicion inicial de la clave en el LCD
// para el LCD
int luz=0; // para el LCD
int tiempo=0; // para el LCD
int ledVerde=2; // pin para el LED verde
int ledRojo=3; // pin para el LED rojo
int buzzer=4; // pin altavoz
Keypad Teclado1 = Keypad(makeKeymap(Teclas), Pins_Filas, Pins_Cols, Filas, Cols);
void setup()
{
SG2.attach(5);
Serial.begin(9600) ;
lcd.begin(20,4); // inicializamos el LCD.
lcd.backlight(); // apagamos LCD
pinMode (ledVerde,OUTPUT);
pinMode (ledRojo, OUTPUT);
pinMode (buzzer, OUTPUT);
digitalWrite(ledRojo,HIGH); // encendemos el LED rojo
digitalWrite(ledVerde, LOW); // apagamos el verde
//SG2.write(0);
lcd.setCursor(7,1); // situamos el cursor el la posición 2 de la linea 0.
lcd.print("WELCOME "); // escribimos en LCD
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Sistema de Seguridad");
lcd.setCursor(6,1);
lcd.print("Grupo #2");
lcd.setCursor(7,2);
lcd.print("5 STC");
delay(3000);
lcd.clear();
PantallaInicio();
}
void PantallaInicio(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Introduzca");
lcd.print(" el");
lcd.print(" pin: ");
lcd.setCursor(6,2);
lcd.print("{____}");
//lcd.setCursor(7,2);
}
void loop(){
char pulsacion = Teclado1.getKey() ; // leemos pulsacion
if (pulsacion != 0) //Si el valor es 0 es que no se ha pulsado ninguna tecla
{ // descartamos almohadilla y asterisco
if (pulsacion != '#' && pulsacion != '*')
{
clave[cursor-7]= pulsacion;
lcd.setCursor(cursor,2);
lcd.print("*"); // imprimimos pulsacion
cursor++; // incrementamos el cursor
tone(buzzer,350); // tono de pulsacion
delay(200);
noTone(buzzer);
//--- Condicionales para comprobar la clave introducida -----------
// comparamos entrada con cada uno de los digitos, uno a uno
// if (pulsacion == codigoSecreto[posicion]){
// posicion ++; // aumentamos posicion si es correcto el digito
//}
if((clave[0]== codigoSecreto[0]&& clave[1]== codigoSecreto[1]&& clave[2]== codigoSecreto[2]&& clave[3]== codigoSecreto[3])||(clave[0]== codigoSecreto2[0]&& clave[1]== codigoSecreto2[1]&& clave[2]== codigoSecreto2[2]&& clave[3]== codigoSecreto2[3]))
{
cursor=7;
lcd.clear();
lcd.setCursor(0,0); // situamos el cursor el la pos 0 de la linea 0.
lcd.print(" Password Correcto!");
SG2.write(180);
digitalWrite(ledRojo,LOW); // apagamos el LED rojo
digitalWrite(ledVerde, HIGH); // encendemos el verde
lcd.setCursor(0,2); // situamos el cursor el la pos 0 de la linea 0.
lcd.print(" Puerta Abierta!");
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);
delay(5000);
SG2.write(90);
lcd.setCursor(3,2); // situamos el cursor el la pos 0 de la linea 0.
lcd.print("Puerta Cerrada!");
digitalWrite(ledRojo,HIGH);
digitalWrite(ledVerde, LOW);
delay(2000);
clave[0] = 0;
clave[1] = 0;
clave[2] = 0;
clave[3] = 0;
PantallaInicio();
// comprobamos que se han introducido los 4 correctamente
}
if(cursor>10) // comprobamos que no pase de la cuarta posicion
{ cursor=7; // lo volvemos a colocar al inicio
//posicion=0; // borramos clave introducida
lcd.setCursor(0,0);
lcd.print("Password Incorrecto!"); // borramos la clave de la pantalla
lcd.setCursor(6,2);
lcd.print(" ");
delay(200); // tono de clave correcta
tone(buzzer,500);
delay(200);
noTone(buzzer);
tone(buzzer,300);
delay(200);
noTone(buzzer);
tone(buzzer,200);
delay(200);
noTone(buzzer);
delay(3000);
clave[0] = 0;
clave[1] = 0;
clave[2] = 0;
clave[3] = 0;
PantallaInicio();
}
}
}
//--- 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
}
}