#include <Wire.h>
#include "Keypad.h"
#include "RTClib.h"
#include "LiquidCrystal_I2C.h"
#include "Servo.h"
const byte ROWS = 4;
const byte COLS = 3;
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
Servo servojoel;
RTC_DS1307 RTC;
char daysOfTheWeek[7][12] = {"Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"};
char keys [ROWS] [COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins[ROWS] = {9, 8 ,7, 6};
byte colPins[COLS] = {5, 4, 3};
char i[4] = {0, 0, 0, 0};
char key=0;
int j=0;
int cont = 0;
int green = 13;
int red = 12;
int white = 11;
int buzzer = A0;
int pos = 0;
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup () {
lcd.backlight();
Serial.begin(9600);
Wire.begin();
RTC.begin();
RTC.adjust(DateTime(__DATE__, __TIME__));
servojoel.attach(10);
servojoel.write(pos);
lcd.begin(16,2);
digitalWrite (red, HIGH);
}
void loop () {
DateTime now = RTC.now();
while (cont < 4) { //
key = keypad.getKey();
i[j]= key;
if (key){
lcd.print("$");
digitalWrite (white, HIGH);
delay(500);
digitalWrite (white, LOW);
j=j+1;
cont = cont+1;
}
}
if (i[0] == '1' && i[1] == '2' && i[2] == '3' && i[3] == '4')
{
digitalWrite (red, LOW);
digitalWrite (green, HIGH);
lcd.setCursor(0,0);
lcd.print("Allen Cigala");
delay(3000);
lcd.setCursor(0,1);
lcd.print("ID:01");
delay(1000);
lcd.setCursor(0,0);
lcd.print("Pin correcto");
lcd.setCursor(0,1);
lcd.print("Acceso ok");
delay(1500);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Bienvenido");
lcd.setCursor(0,1);
lcd.print("Sistema ok");
delay(1500);
lcd.clear();
servojoel.write(90);
delay(1000);
servojoel.write(0);
delay(1000);
servojoel.attach(10);
i[0]=0;
i[1]=0;
i[2]=0;
i[3]=0;
delay(1000);
digitalWrite (green, LOW);
delay(1500);
lcd.clear();
DateTime now = RTC.now();
lcd.setCursor(0,0);
lcd.print("DATE: ");
lcd.print(now.day(), DEC);
lcd.print("/");
lcd.print(now.month(), DEC);
lcd.print("/");
lcd.print(now.year(), DEC);
lcd.print("/");
lcd.setCursor(0,1);
lcd.print(now.hour(), DEC);
lcd.print(":");
lcd.print(now.minute(), DEC);
lcd.print(":");
lcd.print(now.second(), DEC);
delay(2000);
lcd.clear();
digitalWrite (red, HIGH);
}
if (i[0] == '4' && i[1] == '3' && i[2] == '2' && i[3] == '1')
{
digitalWrite (red, LOW);
digitalWrite (green, HIGH);
lcd.setCursor(0,0);
lcd.print("Joel Gonzalo");
delay(3000);
lcd.setCursor(0,1);
lcd.print("ID:02");
delay(1000);
lcd.setCursor(0,0);
lcd.print("CLAU ACCEPTADA");
delay(500);
lcd.clear ();
delay(500);
lcd.setCursor(0,0);
lcd.print("CLAU ACCEPTADA");
delay(500);
lcd.clear ();
delay(500);
lcd.setCursor(0,0);
lcd.print("CLAU ACCEPTADA");
delay(500);
lcd.clear ();
delay(500);
lcd.setCursor(0,0);
lcd.print("CLAU ACCEPTADA");
delay(500);
lcd.clear ();
delay(500);
lcd.setCursor(0,0);
lcd.print("CLAU ACCEPTADA");
delay(500);
lcd.clear ();
delay(500);
servojoel.write(90);
delay(1000);
servojoel.write(0);
delay(1000);
servojoel.attach(10);
i[0]=0;
i[1]=0;
i[2]=0;
i[3]=0;
delay(1000);
digitalWrite (green, LOW);
lcd.clear();
DateTime now = RTC.now();
lcd.setCursor(0,0);
lcd.print("DATE: ");
lcd.print(now.day(), DEC);
lcd.print("/");
lcd.print(now.month(), DEC);
lcd.print("/");
lcd.print(now.year(), DEC);
lcd.print("/");
lcd.setCursor(0,1);
lcd.print(now.hour(), DEC);
lcd.print(":");
lcd.print(now.minute(), DEC);
lcd.print(":");
lcd.print(now.second(), DEC);
delay(2000);
lcd.clear();
digitalWrite (red, HIGH);
}
else{
tone(11, 262, 3000);
lcd.setCursor(0,0);
lcd.print("Acceso declinado");
lcd.setCursor(0,1);
lcd.print("Pin incorrecto");
delay(2000);
lcd.clear();
}
cont =0;
j=0;
key=0;
}