// Library untuk sensor ultrasonik HC-SR04
#include <NewPing.h>
// Pin untuk sensor ultrasonik
#define TRIGGER_PIN 6
#define ECHO_PIN 5
#define LED_PIN 7
// Jarak maksimum yang akan diukur (dalam centimeter)
#define MAX_DISTANCE 450
// Jarak minimum untuk menyalakan lampu LED (dalam centimeter)
#define MIN_DISTANCE 0
#define MAX_LED_DISTANCE 15
// Inisialisasi sensor ultrasonik
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
// State untuk finite state machine
enum State {
LED_ON,
LED_OFF
};
State currentState;
// Fungsi untuk transisi state berdasarkan jarak
void transitionState(unsigned int distance) {
switch (currentState) {
case LED_OFF:
if (distance >= MIN_DISTANCE && distance <= MAX_LED_DISTANCE) {
currentState = LED_ON;
}
break;
case LED_ON:
if (distance > MAX_LED_DISTANCE) {
currentState = LED_OFF;
}
break;
}
}
// Fungsi untuk menjalankan aksi berdasarkan state
void performAction() {
switch (currentState) {
case LED_ON:
digitalWrite(LED_PIN, HIGH);
Serial.println("Lampu LED menyala");
break;
case LED_OFF:
digitalWrite(LED_PIN, LOW);
Serial.println("Lampu LED mati");
break;
}
}
void setup() {
// Inisialisasi pin LED sebagai output
pinMode(LED_PIN, OUTPUT);
// Inisialisasi serial monitor
Serial.begin(9600);
// Inisialisasi state awal
currentState = LED_OFF;
}
void loop() {
// Mengukur jarak menggunakan sensor ultrasonik
unsigned int distance = sonar.ping_cm();
// Cetak jarak ke serial monitor
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm");
// Transisi state berdasarkan jarak
transitionState(distance);
// Jalankan aksi berdasarkan state saat ini
performAction();
// Delay sebentar sebelum mengukur lagi
delay(500);
}