#include <HX711.h>
#define TRIG_PIN 2
#define ECHO_PIN 3
#define LOAD_CELL_DOUT_PIN A1
#define LOAD_CELL_SCK_PIN A0
#define PROXIMITY_SENSOR_PIN 4
#define LED_AMAN_PIN 5
#define LED_PERINGATAN_PIN 6
#define LED_BAHAYA_PIN 7
HX711 scale;
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(PROXIMITY_SENSOR_PIN, INPUT);
pinMode(LED_AMAN_PIN, OUTPUT);
pinMode(LED_PERINGATAN_PIN, OUTPUT);
pinMode(LED_BAHAYA_PIN, OUTPUT);
scale.begin(LOAD_CELL_DOUT_PIN, LOAD_CELL_SCK_PIN);
}
void loop() {
float jarak = ukurJarak();
float berat = ukurBerat();
bool adaObjek = deteksiObjek();
if (jarak > 30 && berat < 2 && !adaObjek) {
indikatorAman();
} else if ((jarak <= 30 && jarak > 15) || (berat > 2 && berat < 4) || adaObjek) {
indikatorPeringatan();
} else {
indikatorBahaya();
}
delay(500);
}
float ukurJarak() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
float duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2;
return distance;
}
float ukurBerat() {
float berat = scale.get_units();
return berat;
}
bool deteksiObjek() {
return digitalRead(PROXIMITY_SENSOR_PIN) == HIGH;
}
void indikatorAman() {
digitalWrite(LED_AMAN_PIN, HIGH);
digitalWrite(LED_PERINGATAN_PIN, LOW);
digitalWrite(LED_BAHAYA_PIN, LOW);
}
void indikatorPeringatan() {
digitalWrite(LED_AMAN_PIN, LOW);
digitalWrite(LED_PERINGATAN_PIN, HIGH);
digitalWrite(LED_BAHAYA_PIN, LOW);
}
void indikatorBahaya() {
digitalWrite(LED_AMAN_PIN, LOW);
digitalWrite(LED_PERINGATAN_PIN, LOW);
digitalWrite(LED_BAHAYA_PIN, HIGH);
}