#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi LCD: Alamat 0x27 dan ukuran 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Definisi Pin
const int pinGas = 34;
const int pinApi = 35;
const int pinBuzzer = 25;
const int pinLED = 26;
// Ambang Batas (Threshold)
int batasGas = 1200;
int batasApi = 500;
void setup() {
Serial.begin(115200);
// Setup LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Sistem Proteksi");
lcd.setCursor(0, 1);
lcd.print("Memanaskan...");
pinMode(pinGas, INPUT);
pinMode(pinApi, INPUT);
pinMode(pinBuzzer, OUTPUT);
pinMode(pinLED, OUTPUT);
delay(2000);
lcd.clear();
}
void loop() {
int nilaiGas = analogRead(pinGas);
int nilaiApi = analogRead(pinApi);
// Monitoring Serial
Serial.print("Gas: "); Serial.print(nilaiGas);
Serial.print(" | Api: "); Serial.println(nilaiApi);
// Tampilan Standar LCD
lcd.setCursor(0, 0);
lcd.print("G:"); lcd.print(nilaiGas);
lcd.print(" A:"); lcd.print(nilaiApi);
lcd.print(" "); // Menghapus sisa angka sebelumnya
if (nilaiGas > batasGas || nilaiApi < batasApi) {
// Tampilan Bahaya di LCD
lcd.setCursor(0, 1);
lcd.print("!!! BAHAYA !!! ");
digitalWrite(pinLED, HIGH);
// Nada Alarm Sirine (Naik-Turun)
for (int hz = 600; hz <= 1200; hz += 20) {
tone(pinBuzzer, hz);
delay(5);
}
for (int hz = 1200; hz >= 600; hz -= 20) {
tone(pinBuzzer, hz);
delay(5);
}
} else {
// Tampilan Aman di LCD
lcd.setCursor(0, 1);
lcd.print("Status: Aman ");
digitalWrite(pinLED, LOW);
noTone(pinBuzzer);
}
delay(200);
}