// Definisi pin
const int tombol1Pin = 2;
const int tombol2Pin = 3;
const int tombol3Pin = 4;
const int buzzerPin = 9;
const int ledPin = 13;
// Variabel status
bool statusAlarm = false;
// Timer untuk batas waktu 1 menit
unsigned long startTime = 0;
const unsigned long timeLimit = 60000; // 1 menit dalam milidetik
// Timer untuk mengendalikan nyala/mati buzzer dan LED
unsigned long previousMillis = 0;
const unsigned long buzzerOnTime = 1000; // Buzzer nyala selama 1 detik
const unsigned long buzzerOffTime = 500; // Buzzer mati selama 0,5 detik
// Variabel untuk melacak status buzzer dan LED
bool buzzerState = false;
bool ledState = false;
bool resetalarm = true;
void setup() {
Serial.begin(9600);
// Inisialisasi pin
pinMode(tombol1Pin, INPUT_PULLUP);
pinMode(tombol2Pin, INPUT_PULLUP);
pinMode(tombol3Pin, INPUT_PULLUP);
pinMode(buzzerPin, OUTPUT);
pinMode(ledPin, OUTPUT);
// Mulai dengan mematikan buzzer dan LED
digitalWrite(buzzerPin, LOW);
digitalWrite(ledPin, LOW);
}
void loop() {
// Baca status tombol
bool sb1 = digitalRead(tombol1Pin);
bool sb2 = digitalRead(tombol2Pin);
bool sb3 = digitalRead(tombol3Pin);
unsigned long currentMillis = millis();
// Jika tombol 1 ditekan, set status alarm ke true
if (sb3 == 0){
resetalarm = false;
}
if (sb1 == 0) {
statusAlarm = true;
// Mulai timer jika belum dimulai
if (startTime == 0) {
startTime = currentMillis;
}
}
if (resetalarm == false){
// Jika status alarm true dan belum lebih dari 1 menit
if (statusAlarm && (currentMillis - startTime < timeLimit)) {
// Mengendalikan nyala/mati buzzer dan LED tanpa delay
if (buzzerState) {
if (currentMillis - previousMillis >= buzzerOnTime) {
buzzerState = false;
previousMillis = currentMillis;
//digitalWrite(buzzerPin, LOW);
//digitalWrite(ledPin, LOW);
}
} else {
if (currentMillis - previousMillis >= buzzerOffTime) {
buzzerState = true;
previousMillis = currentMillis;
//digitalWrite(buzzerPin, HIGH);
//digitalWrite(ledPin, HIGH);
Serial.println("buzzer on");
}
}
} else {
// Jika sudah lebih dari 1 menit, buzzer dan LED mati
digitalWrite(buzzerPin, LOW);
digitalWrite(ledPin, LOW);
Serial.println("alarm di matikan karna sudha lewat 20 menit");
buzzerState = false;
}}
// Reset timer dan status alarm jika tombol 2 ditekan
if (sb2 == 0) {
startTime = 0;
statusAlarm = false;
resetalarm = true;
}
//Serial.println(statusAlarm);
delay(10);
}