//lcd
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
//servo
#include <Servo.h>
Servo servo;
//led & button
#define red 13
#define yellow 12
#define green 11
#define btn 7
//sensor
#define trig 2
#define echo 3
bool mobil = false;
bool mobil1 = false;
bool cmobil = false;
int mobilcount = 0;
bool clearstate = false;
int intervalclear = 700;
unsigned long timesave = 0;
void setup() {
// put your setup code here, to run once:
lcd.init();
lcd.backlight();
servo.attach(4);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(red, OUTPUT);
pinMode(yellow, OUTPUT);
pinMode(green, OUTPUT);
pinMode(btn, INPUT);
lcd.home();
lcd.print("simulasi portal");
delay(1000);
lcd.clear();
servo.write(0);
}
float j() {
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
int durasi = pulseIn(echo, HIGH);
return durasi / 58.475;
}
void loop() {
// put your main code here, to run repeatedly:
unsigned long time = millis();
if (time - timesave > intervalclear) {
clearstate = !clearstate;
if (clearstate) {
lcd.clear();
}
timesave = time;
}
int button = digitalRead(btn);
int jarak = j();
if (jarak < 100) {
mobil = true;
mobil1 = true;
} else {
mobil = false;
}
if (!mobil) {
lcd.setCursor(0, 0);
lcd.print("Toko Jamal");
digitalWrite(red, HIGH);
digitalWrite(yellow, LOW);
digitalWrite(green, LOW);
cmobil = false;
servo.write(90);
}
if (mobil) {
digitalWrite(yellow, HIGH);
digitalWrite(red, LOW);
lcd.setCursor(0, 0);
lcd.print("Selamat Datang");
lcd.setCursor(0, 1);
lcd.print("Tekan Tombol <=");
if (button == LOW) {
while (mobil1) {
if (!cmobil) {
mobilcount++;
cmobil = true;
}
unsigned long time = millis();
if (time - timesave > intervalclear) {
clearstate = !clearstate;
if (clearstate) {
lcd.clear();
}
timesave = time;
}
servo.write(180);
digitalWrite(green, HIGH);
digitalWrite(yellow, LOW);
digitalWrite(red, LOW);
lcd.setCursor(0, 0);
lcd.print("Silahkan Jalan");
lcd.setCursor(0, 1);
lcd.print("Ticket : ");
lcd.print(mobilcount);
lcd.print("#");
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
int durasi = pulseIn(echo, HIGH);
if (durasi / 58.475 > 100) {
mobil1 = false;
}
}
}
}
}