// Nama: Anugerah Fakhriza Reswara
// Kelas: A2
// NIM: 2509106025
// Deklarasi
#include <Servo.h>
const int button = 2;
const int ledMerah = 12;
const int ledHijau = 13;
const int segmentA = 4;
const int segmentB = 5;
const int segmentC = 6;
const int segmentD = 7;
const int segmentE = 8;
const int segmentF = 10;
const int segmentG = 9;
Servo servo1;
Servo servo2;
void setup() {
Serial.begin(9600);
pinMode(button, INPUT_PULLUP);
pinMode(ledMerah, OUTPUT);
pinMode(ledHijau, OUTPUT);
pinMode(segmentA, OUTPUT);
pinMode(segmentB, OUTPUT);
pinMode(segmentC, OUTPUT);
pinMode(segmentD, OUTPUT);
pinMode(segmentE, OUTPUT);
pinMode(segmentF, OUTPUT);
pinMode(segmentG, OUTPUT);
servo1.attach(3);
servo2.attach(11);
// Posisi awal: tertutup
servo1.write(90);
servo2.write(90);
digitalWrite(ledMerah, HIGH);
digitalWrite(ledHijau, LOW);
}
void loop() {
static bool sistemSiap = true;
static bool prosesAktif = false;
static unsigned long waktuMulai = 0;
static int mode = 0; // Ada 3 mode: 0 = idle, 1 = input password, 2 = akses diberikan
static String inputPassword = "";
if (sistemSiap) {
Serial.println("Smart Lock Siap. Tekan tombol untuk memulai.");
sistemSiap = false;
}
// Cek kondisi tombol
if (digitalRead(button) == LOW) {
delay(50);
if (digitalRead(button) == LOW) {
mode = 1;
prosesAktif = true;
waktuMulai = millis();
inputPassword = "";
Serial.println("Masukkan password:");
while (digitalRead(button) == LOW); // tunggu dilepas
}
}
if (prosesAktif) {
unsigned long waktuSekarang = millis();
unsigned long selisih = waktuSekarang - waktuMulai;
if (mode == 1) {
// Hitung mundur 5 detik untuk input
int detik = 5 - (selisih / 1000);
if (detik < 0) detik = 0;
// Matikan semua segment dulu (Common Cathode: LOW = mati)
digitalWrite(segmentA, LOW);
digitalWrite(segmentB, LOW);
digitalWrite(segmentC, LOW);
digitalWrite(segmentD, LOW);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, LOW);
digitalWrite(segmentG, LOW);
if (detik == 5) { // Angka 5
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, LOW);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, HIGH);
digitalWrite(segmentG, HIGH);
} else if (detik == 4) { // Angka 4
digitalWrite(segmentA, LOW);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, LOW);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, HIGH);
digitalWrite(segmentG, HIGH);
} else if (detik == 3) { // Angka 3
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, LOW);
digitalWrite(segmentG, HIGH);
} else if (detik == 2) { // Angka 2
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, LOW);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, HIGH);
digitalWrite(segmentF, LOW);
digitalWrite(segmentG, HIGH);
} else if (detik == 1) { // Angka 1
digitalWrite(segmentA, LOW);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, LOW);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, LOW);
digitalWrite(segmentG, LOW);
} else {
// Waktu habis → semua mati
// Sudah dimatikan di atas
Serial.println("Waktu habis.");
prosesAktif = false;
mode = 0;
sistemSiap = true;
return;
}
// Baca input serial
while (Serial.available()) {
char c = Serial.read();
if (c == '\n' || c == '\r') {
if (inputPassword == "025") {
Serial.println("Password benar!");
mode = 2;
waktuMulai = millis();
digitalWrite(ledMerah, LOW);
digitalWrite(ledHijau, HIGH);
servo1.write(180);
servo2.write(0);
} else {
Serial.println("Password salah!");
prosesAktif = false;
mode = 0;
sistemSiap = true;
// Matikan semua segment
digitalWrite(segmentA, LOW);
digitalWrite(segmentB, LOW);
digitalWrite(segmentC, LOW);
digitalWrite(segmentD, LOW);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, LOW);
digitalWrite(segmentG, LOW);
return;
}
} else {
inputPassword += c;
}
}
if (selisih >= 5000) {
// Matikan semua segment
digitalWrite(segmentA, LOW);
digitalWrite(segmentB, LOW);
digitalWrite(segmentC, LOW);
digitalWrite(segmentD, LOW);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, LOW);
digitalWrite(segmentG, LOW);
Serial.println("Waktu habis.");
prosesAktif = false;
mode = 0;
sistemSiap = true;
return;
}
}
else if (mode == 2) {
// Hitung mundur 9 detik untuk akses
int detik = 9 - (selisih / 1000);
if (detik < 0) detik = 0;
// Matikan semua segment dulu
digitalWrite(segmentA, LOW);
digitalWrite(segmentB, LOW);
digitalWrite(segmentC, LOW);
digitalWrite(segmentD, LOW);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, LOW);
digitalWrite(segmentG, LOW);
if (detik == 9) { // Angka 9
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, HIGH);
digitalWrite(segmentG, HIGH);
} else if (detik == 8) { // Angka 8
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, HIGH);
digitalWrite(segmentF, HIGH);
digitalWrite(segmentG, HIGH);
} else if (detik == 7) { // Angka 7
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, LOW);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, LOW);
digitalWrite(segmentG, LOW);
} else if (detik == 6) { // Angka 6
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, LOW);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, HIGH);
digitalWrite(segmentF, HIGH);
digitalWrite(segmentG, HIGH);
} else if (detik == 5) { // Angka 5
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, LOW);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, HIGH);
digitalWrite(segmentG, HIGH);
} else if (detik == 4) { // Angka 4
digitalWrite(segmentA, LOW);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, LOW);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, HIGH);
digitalWrite(segmentG, HIGH);
} else if (detik == 3) { // Angka 3
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, LOW);
digitalWrite(segmentG, HIGH);
} else if (detik == 2) { // Angka 2
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, LOW);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, HIGH);
digitalWrite(segmentF, LOW);
digitalWrite(segmentG, HIGH);
} else if (detik == 1) { // Angka 1
digitalWrite(segmentA, LOW);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, LOW);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, LOW);
digitalWrite(segmentG, LOW);
} else {
// Waktu akses habis, kembali dikunci
digitalWrite(segmentA, LOW); digitalWrite(segmentB, LOW); digitalWrite(segmentC, LOW);
digitalWrite(segmentD, LOW); digitalWrite(segmentE, LOW); digitalWrite(segmentF, LOW);
digitalWrite(segmentG, LOW);
digitalWrite(ledMerah, HIGH);
digitalWrite(ledHijau, LOW);
servo1.write(90);
servo2.write(90);
prosesAktif = false;
mode = 0;
sistemSiap = true;
return;
}
if (selisih >= 9000) {
digitalWrite(segmentA, LOW); digitalWrite(segmentB, LOW); digitalWrite(segmentC, LOW);
digitalWrite(segmentD, LOW); digitalWrite(segmentE, LOW); digitalWrite(segmentF, LOW);
digitalWrite(segmentG, LOW);
digitalWrite(ledMerah, HIGH);
digitalWrite(ledHijau, LOW);
servo1.write(90);
servo2.write(90);
prosesAktif = false;
mode = 0;
sistemSiap = true;
return;
}
}
}
}