const int TRIG_PIN = 6;
const int ECHO_PIN = 7;
const int LED_PIN = 3;
const int DISTANCE_THRESHOLD_1 = 50;
const int DISTANCE_THRESHOLD_2 = 150;
const int DISTANCE_THRESHOLD_3 = 250;
const int DISTANCE_THRESHOLD_4 = 350;
float duration_us, distance_cm;
unsigned long previousMillis = 0;
int blinkInterval = 1000;
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
unsigned long currentMillis = millis();
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration_us = pulseIn(ECHO_PIN, HIGH);
distance_cm = 0.017 * duration_us;
if (distance_cm <= DISTANCE_THRESHOLD_1) {
blinkInterval = 200; // Kurang dari atau sama dengan 50 cm, berkedip selama 0.2 detik
} else if (distance_cm <= DISTANCE_THRESHOLD_2) {
blinkInterval = 1000; // 50 cm hingga 150 cm, berkedip selama 1 detik
} else if (distance_cm <= DISTANCE_THRESHOLD_3) {
blinkInterval = 1500; // 150 cm hingga 250 cm, berkedip selama 1.5 detik
} else if (distance_cm <= DISTANCE_THRESHOLD_4) {
blinkInterval = 2000; // 250 cm hingga 350 cm, berkedip selama 2 detik
} else {
blinkInterval = 0; // Jarak di atas 350 cm, LED dimatikan
}
if (blinkInterval > 0) {
if (currentMillis - previousMillis >= blinkInterval) {
previousMillis = currentMillis;
if (digitalRead(LED_PIN) == LOW) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
}
} else {
digitalWrite(LED_PIN, LOW);
}
Serial.print("distance: ");
Serial.print(distance_cm);
Serial.println(" cm");
delay(100);
}