#include <Keypad.h>
#include <RTClib.h>
#include <Adafruit_I2CDevice.h>
RTC_DS3231 rtc;
const byte ROWS = 4; //Número de filas
const byte COLS = 3; //Número de columnas
char hexaKeys[ROWS][COLS] = { //Declaramos los caracteres que van en cada posición fila-columna
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //Pines donde van conectadas las filas
byte colPins[COLS] = {5, 4, 3}; //Pines donde van conectadas las columnas
char i[4] = {0,0,0,0}; //Cuatro variables inicializadas a O. Esta variable i almacenará la combinación de números
char key=0; //Variable que contendrá cada uno de los dígitos introducidos desde el teclado
int j=0; // Variable que nos ayudará a recorrer cada posición de la variable array i
int cont = 0; //Variable que se asegura de contar que introducimos 4 dígitos
int led_3 = 13; //Configuración del pin de lectura de la LED
Keypad keypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
//Se abre un puerto serie y especifica la velocidad de transmisión
Serial.begin(9600); //Se abre un puerto serie y especifica la velocidad de transmisión
pinMode(led_3, OUTPUT); //Asigna el pin como salida
rtc.begin();
pinMode(led_3, OUTPUT); //Asigna el pin como salida
rtc.adjust(DateTime(__DATE__, __TIME__));
}
void loop(){
//Se pone el código principal aquí, para que se ejecute repetidas veces
while (cont < 4) //Mientras el contador sea menor que 4...
{
key = keypad.getKey(); //La variable key almacena las teclas pulsadas
i[j]= key; //Almacenamos las teclas que recoge key en cada posición de nuestra variable array i
if (key) {//Si la variable array contiene datos...
Serial.print(key);//Se imprime las cuatro teclas pulsadas
//Serial.print(i[1]); //Se imprime la segunda tecla pulsada
//Serial.print(i[2]); //Se imprime la tercera tecla pulsada
//Serial.print(i[3]); //Se imprime la cuarta tecla pulsada
j=j+1; //Incrementamos la variable índice j
cont = cont+1;
}
}
if (i[0] == '5' && i[1] == '5' && i[2] == '5' && i[3] == '6') //Creamos la contraseña
{
digitalWrite (led_3, HIGH); //Cuando se ejecute la LED estará encendida
Serial.println(); //Imprime datos al puerto serie
Serial.println("contraseña correcta, acceso permitido"); //Imprime datos al puerto serie
Serial.println();
//Se pone la variabla a 0 para poder introducir el siguiente código PIN
i[0]=0;
i[1]=0;
i[2]=0;
i[3]=0;
delay(500); //Tiempo de espera
digitalWrite (led_3, LOW); //Cuando se ejecute la LED estará apagada
Serial.println("nombre: james");
Serial.println("apellidos: tiberius kirk");
Serial.println("ID: 01");
Serial.println(); //Imprime datos al puerto serie
DateTime now = rtc.now();
//Imprimimos el dia
Serial.print("Fecha de acceso: ");
Serial.print(now.day(), DEC);
Serial.print('/');
//Imprimimos el mes
Serial.print(now.month(), DEC);
Serial.print('/');
//Imprimimos el año
Serial.print(now.year(), DEC);
Serial.print(' ');
Serial.println();
//Imprimimos la hora
Serial.print("Hora de acceso: ");
Serial.print(now.hour(), DEC);
Serial.print(':');
//Imprimimos los minutos
Serial.print(now.minute(), DEC);
Serial.print(':');
//Imprimimos los segundos
Serial.print(now.second(), DEC);
Serial.println();
//Comprobamos la hora y la enviamos por el puerto serie cada 3 segundos
delay(1000);
Serial.println();
}
else if (i[0] == '6' && i[1] == '6' && i[2] == '6' && i[3] == '5') //Creamos la contraseña
{
digitalWrite (led_3, HIGH); //Cuando se ejecute la LED estará encendida
Serial.println(); //Imprime datos al puerto serie
Serial.println("contraseña correcta, acceso permitido"); //Imprime datos al puerto serie
Serial.println();
//Se pone la variabla a 0 para poder introducir el siguiente código PIN
i[0]=0;
i[1]=0;
i[2]=0;
i[3]=0;
delay(500); //Tiempo de espera
digitalWrite (led_3, LOW); //Cuando se ejecute la LED estará apagada
Serial.println("nombre: pavel");
Serial.println("apellidos: chekov");
Serial.println("ID: 02");
Serial.println(); //Imprime datos al puerto serie
DateTime now = rtc.now();
//Imprimimos el dia
Serial.print("Fecha de acceso: ");
Serial.print(now.day(), DEC);
Serial.print('/');
//Imprimimos el mes
Serial.print(now.month(), DEC);
Serial.print('/');
//Imprimimos el año
Serial.print(now.year(), DEC);
Serial.print(' ');
Serial.println();
//Imprimimos la hora
Serial.print("Hora de acceso: ");
Serial.print(now.hour(), DEC);
Serial.print(':');
//Imprimimos los minutos
Serial.print(now.minute(), DEC);
Serial.print(':');
//Imprimimos los segundos
Serial.print(now.second(), DEC);
Serial.println();
//Comprobamos la hora y la enviamos por el puerto serie cada 3 segundos
delay(1000);
Serial.println();
}
else if (i[0] == '3' && i[1] == '3' && i[2] == '0' && i[3] == '3') //Creamos la contraseña
{
digitalWrite (led_3, HIGH); //Cuando se ejecute la LED estará encendida
Serial.println(); //Imprime datos al puerto serie
Serial.println("Acceso permitido, contraseña correcta"); //Imprime datos al puerto serie
Serial.println("¡Bienvenido!"); //Imprime datos al puerto serie
Serial.println();
//Se pone la variabla a 0 para poder introducir el siguiente código PIN
i[0]=0;
i[1]=0;
i[2]=0;
i[3]=0;
delay(500); //Tiempo de espera
digitalWrite (led_3, LOW); //Cuando se ejecute la LED estará apagada
Serial.println("Nombre: David");
Serial.println("Apellido: Pitt");
Serial.println("ID: 03");
Serial.println(); //Imprime datos al puerto serie
DateTime now = rtc.now();
//Imprimimos el dia
Serial.print("Fecha de acceso: ");
Serial.print(now.day(), DEC);
Serial.print('/');
//Imprimimos el mes
Serial.print(now.month(), DEC);
Serial.print('/');
//Imprimimos el año
Serial.print(now.year(), DEC);
Serial.print(' ');
Serial.println();
//Imprimimos la hora
Serial.print("Hora de acceso: ");
Serial.print(now.hour(), DEC);
Serial.print(':');
//Imprimimos los minutos
Serial.print(now.minute(), DEC);
Serial.print(':');
//Imprimimos los segundos
Serial.print(now.second(), DEC);
Serial.println();
//Comprobamos la hora y la enviamos por el puerto serie cada 3 segundos
delay(1000);
Serial.println();
}
else { //Condicionante para cuando ninguna de las claves sea introducida
digitalWrite (led_3, LOW); //Cuando se ejecute la LED estará apagada
Serial.println(); //Imprime datos al puerto serie
Serial.println("contraseña incorrecta, acceso denegado"); //Imprime datos al puerto serie
Serial.println(); //Imprime datos al puerto serie
}
//Todos los contadores a 0
cont =0;
j=0;
key=0;
}