Каталог
Text Editor на Arduino

Text Editor на Arduino

Arduino давно зарекомендовала себя как мощная платформа для создания различных электронных проектов. Сегодня мы представляем вам один из таких проектов - "Text Editor на Arduino". Этот проект демонстрирует, как можно создать простой текстовый редактор, используя матричную клавиатуру и дисплей LCD 1602. В этом руководстве мы пошагово рассмотрим создание данного устройства.

Необходимые компоненты:

Подключение:

  1. Подключение LCD дисплея:

    • VCC дисплея -> 5V на Arduino.
    • GND дисплея -> GND на Arduino.
    • SDA дисплея -> A4 на Arduino.
    • SCL дисплея -> A5 на Arduino.
  2. Подключение матричной клавиатуры:

    • Подключите пины строк клавиатуры к пинам 5, 4, 3, 2 на Arduino.
    • Подключите пины столбцов клавиатуры к пинам 6, 7, 8, 9 на Arduino.

Подключение библиотек:

Для работы проекта нам понадобятся специальные библиотеки. Чтобы подключить библиотеки для Arduino, выполните следующие шаги:

  1. Скачайте библиотеки с официального сайта или из репозитория GitHub:

  2. Установка библиотек в Arduino IDE:

    • Откройте программу Arduino IDE и перейдите в меню «Скетч» → «Подключить библиотеку» → «Добавить.ZIP библиотеку…».
    • В открывшемся окне выберите скачанный .zip файл и нажмите «Открыть».
    • Снизу Arduino IDE появится сообщение “Библиотека добавлена. Проверьте меню “Подключить библиотеку” ”.
    • Теперь библиотека будет доступна для использования в ваших проектах.
  3. Создание нового скетча:

    • Откройте Arduino IDE и создайте новый скетч.
    • Перепишите приведенный ниже код в новый скетч:
#include <Wire.h> // Подключение библиотеки для работы с I2C
#include <LiquidCrystal_I2C.h> // Подключение библиотеки для работы с LCD через I2C
#include <AlashKeypadMatrix.h> // Подключение библиотеки для работы с матричной клавиатурой
// Настройка адреса I2C для LCD дисплея 1602 (по умолчанию 0x27)
LiquidCrystal_I2C lcd(0x27, 16, 2); // Инициализация объекта lcd с адресом 0x27 и размером дисплея 16x2
// Определение размеров матричной клавиатуры
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); // Создание объекта keypad
// Определение символов для каждой кнопки
const char* buttonChars[10] = {
  " ",     // Символы для кнопки 0
  "1",     // Символы для кнопки 1
  "ABC",   // Символы для кнопки 2
  "DEF",   // Символы для кнопки 3
  "GHI",   // Символы для кнопки 4
  "JKL",   // Символы для кнопки 5
  "MNO",   // Символы для кнопки 6
  "PQRS",  // Символы для кнопки 7
  "TUV",   // Символы для кнопки 8
  "WXYZ"   // Символы для кнопки 9
};
char textBuffer[33]; // Буфер для хранения текста (2 строки по 16 символов + 1 для завершающего нуля)
int textIndex = 0;   // Текущий индекс для записи символов
char lastKey = 0;    // Последняя нажатая клавиша
int charIndex = 0;   // Индекс символа для переключения
unsigned long lastKeyPressTime = 0; // Время последнего нажатия клавиши
const unsigned long debounceDelay = 500; // Задержка для устранения дребезга клавиш
void setup() {
  // Инициализация LCD дисплея
  lcd.init(); // Инициализация дисплея
  lcd.backlight(); // Включение подсветки дисплея
  lcd.setCursor(0, 0); // Установка курсора в начало первой строки
  lcd.print("Keypad Test"); // Вывод текста на дисплей
  delay(2000); // Задержка на 2 секунды
  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]); // Вывод текущего символа
}

Заключение

Проект "Text Editor на Arduino" открывает множество возможностей для дальнейшего развития и добавления новых функций. Например, вы можете добавить режимы переключения между вводом цифр и букв, реализовать поддержку специальных символов, а также создать более сложные меню для управления различными настройками редактора. Возможности ограничены только вашим воображением и потребностями. Этот проект может стать отличной базой для создания различных пользовательских интерфейсов на основе Arduino, улучшая навыки работы с микроконтроллерами и расширяя ваши знания в области программирования и электроники.

Комментарии
Отзывов еще никто не оставлял
Предзаказ
Предзаказ успешно отправлен!
Имя *
Телефон *
Добавить в корзину
Название товара
100 тг
1 шт.
Перейти в корзину
Обратный звонок
Запрос успешно отправлен!
Имя *
Телефон *
Заказ в один клик