#include <Wire.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo myservo;
#define trigpin1 8
#define echoPin1 9
long duration1;
int distance1 = 0;
const int trigPin = 4;
const int echoPin = 3;
const int buzzer = 11;
long duration;
int distance = 0;
void setup() {
myservo.attach(10); // ini yang terhubung dengan servo (kabel orange)
pinMode(trigpin1, OUTPUT); // untuk setting trigpin sebagai output
pinMode(echoPin1, INPUT); // untuk setting echopin sebagai input
// Serial.begin(9600); // untuk setting kecepatan pengiriman serial motor
pinMode(trigPin, OUTPUT); // untuk membuat trigPin sebagai output atau keluaran
pinMode(echoPin, INPUT); // untuk membuat echoPin sbgi INPUT
pinMode(buzzer, OUTPUT); //
Serial.begin(9600); // untuk mesetting serial komunikasi
lcd.init();
lcd.backlight();
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2; // konversi ke Centi Meter
// ini untuk memunculkan kata kata terkait jarak yang di peroleh
// sensor ultrasonic
Serial.print("jarak sensor ultrasonic 1 : ");
Serial.print(distance);
Serial.println(" cm");
// untuk LCD menampilkan kata kata
if (distance >= 25) {
lcd.setCursor(0,0);
lcd.print(" Tong Sampah ");
lcd.setCursor(0,1);
lcd.print("----Kosong-----");
// digitalWrite(buzzer, HIGH);
// delay(100);
// digitalWrite(buzzer, LOW);
// delay(500);
} else if (distance >= 8 && distance <= 24)
{
// digitalWrite(buzzer, LOW);
lcd.setCursor(0,0);
lcd.print(" Tong Sampah ");
lcd.setCursor(0,1);
lcd.print("--Hampir Penuh--");
} else if (distance >= 0 && distance <= 7)
{
lcd.setCursor(0,0);
lcd.print(" Tong Sampah ");
lcd.setCursor(0,1);
lcd.print("-----Penuh-----");
digitalWrite(trigpin1, LOW);
digitalWrite(trigpin1, LOW);
digitalWrite(echoPin1, LOW);
}
// untuk program servo bergerak
digitalWrite(trigpin1, HIGH); // untuk mengaktifkan sensor ultrasonik
delayMicroseconds(10); // selama 10 mikrosecond akan menyala
digitalWrite(trigpin1, LOW); // untuk setting sensor agar nonaktif dan mati
duration1 = pulseIn(echoPin1, HIGH); // untuk membaca rentan waktu trigpin dari
// HIGH samapai dia LOW
distance1 = duration1 * 0.034 / 2;
if (distance <=7 )
{
myservo.write(0);
}
else if (distance1 < 30) {
Serial.println(distance1);
myservo.write(115); // motor servo bergerak 180 derajat
// delay(2000); // akan ada jeda 2000 mikrosecond
// myservo.write(0); // bergerak lagi ke posisi awal
// delay(1000);
}
else {
myservo.write(0);
}
}