#include <Keypad.h>
#include <LiquidCrystal.h>
#include <Servo.h>
// Настройки для LCD
LiquidCrystal lcd(0,1,2,3,4,5);
// Настройки для клавиатуры
const byte ROWS = 4; // Число строк
const byte COLS = 4; // Число столбцов
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; // Подключение строк
byte colPins[COLS] = {10, A0, A1, A2}; // Подключение столбцов
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Настройки для серводвигателя
Servo myServo;
int pos = 0; // Позиция серво
// Правильный пароль
const String correctPassword = "1234";
String inputPassword;
void setup() {
lcd.begin(16, 2); // Инициализация LCD
myServo.attach(13); // Подключение серво к пину 13
myServo.write(0); // Установка начальной позиции серво
lcd.print("Enter password:");
}
void loop() {
char key = keypad.getKey();
if (key) {
// Проверка нажатой клавиши
if (key == '#') { // Если нажата клавиша '#'
if (inputPassword == correctPassword) {
lcd.clear();
lcd.print("OK");
unlockSafe();
} else {
lcd.clear();
lcd.print("LOCK");
}
inputPassword = ""; // Сброс пароля
delay(2000); // Задержка для чтения сообщения
lcd.clear();
lcd.print("Enter password:");
} else if (key == '*') { // Если нажата клавиша '*'
inputPassword = ""; // Сброс пароля
lcd.clear();
lcd.print("Enter password:");
} else {
inputPassword += key; // Добавление введенной цифры к паролю
lcd.setCursor(0, 1);
lcd.print(inputPassword); // Отображение введенного пароля
}
}
}
void unlockSafe() {
for (pos = 0; pos <= 90; pos += 1) { // Поворачиваем серво на 90 градусов
myServo.write(pos);
delay(15); // Задержка для плавного движения
}
delay(5000); // Держим сейф открытым 5 секунд
for (pos = 90; pos >= 0; pos -= 1) { // Возвращаем серво в начальное положение
myServo.write(pos);
delay(15);
}
}