// --- DEFINISI PIN ---
#define SWITCH_PIN PA0
#define IR_SENSOR_PIN PA1
#define LED_GREEN PB0
#define LED_RED PB1
#define BUZZER PB2
// --- VARIABEL TIMER ---
unsigned long startTime = 0;
bool detecting = false;
void setup() {
// Input
pinMode(SWITCH_PIN, INPUT); // pakai pull eksternal
pinMode(IR_SENSOR_PIN, INPUT); // pakai pull-down eksternal
// Output
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_RED, OUTPUT);
pinMode(BUZZER, OUTPUT);
// Default OFF
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_RED, LOW);
digitalWrite(BUZZER, LOW);
}
void loop() {
// === 1. CEK SWITCH ===
// Switch aktif saat HIGH (sesuai referensi kode Anda)
if (digitalRead(SWITCH_PIN) == HIGH) {
// === 2. CEK IR SENSOR ===
// LOW = mendeteksi benda
if (digitalRead(IR_SENSOR_PIN) == LOW) {
// Jika baru mulai deteksi
if (!detecting) {
detecting = true;
startTime = millis();
}
// Hitung durasi deteksi
if (millis() - startTime >= 15000) {
// === KONDISI ALARM ===
digitalWrite(LED_RED, HIGH);
digitalWrite(LED_GREEN, LOW);
digitalWrite(BUZZER, HIGH);
}
} else {
// === TIDAK MENDETEKSI ===
detecting = false;
digitalWrite(LED_RED, LOW);
digitalWrite(LED_GREEN, HIGH);
digitalWrite(BUZZER, LOW);
}
} else {
// === SWITCH OFF ===
detecting = false;
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_RED, LOW);
digitalWrite(BUZZER, LOW);
}
delay(10); // ringan, tidak mengganggu timing utama
}Loading
st-nucleo-c031c6
st-nucleo-c031c6