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

Схема подключения матричной клавиатуры на Arduino

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 и поможет улучшить навыки в электронике и программировании.