#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
#define TRIG 7
#define ECHO 6
#define red 2
#define yel 3
#define gre 4
//HCsr Code
long baca(int pinTrig, int pinEcho) {
pinMode(pinTrig, OUTPUT);
digitalWrite(pinTrig, LOW);
digitalWrite(pinTrig, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrig, LOW);
pinMode(pinTrig, INPUT);
return pulseIn(pinEcho, HIGH);
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
//lcd init
lcd.init();
lcd.backlight();
//lcd static print
lcd.setCursor(3, 0);
lcd.println("HC-SR Monitor");
lcd.setCursor(0, 2);
lcd.print("Jarak(cm): ");
pinMode(red, OUTPUT);
pinMode(yel, OUTPUT);
pinMode(gre, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
int cm = 0;
cm = (0.03446 * baca(TRIG, ECHO)) / 2;
Serial.print(cm);
Serial.println(" cm");
//lcd Print
lcd.setCursor(11, 2);
lcd.print(cm);
/* Menggunakan " " untuk mengatasi flickering, daripada menggunakan lcd.clear() */
lcd.print(" ");
//bar led
if (cm > 16 ) { //green nyala
digitalWrite(red, LOW);
digitalWrite(yel, LOW);
digitalWrite(gre, HIGH);
} else if (cm >= 5 && cm <= 15) { //yellow nyala
digitalWrite(red, LOW);
digitalWrite(yel, HIGH);
digitalWrite(gre, LOW);
} else if (cm < 5) { //red nyala
digitalWrite(red, HIGH);
digitalWrite(yel, LOW);
digitalWrite(gre, LOW);
}
delay(500);
}