#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <Servo.h>
#define echoPin 1
#define trigPin 11
int maximumRange = 308;
int minimumRange = 00;
Servo myServo;
long duration, distance;
LiquidCrystal_I2C lcd(0x27,20,4);
const byte ROWS = 4;
const byte COLS = 4;
char Keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = { 9, 8, 7, 6 };
byte colPins[COLS] = { 5, 4, 3, 2 };
Keypad customKeypad = Keypad( makeKeymap(Keys), rowPins, colPins, ROWS, COLS); //Masukkan info keypad pada library
char customKey;
int number = 0;
int password = 1122;
int redPin = 13;
int greenPin = 12;
bool flag;
void setup() {
Serial.begin(9600);
lcd.init ();
lcd.setBacklight(HIGH);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
myServo.attach(11);
myServo.write(90);
flag = true;
}
const int sensorPin = A0; // Pin untuk sensor
void loop() {
// Baca data dari sensor
int sensorValue = analogRead(sensorPin);
// Proses data dari sensor
if (sensorValue > 500) {
// Jika sensor mendeteksi suatu kondisi, lakukan tindakan tertentu
lcd.setCursor(0, 1);
Serial.print(sensorValue);
digitalWrite(redPin, HIGH);
} else {
// Jika sensor tidak mendeteksi suatu kondisi, lakukan tindakan lain
lcd.setCursor(0, 1);
Serial.print(sensorValue);
digitalWrite(redPin, LOW);
lcd.setCursor(0,0);
lcd.print("Input Password");
customKey = customKeypad.getKey();
switch(customKey){
case '0' ... '9':
lcd.setCursor(0,1);
number = number * 10 + (customKey - '0');
lcd.print(number);
break;
//------ jika input '#' maka cek passwoord-----//
case '#':
if(number == password && flag==true){
lcd.setCursor(0,1);
lcd.print("Access Accepted ");
digitalWrite(redPin, LOW);
digitalWrite(greenPin, HIGH);
number = 0;
delay(500);
lcd.clear();
digitalWrite(greenPin, LOW);
myServo.write(0);
flag = false;
while(flag==false) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
//perhitungan untuk dijadikan jarak
duration = pulseIn(echoPin, HIGH);
distance = duration/58.2;
lcd.setCursor(0,1);
lcd.print("Door: Open");
lcd.setCursor(0,1);
lcd.print(distance);
myServo.write(0);
if(distance>100); {
delay(2000);
myServo.write(90);
lcd.setCursor(0,1);
lcd.print("Door: close");
lcd.setCursor(0,1);
lcd.print(distance);
lcd.clear();
flag=true;
break;
}
}
}
else{
lcd.setCursor(0,1);
lcd.print("Invalid Password");
digitalWrite(redPin, HIGH);
digitalWrite(greenPin, LOW);
number = 0;
delay(500);
number = 0;
lcd.clear();
digitalWrite(redPin, LOW);
}
break;
case '*':
number = 0;
lcd.clear();
break;
}
}
}