73

LCD1602 и русский шрифт. Библиотека для Arduino IDE

Демонстрация шрифта из библиотеки BigRus1602

Как опознать дисплей со встроенными кириллическими буквами?

Дисплей LCD1602 популярен у разработчиков из-за дешевизны и простоты использования. Единовременно на экране отображается 2 строки по 16 символов в каждой. Существуют дисплеи с встроенной кириллицей. Опознать дисплей с кириллицей можно по буквам CT или CP в конце заголовка, например, WH1602B-YYH-CT. На таком дисплее русские буквы выводятся без привлечения излишних библиотек "из коробки". Вот только цена в разы выше чем на обычный англо-китайский экран. Тем не менее есть способ заставить эти дешёвые дисплеи печатать кириллические буквы.



Русифицируем дисплей


В качестве решения проблемы предлагаю использовать библиотеку BigRus1602. Это не русификация дисплея в полном смысле, но путем ухищрений открывает возможность использования всех русских букв.


Есть два основых варианта использования библиотеки:

1. Вывод текста в режиме бегущей строки

2. Для вывода часов или таймера в виде ЧЧ:ММ


Особенности библиотеки BigRus1602 :

- Каждая буква имеет высоту в две строки, что делает её заметной с дальнего расстояния.

- 2 встроенных шрифта: «строгий» и «мягкий».

- Имеет гибкую настройку, чтобы оставить память контроллеру на решение других задач.

- Переключение режимов: бегущая строка | статичный текст.

- Подходит для работы с модулем LCD KeypadShield для Arduino Uno.


Подключаем библиотеку

Для начала необходимо добавить библиотеку в среду Arduino IDE.

Если вы не делали этого раньше, просто следуйте инструкции, это не сложно:

1. Запускаем программу Arduino IDE.

2. В меню сверху находим Скетч->Подключить библиотеку->Добавить .ZIP библиотеку...

3. В открывшемся окне указываем путь к архиву с библиотекой на вашем компьютере.

LCD1602 и русский шрифт. Библиотека для Arduino IDE Arduino, Lcd дисплей, Гифка, Видео, YouTube, Длиннопост

Минимальный код для вывода кириллических букв.

Библиотека принимает данные типа byte, int, long и массив char[].

// В этом примере текст прокручивается по экрану слева направо:
#include "BigRus1602.h"
char text[] = " АЛХИМИЯ"; // обязательно заглавные буквы
//Пины для подключения LCD Keypad Shield
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
BigRus1602 lcdRus(&lcd);
void setup()
{
lcdRus.begin();
lcdRus.scrollText(true); // включаем скроллинг текста
lcdRus.print(text); // выводим текст на экран единожды
}
void loop()
{
}

Скроллинг текста по экрану

//Scroll speed
#include "BigRus1602.h"
char textSlow[] = " МЕДЛЕННО";
char textFast[] = " БЫСТРО";
//Пины для подключения LCD Keypad Shield
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
BigRus1602 lcdRus(&lcd);
void setup()
{
lcdRus.begin();
}
void loop()
{
//второй аргумент - временной интервал между сдвигами, вводить его не обязательно(по умолчанию 1000 мс)
lcdRus.scrollText(true, 500);
lcdRus.print(textFast);
lcdRus.scrollText(true, 1000);
lcdRus.print(textSlow);
}

Объединение нескольких слов для вывода на экран

В этом примере показано как объединить несколько слов вместе и вывести их на экран при помощи функции .getCarret().

//Sequence of words
#include "BigRus1602.h"
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
BigRus1602 lcdRus(&lcd);
void setup()
{
lcdRus.begin();
for (uint8_t i = 0; i <= 100; i++) //имитируем загрузку
{
lcdRus.print(i);
lcd.setCursor(lcdRus.getCarret(), 1);
lcd.print("% ");
delay(50);
}
delay(3000);
}
void loop()
{
lcd.clear();
for (uint8_t min = 0; min < 30; min++)
{
for (uint8_t sec = 0; sec < 60; sec++)
{
lcdRus.print(min);
lcdRus.print(":", lcdRus.getCarret() -1);
lcdRus.print(sec, lcdRus.getCarret() -1);
//заполним "хвост" строки пробелами чтобы избежать появления артефактов от старого текста. Можно заменить на lcd.clear()
lcdRus.print(" ", lcdRus.getCarret() -1);
delay(1000);
}
}
}

Чтение данных последовательного порта и вывод на ЖК-экран

//SerialRead
#include "BigRus1602.h"
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
BigRus1602 lcdRus(&lcd);
void setup()
{
lcd.begin(16, 2);
lcdRus.begin();
Serial.begin(9600);
lcdRus.scrollText(true);
}
void loop()
{
char serialText[30];
if (Serial.available())
{
//чем больше символов в строке, тем больше нужно времени чтобы принять ее
delay(100);
int availableText = Serial.available();
for (int i = 0; i < availableText; i++)
{
serialText[i] = Serial.read();
serialText[i + 1] = '\0';
}
lcdRus.print(serialText);
}
}

Символы доступные в BigRus1602

Чтобы увидеть все доступные в библиотеке символы, просто загрузите демонстрационный код:

//Simple print
//Демонстрация всех символов
#include "BigRus1602.h"
//библиотека позволяет выводить данные типа byte, int, long и char[]
char text[] = " АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ 1234567890 !?-.,:;";
//Пины для подключения LCD Keypad Shield
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
BigRus1602 lcdRus(&lcd); //указатель &lcd обязателен
void setup()
{
lcdRus.begin();
lcdRus.print("ЛСД");
delay(3000);
lcdRus.scrollText(true);
}
void loop()
{
lcdRus.print(text);
delay(3000);
}

Смена шрифта

В библиотеке доступно два шрифта: Strong и Smooth. Чтобы выбрать один из них откройте файл BigRus1602Font.h. Путь к этому файлу выглядит примерно так C:\Users\Admin\Documents\Arduino\libraries\BigRus1602\ В указанном файле нужно раскомментированую одну из строк. Остальные строки должны быть закомментированы.

Если нужно сэкономить память контроллера, оставьте раскомментированым только строку BC_ONLY_NUMBER

//#define BC_STRONG_FONT //угловатые буквы и цифры
#defineBC_SMOOTH_FONT //скругленные буквы и цифры
//#define BC_ONLY_NUMBER //только цифры (для экономии памяти)

Шрифты для дисплея соданы при помощи утилиты для генерации символов ЖК-экран. Подробнее об этой утилите смотрите здесь.


Смотрите ролик с процессом создания шрифта и разбор представленного кода

Arduino & Pi

1.5K постов20.8K подписчиков

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу