commit 66a493d0ad376612390b944525a4d274938de2a4 Author: Kelvin Maulana Shofani Date: Sun Aug 10 14:15:40 2025 +0700 Upload files to "/" diff --git a/smartdoorV4.ino b/smartdoorV4.ino new file mode 100644 index 0000000..cf1e003 --- /dev/null +++ b/smartdoorV4.ino @@ -0,0 +1,90 @@ +// Deklarasi pin komponen +#define Solenoid 12 +#define ldr 8 +int Buzzer = 4; +int GreenLed = 6; +int RedLed = 7; + +// Variabel untuk menyimpan bitstream dari cahaya +String polaPassword = ""; + +void setup() { + Serial.begin(9600); + + pinMode(ldr, INPUT_PULLUP); // LDR membaca cahaya + pinMode(Solenoid, OUTPUT); // Kunci pintu + pinMode(GreenLed, OUTPUT); // Indikator terbuka + pinMode(RedLed, OUTPUT); // Indikator terkunci + pinMode(Buzzer, OUTPUT); // Buzzer + + // Status awal: pintu terkunci + digitalWrite(RedLed, HIGH); + digitalWrite(GreenLed, LOW); + digitalWrite(Solenoid, LOW); +} + +void OpenDoor() { + digitalWrite(Solenoid, HIGH); // Aktifkan solenoid (buka kunci) + tone(Buzzer, 500); // Buzzer menyala + digitalWrite(RedLed, LOW); // Matikan indikator terkunci + digitalWrite(GreenLed, HIGH); // Nyalakan indikator terbuka + + delay(2000); // Biarkan pintu terbuka 2 detik + + digitalWrite(Solenoid, LOW); // Kunci kembali + noTone(Buzzer); // Matikan buzzer + digitalWrite(RedLed, HIGH); // Tampilkan indikator terkunci + digitalWrite(GreenLed, LOW); // Matikan indikator terbuka +} + +void loop() { + // Tunggu cahaya masuk dari flashlight + if (digitalRead(ldr) == LOW) { + Serial.println("Cahaya terdeteksi - menunggu start bit..."); + + // Deteksi start bit: cahaya nyala minimal 500ms + int durasiStart = 0; + while (digitalRead(ldr) == LOW) { + delay(10); + durasiStart += 10; + if (durasiStart > 1000) break; // Batas atas (jika terlalu lama) + } + + // Rentang valid start bit (sekitar 500 ms) + if (durasiStart >= 400 && durasiStart <= 600) { + Serial.println("Start bit valid, mulai membaca pola..."); + + polaPassword = ""; + delay(100); // jeda pendek setelah start bit + + // Baca 4 bit, 1 bit per 200ms + for (int i = 0; i < 4; i++) { + int bitVal = (digitalRead(ldr) == LOW) ? 1 : 0; // Cahaya terang = 1, gelap = 0 + polaPassword += String(bitVal); + Serial.print("Bit ke-"); Serial.print(i); Serial.print(": "); + Serial.println(bitVal); + delay(200); // Jeda antar bit + } + + Serial.print("Pola diterima: "); + Serial.println(polaPassword); + + // Verifikasi pola + if (polaPassword == "0001") { + Serial.println("Pola cocok: AKSES USER 1"); + OpenDoor(); + } else if (polaPassword == "1010") { + Serial.println("Pola cocok: AKSES USER 2"); + OpenDoor(); + } else { + Serial.println("Pola tidak dikenali. Akses ditolak."); + } + + polaPassword = ""; + delay(500); // jeda sebelum membaca pola baru + + } else { + Serial.println("Start bit tidak valid. Abaikan."); + } + } +}