#include <LiquidCrystal.h>
#include <HCSR04UltrasonicDistanceSensor.h>
// Inisialisasi LCD: (RS, EN, D4, D5, D6, D7)
LiquidCrystal lcd(PB8, PB9, PA9, PA10, PA11, PA12);
// Pin trigger & echo sensor HC-SR04
int triggerPins[8] = {PA0, PA2, PA4, PA6, PB0, PB10, PB12, PB14};
int echoPins[8] = {PA1, PA3, PA5, PA7, PB1, PB11, PB13, PB15};
// Fungsi membaca jarak dari HC-SR04 (dalam cm)
long readDistanceCM(int triggerPin, int echoPin) {
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
long duration = pulseIn(echoPin, HIGH, 30000); // Timeout 30 ms
long distance = duration * 0.034 / 2;
return distance; // cm
}
void setup() {
// Inisialisasi pin sensor
for (int i = 0; i < 8; i++) {
pinMode(triggerPins[i], OUTPUT);
pinMode(echoPins[i], INPUT);
}
// Inisialisasi LCD
lcd.begin(16, 2);
lcd.print("Mengukur...");
delay(2000);
lcd.clear();
}
void loop() {
// --- Baca panjang (depan-belakang) ---
long depan = readDistanceCM(triggerPins[6], echoPins[6]);
long belakang = readDistanceCM(triggerPins[7], echoPins[7]);
long panjang = abs(depan - belakang);
// --- Baca lebar (kanan-kiri) ---
long kanan1 = readDistanceCM(triggerPins[0], echoPins[0]);
long kanan2 = readDistanceCM(triggerPins[1], echoPins[1]);
long kiri1 = readDistanceCM(triggerPins[2], echoPins[2]);
long kiri2 = readDistanceCM(triggerPins[3], echoPins[3]);
long kanan = (kanan1 + kanan2) / 2;
long kiri = (kiri1 + kiri2) / 2;
long lebar = abs(kanan - kiri);
// --- Baca tinggi (dari atas) ---
long atas1 = readDistanceCM(triggerPins[4], echoPins[4]);
long atas2 = readDistanceCM(triggerPins[5], echoPins[5]);
long tinggi = (atas1 + atas2) / 2;
// Hitung volume dimensi truk (cm^3)
long dimensi = panjang * lebar * tinggi;
// Tampilkan hasil
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Dim: " + String(dimensi) + "cm3");
lcd.setCursor(0, 1);
if (dimensi > 200000) {
lcd.print("Status: TIDAK");
delay(1000);
lcd.setCursor(0, 1);
lcd.print("LOLOS ");
} else {
lcd.print("Status: LOLOS");
}
delay(3000); // jeda antar pembacaan
}