Text Editor на Arduino
Arduino давно зарекомендовала себя как мощная платформа для создания различных электронных проектов. Сегодня мы представляем вам один из таких проектов — «Text Editor на Arduino». Этот проект демонстрирует, как можно создать простой текстовый редактор, используя матричную клавиатуру и дисплей LCD 1602. В этом руководстве мы пошагово рассмотрим создание данного устройства.
1. Необходимые компоненты
Arduino (например, Arduino Uno)
LCD дисплей 1602
Матричная клавиатура 4x4
Соединительные провода
2. Подключение
Подключение LCD дисплея:
VCC дисплея -> 5V на Arduino
GND дисплея -> GND на Arduino
SDA дисплея -> A4 на Arduino
SCL дисплея -> A5 на Arduino
Подключение матричной клавиатуры:
Строки клавиатуры -> пины 5, 4, 3, 2
Столбцы клавиатуры -> пины 6, 7, 8, 9

3. Подключение библиотек
Для работы проекта нам понадобятся специальные библиотеки. Чтобы подключить библиотеки для Arduino, выполните следующие шаги:
Скачайте библиотеки с официального сайта или из репозиториев GitHub:
Установка библиотек в Arduino IDE:
Откройте Arduino IDE → Скетч → Подключить библиотеку → Добавить .ZIP библиотеку…
Выберите скачанный .zip файл → Открыть
Внизу появится сообщение: “Библиотека добавлена. Проверьте меню ‘Подключить библиотеку’”
Библиотека теперь доступна в ваших проектах
4. Создание нового скетча
Откройте Arduino IDE и создайте новый скетч. Перепишите приведённый ниже код:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <AlashKeypadMatrix.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
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] = {5, 4, 3, 2};
byte colPins[COLS] = {6, 7, 8, 9};
AlashKeypadMatrix keypad = AlashKeypadMatrix(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
const char* buttonChars[10] = {
" ", "1", "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"
};
char textBuffer[33];
int textIndex = 0;
char lastKey = 0;
int charIndex = 0;
unsigned long lastKeyPressTime = 0;
const unsigned long debounceDelay = 500;
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Keypad Test");
delay(2000);
lcd.clear();
memset(textBuffer, 0, sizeof(textBuffer));
}
void loop() {
char key = keypad.getKey();
if (key) {
if (key == '#') {
memset(textBuffer, 0, sizeof(textBuffer));
textIndex = 0;
textBuffer[0] = '\0';
lastKey = 0;
lcd.clear();
} else if (key == '*') {
if (textIndex > 0) {
textBuffer[textIndex] = '\0';
textIndex--;
updateLCD();
} else if (textIndex == 0) {
lastKey = 0;
lcd.clear();
}
} else if (key >= '0' && key <= '9') {
if (key == lastKey && millis() - lastKeyPressTime < debounceDelay) {
charIndex = (charIndex + 1) % strlen(buttonChars[key - '0']);
} else {
if (lastKey != 0 && textIndex < sizeof(textBuffer) - 1) {
textIndex++;
}
charIndex = 0;
}
lastKey = key;
lastKeyPressTime = millis();
textBuffer[textIndex] = buttonChars[key - '0'][charIndex];
updateLCD();
}
}
}
void updateLCD() {
lcd.clear();
lcd.setCursor(0, 0);
for (int i = 0; i < 16 && i < textIndex; i++) {
lcd.print(textBuffer[i]);
}
if (textIndex >= 16) {
lcd.setCursor(0, 1);
for (int i = 16; i < 32 && i < textIndex; i++) {
lcd.print(textBuffer[i]);
}
}
lcd.setCursor(textIndex % 16, textIndex / 16);
lcd.print(textBuffer[textIndex]);
}
5. Заключение
Проект «Text Editor на Arduino» открывает множество возможностей для дальнейшего развития и добавления новых функций. Например:
Добавить режимы переключения между вводом цифр и букв
Реализовать поддержку специальных символов
Создать более сложные меню для управления настройками
Возможности ограничены только вашим воображением. Этот проект может стать отличной базой для создания пользовательских интерфейсов на Arduino и поможет улучшить навыки в электронике и программировании.