#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
String tulisan="";
String tulisan2="";
String tulisan3="";
String tulisan4="";
char tulisan5[]="STTI id gnataD tamaleS";
int i;
int j;
int index;
int total_kendaraan_masuk;
int total_kendaraan_keluar;
int total_kendaraan_didalam;
int ECHO_PIN;
int TRIG_PIN;
boolean splash;
boolean siang;
int kendaraan_masuk;
int kendaraan_keluar;
// LDR Characteristics
const float GAMMA = 0.7;
const float RL10 = 50;
// Ultrasonic pin setup
#define ECHO_PIN_in 2
#define TRIG_PIN_in 3
#define ECHO_PIN_out 8
#define TRIG_PIN_out 9
void setup() {
lcd.init();
lcd.backlight();
lcd.clear();
tulisan = "Selamat datang";
tulisan3 = " di ITTS ";
i=19;
j=0;
index=0;
splash=true;
kendaraan_masuk = false;
kendaraan_keluar = false;
total_kendaraan_masuk = 0;
total_kendaraan_keluar = 0;
total_kendaraan_didalam = 0;
}
float readDistanceCM(int TRIG_PIN, int ECHO_PIN) {
pinMode(TRIG_PIN, OUTPUT); // Clear the trigger
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
// Sets the trigger pin to HIGH state for 10 microseconds
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
pinMode(ECHO_PIN, INPUT);
// Reads the echo pin, and returns
// the sound wave travel time in microseconds
return pulseIn(ECHO_PIN, HIGH);
}
void loop() {
// Splash selamat datang di ITTS
if (splash == true){
lcd.clear();
lcd.setCursor(3, 1);
lcd.print(tulisan);
lcd.setCursor(3, 2);
lcd.print(tulisan3);
delay(1500);
splash=false;
lcd.clear();
// splash bergerak tulisan selamat datang di ITTS
for (j = 0; j<15; j++){
tulisan2 = tulisan2+tulisan[j];
tulisan4 = tulisan4+tulisan3[j];
delay(250);
lcd.setCursor(3, 1);
lcd.print(tulisan2);
lcd.setCursor(3, 2);
lcd.print(tulisan4);
}
lcd.clear();
}
else {
//Mendeteksi intensitas cahaya matahari
int analogValue = analogRead(A0);
float voltage = analogValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage /5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1/GAMMA));
if (lux > 100){
// siang
siang=true;
// mendeteksi adanya kendaraan masuk
float distance_in = readDistanceCM(TRIG_PIN_in, ECHO_PIN_in);
if(kendaraan_masuk == 0){
kendaraan_masuk = 1;
if (distance_in/58 < 100.0){
total_kendaraan_masuk++;
}
}
if(distance_in/58 >= 100.0) {
kendaraan_masuk=0;
}
} else {
// malam
siang = false;
}
// mendeteksi adanya kendaraan keluar
float distance_out = readDistanceCM(TRIG_PIN_out, ECHO_PIN_out);
if(kendaraan_keluar == 0){
kendaraan_keluar = 1;
if (distance_out/58 < 100.0){
total_kendaraan_keluar++;
}
}
if(distance_out/58 >= 100.0) {
kendaraan_keluar=0;
}
// tulisan berjalan
if (i<=41){
lcd.setCursor(0, 0);
for (int j = 0; j < 20; j++) {
int index = i - j;
if (index >= 0 && index < strlen(tulisan5)) {
lcd.print(tulisan5[index]);
} else {
lcd.print(" ");
}
}
i++;
if(i==42){
i=0;
}
}
lcd.setCursor(0,1);
lcd.print("Kondisi : ");
lcd.print(siang ? "siang" : "malam");
lcd.setCursor(0,2);
lcd.print("Kendaraan IN : ");
lcd.print(total_kendaraan_masuk);
lcd.setCursor(0,3);
lcd.print("Kendaraan OUT : ");
lcd.print(total_kendaraan_keluar);
}
}