#include <Wire.h>
#include <Key.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h> // Подключаем библиотеку Servo
LiquidCrystal_I2C lcd(0x27, 16, 2);
const byte ROWS = 4; // число строк клавиатуры
const byte COLS = 3; // число столбцов клавиатуры
char hexaKeys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {8, 7, 6, 5}; // к каким выводам подключаем управление строками
byte colPins[COLS] = {4, 3, 2}; // к каким выводам подключаем управление столбцами
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
Servo myServo; // Создаем объект для управления серводвигателем
int servoPin = 10; // Пин, к которому подключен серводвигатель
String inputNumber = ""; // Переменная для хранения ввода
void setup() {
Serial.begin(9600);
lcd.init(); // Инициализируем экран
lcd.backlight();
myServo.attach(servoPin); // Привязываем серводвигатель к указанному пину
myServo.write(0); // Устанавливаем начальное положение серводвигателя (0 градусов)
}
void loop() {
lcd.setCursor(0, 0); // устанавливаем курсор на начало первой строки
lcd.print("Press any key!");
char customKey = customKeypad.getKey();
if (customKey) {
Serial.println(customKey);
// Проверка нажатия клавиши сброса #
if (customKey == '#') {
inputNumber = ""; // Сбрасываем ввод
lcd.setCursor(0, 1); // устанавливаем курсор на начало второй строки
lcd.print(" "); // Очищаем строку дисплея
return; // Выходим из функции loop
}
// Проверка нажатия клавиши *
if (customKey == '*') {
if (inputNumber.length() > 0) { // Проверяем, что есть введенные данные
int angle = inputNumber.toInt(); // Преобразуем строку в целое число
if (angle >= 0 && angle <= 180) { // Проверяем диапазон угла
myServo.write(angle); // Устанавливаем угол серводвигателя
lcd.setCursor(0, 1); // устанавливаем курсор на начало второй строки
lcd.print("ygol: ");
lcd.print(angle); // Отображаем угол на дисплее
}
}
return; // Выходим из функции loop
}
// Добавляем нажатую клавишу к числу, если длина меньше 3 символов
if (inputNumber.length() < 3) {
inputNumber += customKey;
}
lcd.setCursor(0, 1); // устанавливаем курсор на начало второй строки
lcd.print(inputNumber); // Отображаем текущее число
// Если введено 3 символа, можно установить угол
if (inputNumber.length() == 3) {
int angle = inputNumber.toInt(); // Преобразуем строку в целое число
if (angle >= 0 && angle <= 180) { // Проверяем диапазон угла
myServo.write(angle); // Устанавливаем угол серводвигателя
}
inputNumber = "#"; // Сбрасываем ввод после установки угла
}
}
}