#define MQ2_ANA A1
#define LED 8
#define r1 7
#define BUTTON 13 // Pin untuk push button
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcdku(0x27, 16, 2);
const int Buzzer = 6;
int LEDM = 2;
int LEDH = 4;
int nilaimq = 186;
bool isActivated = false; // Status aktivasi
void setup() {
Serial.begin(9600);
pinMode(MQ2_ANA, INPUT);
pinMode(LEDM, OUTPUT);
pinMode(LEDH, OUTPUT);
pinMode(Buzzer, OUTPUT);
pinMode(r1, OUTPUT);
pinMode(LED, OUTPUT);
pinMode(BUTTON, INPUT_PULLUP); // Push button sebagai input dengan pull-up resistor
lcdku.init();
lcdku.backlight();
lcdku.setCursor(0,0);
lcdku.print("DETEKSI KUALITAS UDARA");
lcdku.setCursor(1,0);
lcdku.print("By: Kel 4");
delay(1000);
lcdku.clear();
}
void loop() {
// Membaca status tombol
bool buttonState = digitalRead(BUTTON);
if (buttonState == LOW) { // Tombol ditekan
isActivated = !isActivated; // Toggle status aktivasi
delay(250); // Debouncing sederhana
}
if (isActivated) {
int analogSensor = analogRead(MQ2_ANA);
Serial.print("pin A1: ");
Serial.println(analogSensor);
lcdku.setCursor(0, 0);
lcdku.print("Kadar Asap = ");
lcdku.setCursor(12, 0);
lcdku.print(analogSensor);
delay(1000);
if (analogSensor >= nilaimq) {
digitalWrite(LEDM, HIGH);
digitalWrite(LEDH, LOW);
tone(Buzzer, 1000);
delay(100);
digitalWrite(r1, HIGH);
scrollText("Bahaya Asap Rokok", 0);
} else {
digitalWrite(LEDM, LOW);
digitalWrite(LEDH, HIGH);
digitalWrite(r1, LOW);
noTone(Buzzer);
delay(500);
scrollText("Udara Ruangan Aman", 0);
}
delay(1000);
lcdku.clear();
} else {
// Ketika tidak aktif, matikan semua perangkat
digitalWrite(LEDM, LOW);
digitalWrite(LEDH, LOW);
digitalWrite(r1, LOW);
noTone(Buzzer);
lcdku.setCursor(0, 0);
lcdku.print("Monitoring Off");
delay(1000);
lcdku.clear();
}
}
void scrollText(String message, int row) {
int len = message.length();
lcdku.setCursor(0, row);
lcdku.print(message);
delay(500);
for (int positionCounter = 0; positionCounter < len - 16; positionCounter++) {
lcdku.scrollDisplayLeft();
delay(250);
}
}