#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Address 0x27, 16 chars, 2 lines
Servo myservo;
const int trigPin = 8;
const int echoPin = 7;
const int ledGreen = 3;
const int ledYellow = 4;
const int ledRed = 5;
const int servoPin = 10;
long duration;
int distance;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledGreen, OUTPUT);
pinMode(ledYellow, OUTPUT);
pinMode(ledRed, OUTPUT);
myservo.attach(servoPin);
lcd.begin(16, 2);
lcd.backlight();
Serial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
lcd.setCursor(0, 0);
lcd.print("Ketinggian: ");
lcd.print(distance);
lcd.print(" cm");
if (distance >= 20 && distance <= 100) {
digitalWrite(ledGreen, HIGH);
digitalWrite(ledYellow, LOW);
digitalWrite(ledRed, LOW);
myservo.write(10);
lcd.setCursor(0, 1);
lcd.print("NORMAL ");
}
else if (distance >= 100 && distance <= 200) {
digitalWrite(ledGreen, LOW);
digitalWrite(ledYellow, HIGH);
digitalWrite(ledRed, LOW);
myservo.write(50);
lcd.setCursor(0, 1);
lcd.print("MODERATE ");
}
else if (distance > 200) {
digitalWrite(ledGreen, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledRed, HIGH);
myservo.write(100);
lcd.setCursor(0, 1);
lcd.print("E-Tech");
}
else {
digitalWrite(ledGreen, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledRed, LOW);
myservo.write(0);
lcd.setCursor(0, 1);
lcd.print("_____________ ");
}
delay(500);
}