#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#include <math.h>
#include <ESP32Servo.h>
#include <IRremote.h>
#define buzzer 25
#define led_red 26
#define led_green 27
const int servoPin = 13;
int RECV_PIN = 33;
IRrecv irrecv(RECV_PIN);
decode_results results;
int state=0;
int pos = 90;
int counter = 0;
Servo servo;
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int BARIS = 4;
const int KOLOM = 4;
char keys[BARIS][KOLOM] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'}
};
byte rowPins[BARIS] = {14, 12, 19, 18};
byte colPins[KOLOM] = {5, 4, 2, 15};
//Keypad customKeypad = Keypad(makeKeymap(Keys), rowPins, colPins, ROWS, COLS); //Masukkan info keypad pada library
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, BARIS, KOLOM);
char Key;
int number = 0;
char password [4]= {'1','2','3','4'};
int line=1;
int col=10;
char userPW [4];
/*
lcd.setCursor(0, 1);
lcd.clear();
*/
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
lcd.init();
lcd.setBacklight(HIGH);
pinMode(buzzer, OUTPUT);
pinMode(led_red, OUTPUT);
pinMode(led_green, OUTPUT);
digitalWrite(led_red, HIGH);
digitalWrite(led_green, LOW);
Serial.println("ok1");
tone(buzzer, 400); // RE
delay(250);
noTone(buzzer); // Stop sound
delay(250);
tone(buzzer, 400); // RE
delay(250);
noTone(buzzer); // Stop sound
//delay(250);
servo.attach(servoPin, 500, 2400);
servo.write(90);
}
int flag = 0;
void loop()
{
lcd.setCursor(0, 0);
lcd.print("Eenter Password");
Key = keypad.getKey();
if (Key)
{
userPW[counter++] = Key;
lcd.setCursor(2,10);
lcd.print(Key);
Serial.print(Key);
delay(250);
if (counter==4)
{
counter=0;
if (check_password (userPW,password))
{
digitalWrite(led_red, LOW);
digitalWrite(led_green, HIGH);
tone(buzzer, 500); // RE
delay(700);
noTone(buzzer); // Stop sound
if(pos<180)
{
for (pos =90; pos <= 180; pos = pos + 1)
{
servo.write(pos);
delay(15);
}
}
}
else
{
digitalWrite(led_red, HIGH);
digitalWrite(led_green, LOW);
tone(buzzer, 1000); // RE
digitalWrite(led_red, LOW);
delay(350);
noTone(buzzer); // Stop sound
digitalWrite(led_red, HIGH);
delay(250);
tone(buzzer, 1000); // RE
digitalWrite(led_red, LOW);
delay(350);
noTone(buzzer); // Stop sound
digitalWrite(led_red, HIGH);
delay(250);
tone(buzzer, 1000); // RE
digitalWrite(led_red, LOW);
delay(350);
noTone(buzzer); // Stop sound
digitalWrite(led_red, HIGH);
if(pos>=180) // check if gate is already opemed
{
for (pos =180; pos >= 90; pos =pos- 1)
{
servo.write(pos);
delay(15);
}
}
}
}
}
if (irrecv.decode(&results)){
Serial.println(results.value,HEX);
irrecv.resume();
if (results.value == 0x6B7832FF){
digitalWrite(led_red, HIGH);
digitalWrite(led_green, LOW);
if(pos>=180) // check if gate is already opemed
{
for (pos =180; pos >= 90; pos =pos- 1)
{
servo.write(pos);
delay(15);
}
}
Serial.println("CLOSE!");
}
if (results.value == 0x3D9AE3F7)
{
digitalWrite(led_red, LOW);
digitalWrite(led_green, HIGH);
if(pos<180)
{
for (pos =90; pos <= 180; pos = pos + 1)
{
servo.write(pos);
delay(15);
}
}
}
}
}
//3D9AE3F7
//31C5DD7B
boolean check_password(char userPW[], char password []){
for (int i=0; i<4; i++){
if (userPW[i]!=password[i])
return false;
}
return true;
}