const byte ROW_NUM = 4;
const byte COLUMN_NUM = 4;
char keys[ROW_NUM][COLUMN_NUM] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte pin_rows[ROW_NUM] = {9, 8, 7, 6};
byte pin_column[COLUMN_NUM] = {5, 4, 3, 2};
const int lockServoPin = 10;
const int greenLED = 12;
const int redLED = 11;
const int buzzer = 13;
const String correctPassword = "1234";
String inputPassword = "";
void setup() {
pinMode(greenLED, OUTPUT);
pinMode(redLED, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(lockServoPin, OUTPUT);
for (byte i = 0; i < ROW_NUM; i++) {
pinMode(pin_rows[i], OUTPUT);
digitalWrite(pin_rows[i], HIGH);
}
for (byte j = 0; j < COLUMN_NUM; j++) {
pinMode(pin_column[j], INPUT_PULLUP);
}
digitalWrite(greenLED, LOW);
digitalWrite(redLED, LOW);
Serial.begin(9600);
}
void loop() {
char key = getKey();
if (key) {
if (key == '#') {
if (inputPassword == correctPassword) {
unlock();
} else {
lock();
}
inputPassword = "";
} else if (key == '*') {
inputPassword = "";
} else {
inputPassword += key;
}
Serial.println(inputPassword);
}
}
char getKey() {
for (byte row = 0; row < ROW_NUM; row++) {
digitalWrite(pin_rows[row], LOW);
for (byte col = 0; col < COLUMN_NUM; col++) {
if (digitalRead(pin_column[col]) == LOW) {
delay(200);
while (digitalRead(pin_column[col]) == LOW);
digitalWrite(pin_rows[row], HIGH);
return keys[row][col];
}
}
digitalWrite(pin_rows[row], HIGH);
}
return 0;
}
void unlock() {
digitalWrite(greenLED, HIGH);
digitalWrite(redLED, LOW);
tone(buzzer, 1000, 500);
analogWrite(lockServoPin, 128);
delay(1000);
}
void lock() {
digitalWrite(greenLED, LOW);
digitalWrite(redLED, HIGH);
tone(buzzer, 500, 500);
analogWrite(lockServoPin, 255);
delay(1000);
noTone(buzzer);
}