
Интернет-магазин «Неглупый Дом»
Клавиатура 4×4 принимает цифровой код, при совпадении с эталонным Arduino на пару секунд открывает реле замка, при ошибке — коротко пищит зуммером.
Мембранная клавиатура 4×4 устроена как матрица: 16 кнопок собраны на пересечении 4 строк и 4 столбцов, поэтому наружу выведено всего 8 проводов вместо 16. Библиотека Keypad поочерёдно подаёт сигнал на каждую строку и проверяет, на каком столбце он "появился" — так определяется, какая именно кнопка была нажата, без необходимости в отдельном пине на каждую кнопку.
Логика замка простая: Arduino накапливает нажатые цифры в строку `input`, пока не нажата `#` (подтверждение) — тогда строка сравнивается с эталонным кодом. При совпадении реле на несколько секунд встаёт в положение "открыто" (в реальном замке к этим контактам подключается электромеханическая защёлка или соленоид), при несовпадении — короткий сигнал зуммером об ошибке.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, что указаны ниже — сориентируйтесь по названиям контактов на своей плате (обычно они промаркированы прямо на шлейфе клавиатуры).
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить.
#include <Keypad.h> // библиотека для опроса матричной клавиатуры
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] = {5, 4, 3, 2}; // пины столбцов клавиатуры
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
const String correctCode = "1234"; // эталонный код — обязательно смените перед использованием!
String input = ""; // сюда накапливаются нажатые цифры
const int relayPin = 10;
const int buzzerPin = 11;
void setup() {
pinMode(relayPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
char key = keypad.getKey(); // опрашиваем клавиатуру на нажатие
if (key) {
Serial.println(key); // дублируем нажатую клавишу в монитор порта
if (key == '#') { // подтверждение ввода кода
if (input == correctCode) {
Serial.println("Код верный, открываю");
digitalWrite(relayPin, HIGH);
delay(2000); // держим замок открытым 2 секунды
digitalWrite(relayPin, LOW);
} else {
Serial.println("Неверный код");
digitalWrite(buzzerPin, HIGH);
delay(500);
digitalWrite(buzzerPin, LOW);
}
input = ""; // сбрасываем ввод после проверки
} else if (key == '*') { // сброс введённых цифр вручную
input = "";
} else {
input += key; // добавляем нажатую цифру к вводу
}
}
}
Библиотека Keypad (автор Mark Stanley/Alexander Brevig) ставится через Менеджер библиотек Arduino IDE. Клавиша `#` подтверждает ввод, `*` сбрасывает набранный код.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 3 товара сразу в корзину: 237 ₽ 213 ₽ (экономия 24 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.