// Подключаем библиотеку для работы с сервоприводом #include // Подключаем библиотеку для работы с кнопкой #include // Подключаем библиотеку для работы со светодиодной матрицей #include // Создаём объект сервопривода Servo servo; // Создаём объект кнопки на пине A2 TroykaButton button(A2); // Создаём объект матрицы TroykaLedMatrix matrix; // Даём понятное имя пину 5 с сервоприводом constexpr uint8_t SERVO_PIN = 5; // Задаём минимальный и максимальный угол поворота сервопривода constexpr uint8_t MIN_ANGLE = 0; constexpr uint8_t MAX_ANGLE = 180; // Создаём переменную для хранения состояние замка bool lockState; // Создаём иконку закрытого замка в двоичной системе BIN const uint8_t lockClosed[] { 0b00110000, 0b01001000, 0b01001000, 0b11111100, 0b10000100, 0b10000100, 0b10000100, 0b11111100 }; // Создаём иконку открытого замка в двоичной системе BIN const uint8_t lockOpen[] { 0b00000110, 0b00001001, 0b00001001, 0b11111100, 0b10000100, 0b10000100, 0b10000100, 0b11111100 }; void setup() { // Подключаем сервомотор servo.attach(SERVO_PIN); // Инициализируем матрицу matrix.begin(); // Очищаем матрицу matrix.clear(); // Устанавливаем состояние открытого замка lockState = true; // Отображаем на матрице иконку открытого замка matrix.drawBitmap(lockOpen); // Устанавливаем вал сервопривода в минимальный угол servo.write(MIN_ANGLE); } void loop() { // Считываем состояние с кнопки button.read(); // Определяем нажатие кнопки if (button.justPressed()) { // Если замок открыт if (lockState) { // Устанавливаем вал сервопривода в максимальный угол servo.write(MAX_ANGLE); // Отображаем на матрице иконку закрытого замка matrix.drawBitmap(lockClosed); } else { // Устанавливаем вал сервопривода в минимальный угол servo.write(MIN_ANGLE); // Отображаем на матрице иконку открытого замка matrix.drawBitmap(lockOpen); } // Инвертируем переменную состояние замка lockState = !lockState; } }