#include <RTClib.h>
#include <Keypad.h> //libreria  del teclado matricial
RTC_DS1307 rtc;



const uint8_t ROWS = 4; //nº de columnas
const uint8_t COLS = 4; //nº de filas

char daysOfTheWeek[7][12] = {"Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes","Sabado"}; 

char keys[ROWS][COLS] = {
  { '1', '2', '3', ' ' }, //permite identificar que tecla presionamos
  { '4', '5', '6', ' ' },
  { '7', '8', '9', ' ' },
  { ' ', '0', ' ', ' ' }
};


uint8_t colPins[COLS] = { 5, 4, 3, 2 }; // Pins connected to C1, C2, C3, C4
uint8_t rowPins[ROWS] = { 9, 8, 7, 6 }; // Pins connected to R1, R2, R3, R4


char i[4] = {0,0,0,0}; //declaramos una matriz de cuatro variables y las inicializamos a 0
//se almacenan los 4 digitos de la contraseña
  

char key = 0; //variable que contiene los digitos introducidos en el teclado
int j = 0; //variable que nos ayuda a recorrer cada posicion de la variable array i
int cont = 0;




Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

int ledrojo = 10; 
int ledverde = 11;

void setup() {

  rtc.begin();
  rtc.adjust(DateTime(__DATE__, __TIME__));
  Serial.begin(9600);
  pinMode(ledrojo,OUTPUT);
  pinMode(ledverde,OUTPUT);
  digitalWrite(ledrojo, LOW);
  digitalWrite(ledverde, LOW);
  
    if (! rtc.begin()) { 
    Serial.println("No se puedo encontrar el RTC"); 
    Serial.flush();
    abort(); 
    }
}

void loop() {

  while (cont < 4) { //mientras el contador de numeros introducidos sea menor de 4

  char key = keypad.getKey(); //esta variable almacenara las teclas pulsadas
  i[j] = key; //almacenamo las teclas pulsadas dentro del array i 
  
  if (key) { //si la variale array tiene los datos que pide 
    Serial.print("*");
 //"encriptamos" la contraseña
    j = j + 1; //incrementamos la variable j
    cont = cont + 1; //incrementamos la variable contados de los numeros introducidos
  }
  }
    digitalWrite(ledrojo, LOW);
  digitalWrite(ledverde, LOW);

//1 si los numeros pulsados concuerdan con la contraseña imprimira por pantalla

if (i[0] == '1' && i[1] == '2' && i[2]  == '3' && i[3] == '1' )

{
Serial.println();
Serial.println("Autorizado");
i[0] = 0;
i[1] = 0;
i[2] = 0;
i[3] = 0;
  Serial.println("Nombre : Adrià");
  Serial.println("Apellido : Jurado");
  Serial.println("ID - 01");
        DateTime now = rtc.now();
  Serial.print("Fecha actual: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
digitalWrite(ledverde,HIGH);
delay(3000);
digitalWrite(ledverde,LOW);

}

else {
  
//2

if (i[0] == '1' && i[1] == '2' && i[2]  == '3' && i[3] == '2' )

{
Serial.println();
Serial.println("Autorizado");
i[0] = 0;
i[1] = 0;
i[2] = 0;
i[3] = 0;
  Serial.println("Nombre : Oriol");
  Serial.println("Apellido : Tauste");
  Serial.println("ID - 02");
        DateTime now = rtc.now();
  Serial.print("Fecha actual: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
digitalWrite(ledverde,HIGH);
delay(3000);
digitalWrite(ledverde,LOW);
}

else {
 
//3

if (i[0] == '1' && i[1] == '2' && i[2]  == '3' && i[3] == '3' )

{
Serial.println();
Serial.println("Autorizado");
i[0] = 0;
i[1] = 0;
i[2] = 0;
i[3] = 0;
  Serial.println("Nombre : Pol");
  Serial.println("Apellido : Carvajal");
  Serial.println("ID - 03");
        DateTime now = rtc.now();
  Serial.print("Fecha actual: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
digitalWrite(ledverde,HIGH);
delay(3000);
digitalWrite(ledverde,LOW);
}

else {
 
//4

if (i[0] == '1' && i[1] == '2' && i[2]  == '3' && i[3] == '4' )

{
Serial.println();
Serial.println("Autorizado");
i[0] = 0;
i[1] = 0;
i[2] = 0;
i[3] = 0;
Serial.println("Nombre : Leo");
  Serial.println("Apellido : Messi");
  Serial.println("ID - 04");
        DateTime now = rtc.now();
  Serial.print("Fecha actual: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
digitalWrite(ledverde,HIGH);
delay(3000);
digitalWrite(ledverde,LOW);
}

else {
  
//5

if (i[0] == '1' && i[1] == '2' && i[2]  == '3' && i[3] == '5' )

{
Serial.println();
Serial.println("Autorizado");
i[0] = 0;
i[1] = 0;
i[2] = 0;
i[3] = 0;
Serial.println("Nombre : Cristiano");
  Serial.println("Apellido : Ronaldo");
  Serial.println("ID - 05");
        DateTime now = rtc.now();
  Serial.print("Fecha actual: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
digitalWrite(ledverde,HIGH);
delay(3000);
digitalWrite(ledverde,LOW);
}

else {
  
//6

if (i[0] == '1' && i[1] == '2' && i[2]  == '3' && i[3] == '6' )

{
Serial.println();
Serial.println("Autorizado");
i[0] = 0;
i[1] = 0;
i[2] = 0;
i[3] = 0;
Serial.println("Nombre : Ansu");
  Serial.println("Apellido : Fati");
  Serial.println("ID - 06");
        DateTime now = rtc.now();
  Serial.print("Fecha actual: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
digitalWrite(ledverde,HIGH);
delay(3000);
digitalWrite(ledverde,LOW);
}

else {
 
//7

if (i[0] == '1' && i[1] == '2' && i[2]  == '3' && i[3] == '7' )

{
Serial.println();
Serial.println("Autorizado");
i[0] = 0;
i[1] = 0;
i[2] = 0;
i[3] = 0;
Serial.println("Nombre : Pedro");
  Serial.println("Apellido : Sanchez");
  Serial.println("ID - 07");
        DateTime now = rtc.now();
  Serial.print("Fecha actual: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
digitalWrite(ledverde,HIGH);
delay(3000);
digitalWrite(ledverde,LOW);
}

else {
  
//8

if (i[0] == '1' && i[1] == '2' && i[2]  == '3' && i[3] == '8' )

{
Serial.println();
Serial.println("Autorizado");
i[0] = 0;
i[1] = 0;
i[2] = 0;
i[3] = 0;
Serial.println("Nombre : Diego");
  Serial.println("Apellido : Maradona");
  Serial.println("ID - 08");
        DateTime now = rtc.now();
  Serial.print("Fecha actual: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
digitalWrite(ledverde,HIGH);
delay(3000);
digitalWrite(ledverde,LOW);
}

else {
 
//9

if (i[0] == '1' && i[1] == '2' && i[2]  == '3' && i[3] == '9' )

{
Serial.println();
Serial.println("Autorizado");
i[0] = 0;
i[1] = 0;
i[2] = 0;
i[3] = 0;
Serial.println("Nombre : Carrero");
  Serial.println("Apellido : Blanco");
  Serial.println("ID - 09");
        DateTime now = rtc.now();
  Serial.print("Fecha actual: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
digitalWrite(ledverde,HIGH);
delay(3000);
digitalWrite(ledverde,LOW);
}

else {
  
//10

if (i[0] == '1' && i[1] == '2' && i[2]  == '3' && i[3] == '0' )

{
Serial.println();
Serial.println("Autorizado");
i[0] = 0;
i[1] = 0;
i[2] = 0;
i[3] = 0;
Serial.println("Nombre : Paz");
  Serial.println("Apellido : Padilla");
  Serial.println("ID - 10");
        DateTime now = rtc.now();
  Serial.print("Fecha actual: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
digitalWrite(ledverde,HIGH);
delay(3000);
digitalWrite(ledverde,LOW);
}

else {
 
//11

if (i[0] == '2' && i[1] == '2' && i[2]  == '2' && i[3] == '2' )

{
Serial.println();
Serial.println("Autorizado");
i[0] = 0;
i[1] = 0;
i[2] = 0;
i[3] = 0;
Serial.println("Nombre : Kiko");
  Serial.println("Apellido : Rivera");
  Serial.println("ID - 11");
        DateTime now = rtc.now();
  Serial.print("Fecha actual: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
digitalWrite(ledverde,HIGH);
delay(3000);
digitalWrite(ledverde,LOW);  
}

else {
  
//12

if (i[0] == '1' && i[1] == '1' && i[2]  == '1' && i[3] == '1' )

{
Serial.println();
Serial.println("Autorizado");
i[0] = 0;
i[1] = 0;
i[2] = 0;
i[3] = 0;
Serial.println("Nombre : Kylian");
  Serial.println("Apellido : Mbappé");
  Serial.println("ID - 12");
        DateTime now = rtc.now();
  Serial.print("Fecha actual: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
digitalWrite(ledverde,HIGH);
delay(3000);
digitalWrite(ledverde,LOW);
}

else {
  
//13

if (i[0] == '3' && i[1] == '3' && i[2]  == '3' && i[3] == '3' )

{
Serial.println();
Serial.println("Autorizado");
i[0] = 0;
i[1] = 0;
i[2] = 0;
i[3] = 0;
Serial.println("Nombre : Andrés");
  Serial.println("Apellido : Iniesta");
  Serial.println("ID - 13");
        DateTime now = rtc.now();
  Serial.print("Fecha actual: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
digitalWrite(ledverde,HIGH);
delay(3000);
digitalWrite(ledverde,LOW);
}

else {
  
//14

if (i[0] == '4' && i[1] == '4' && i[2]  == '4' && i[3] == '4' )

{
Serial.println();
Serial.println("Autorizado");
i[0] = 0;
i[1] = 0;
i[2] = 0;
i[3] = 0;
Serial.println("Nombre : Ousmane");
  Serial.println("Apellido : Dembele");
  Serial.println("ID - 14");
        DateTime now = rtc.now();
  Serial.print("Fecha actual: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
digitalWrite(ledverde,HIGH);
delay(3000);
digitalWrite(ledverde,LOW);
}

else {
 
//15

if (i[0] == '5' && i[1] == '5' && i[2]  == '5' && i[3] == '5' )

{
Serial.println();
Serial.println("Autorizado");
i[0] = 0;
i[1] = 0;
i[2] = 0;
i[3] = 0;
Serial.println("Nombre : Sergio");
  Serial.println("Apellido : Ramos");
  Serial.println("ID - 15");
        DateTime now = rtc.now();
  Serial.print("Fecha actual: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
digitalWrite(ledverde,HIGH);
delay(3000);
digitalWrite(ledverde,LOW);
}

else {

//16
if (i[0] == '6' && i[1] == '6' && i[2]  == '6' && i[3] == '6' )

{
Serial.println();
Serial.println("Autorizado");
i[0] = 0;
i[1] = 0;
i[2] = 0;
i[3] = 0;
Serial.println("Nombre : Pepe");
  Serial.println("Apellido : Villuela");
  Serial.println("ID - 16");
        DateTime now = rtc.now();
  Serial.print("Fecha actual: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
digitalWrite(ledverde,HIGH);
delay(3000);
digitalWrite(ledverde,LOW);
}

else {

if (i[0] == '7' && i[1] == '7' && i[2]  == '7' && i[3] == '7' )

{
Serial.println();
Serial.println("Autorizado");
i[0] = 0;
i[1] = 0;
i[2] = 0;
i[3] = 0;
Serial.println("Nombre : Jose");
  Serial.println("Apellido : Pelon");
  Serial.println("ID - 17");
        DateTime now = rtc.now();
  Serial.print("Fecha actual: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
digitalWrite(ledverde,HIGH);
delay(3000);
digitalWrite(ledverde,LOW);
}

else {

if (i[0] == '7' && i[1] == '7' && i[2]  == '7' && i[3] == '7' )

{
Serial.println();
Serial.println("Autorizado");
i[0] = 0;
i[1] = 0;
i[2] = 0;
i[3] = 0;
Serial.println("Nombre : Jose");
  Serial.println("Apellido : Pelon");
  Serial.println("ID - 17");
        DateTime now = rtc.now();
  Serial.print("Fecha actual: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
digitalWrite(ledverde,HIGH);
delay(3000);
digitalWrite(ledverde,LOW);
}

else {

Serial.println();
Serial.println("contraseña incorrecta");
digitalWrite(ledrojo, HIGH);
tone(A0, 1350, 200); 
  delay(250);
  tone(A0, 500, 200); 
  delay(250);
  tone(A0, 1350, 200); 
  delay(250);
  tone(A0, 100, 200);
  delay(250);
  tone(A0, 1350, 200); 
  delay(250);
  tone(A0, 500, 200); 
  delay(250);
  tone(A0, 1350, 200);
  delay(250);
  noTone(A0); 
  delay(250);
digitalWrite(ledrojo,LOW);
delay(2000);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}

cont = 0;
j= 0; //para que al acabar el void loop vuelva todo a 0
key= 0;
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
keypad:R1
keypad:R2
keypad:R3
keypad:R4
keypad:C1
keypad:C2
keypad:C3
keypad:C4
GND5VSDASCLSQWRTCDS1307+
rtc1:GND
rtc1:5V
rtc1:SDA
rtc1:SCL
rtc1:SQW
led1:A
led1:C
led2:A
led2:C
bz1:1
bz1:2