#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
// Konfigurasi pin
#define PIR_PIN 27
#define BUZZER_PIN 26
#define LED_PIN 25
#define BUTTON_PIN 14
// Konfigurasi LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C default
bool alarmEnabled = true;
void setup() {
// Konfigurasi pin
pinMode(PIR_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
// Inisialisasi Serial
Serial.begin(115200);
Serial.println("Sensor Anti-Maling Aktif");
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Anti-Maling");
lcd.setCursor(0, 1);
lcd.print("Connecting...");
delay(2000);
// Inisialisasi WiFi
WiFi.begin("Wokwi-GUEST", "", 6 );
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Connected!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("WiFi Connected");
lcd.setCursor(0, 1);
lcd.print(WiFi.localIP().toString());
delay(3000); // Tampilkan IP Address selama 3 detik
}
void loop() {
// Cek tombol ditekan
if (digitalRead(BUTTON_PIN) == LOW) { // Tombol ditekan (logika invers karena pull-up)
delay(200); // Debounce untuk menghindari noise tombol
alarmEnabled = !alarmEnabled; // Toggle status alarm
if (alarmEnabled) {
Serial.println("Alarm Diaktifkan");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alarm: ON");
} else {
Serial.println("Alarm Dinonaktifkan");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alarm: OFF");
}
}
// Cek gerakan jika alarm aktif
if (alarmEnabled) {
int motionDetected = digitalRead(PIR_PIN);
if (motionDetected) {
Serial.println("Gerakan terdeteksi! Alarm Aktif!");
lcd.setCursor(0, 1);
lcd.print("Motion Detected!");
tone(BUZZER_PIN, 1000); // Buzzer bersuara dengan frekuensi 1000 Hz
digitalWrite(LED_PIN, HIGH);
delay(1000); // Alarm berbunyi selama 1 detik
} else {
noTone(BUZZER_PIN); // Hentikan suara buzzer
digitalWrite(LED_PIN, LOW);
lcd.setCursor(0, 1);
lcd.print("No Motion "); // Hapus teks lama
}
} else {
// Pastikan buzzer dan LED mati jika alarm nonaktif
noTone(BUZZER_PIN); // Matikan suara buzzer
digitalWrite(LED_PIN, LOW);
lcd.setCursor(0, 1);
lcd.print("Alarm OFF ");
}
delay(200); // Delay untuk mengurangi noise pada sensor PIR
}