#include <DHT.h>
#include <Wire.h>
int merah = 4;
int kuning = 16;
int hijau = 17;
int Button = 15;
int Buzzer = 21;
#define DHTPIN 23
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
bool sistemAktif = false;
bool lastButtonState = HIGH;
void setup() {
Serial.begin(9600);
dht.begin();
pinMode(hijau, OUTPUT);
pinMode(kuning, OUTPUT);
pinMode(merah, OUTPUT);
// Gunakan internal pull-up agar tombol stabil
pinMode(Button, INPUT_PULLUP);
pinMode(Buzzer, OUTPUT);
digitalWrite(hijau, LOW);
digitalWrite(kuning, LOW);
digitalWrite(merah, LOW);
noTone(Buzzer);
Serial.println("Sistem siap. Tekan tombol untuk mengaktifkan.");
}
void loop() {
bool buttonState = digitalRead(Button);
// Deteksi tombol ditekan (HIGH → LOW)
if (lastButtonState == HIGH && buttonState == LOW) {
delay(50); // debounce
if (digitalRead(Button) == LOW) {
sistemAktif = !sistemAktif; // toggle sistem
Serial.print("Sistem: ");
Serial.println(sistemAktif ? "Aktif" : "Nonaktif");
digitalWrite(hijau, LOW);
digitalWrite(kuning, LOW);
digitalWrite(merah, LOW);
noTone(Buzzer);
}
}
lastButtonState = buttonState;
if (!sistemAktif) return; // sistem mati, hentikan loop
delay(2000);
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Gagal membaca sensor DHT!");
noTone(Buzzer);
return;
}
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.print(" *C, Kelembapan: ");
Serial.print(humidity);
Serial.println(" %");
// Logika LED + buzzer
if (temperature < 25) {
digitalWrite(hijau, HIGH);
digitalWrite(kuning, LOW);
digitalWrite(merah, LOW);
noTone(Buzzer);
}
else if (temperature >= 25 && temperature <= 30) {
digitalWrite(hijau, LOW);
digitalWrite(kuning, HIGH);
digitalWrite(merah, LOW);
tone(Buzzer, 450);
}
else if (temperature > 30) {
digitalWrite(hijau, LOW);
digitalWrite(kuning, LOW);
digitalWrite(merah, HIGH);
tone(Buzzer, 1500);
}
}