Крупный русский шрифт на ЖК дисплее LCD1602

Technomagic
Technomagic аватар
Offline
Зарегистрирован: 13.01.2022

Приветствую всех ардуинофобов и ардуинофилов)

LCD1602 - один из самых популярных дисплеев из-за его дешевизны и простоты использования. Неприятность заключается в том, что нельзя выводить абы какие символы на дисплей, можно только те что уже вшиты в него на заводе. Обычно встречаются дисплеи с вшитыми китайскими и английскими буквами и цифрами. Существуют дисплеи с вшитой кириллицей (обозначаются маркировкой CT или CP), но их сложнее найти, а стоят они дороже. Этим постом предлагаем решение проблемы.

Создатели дисплея любезно позаботились о нас и оставили 8 пустых ячеек в дисплее куда можно записать свои символы. Вот в эти 8 ячеек мы и засунули 33 буквы русского алфавита, а за одно и переписали цифры и знаки препинания, чтобы всё было в едином стиле.

Демонстрацию шрифта смотрите здесь https://youtu.be/9fWbCSm7FrE

или здесь https://static.wixstatic.com/media/22baca_e1608d16f7db4b36a9f4485659c53e29~mv2.gif

Качаем библиотеку BigRus1602 и добавляем ее в Arduino IDE. 

Прежде чем начинать кодировать расскажу об ограничениях и возможностях библиотеки. Тестирование проходило на LCD Keypad Shield. С экранами работающими по I2c скорее всего не заработает. Просто не было I2c дисплея под рукой чтобы допилить код под него.

Основное отличие от других библиотек и экрана со вшитыми кириилическими символами - очень крупный шрифт. Библиотека принимает данные типа byteintlong и массив char[].

Доступные для вывода на экран символы: АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ 1234567890 !?-.,:;

Есть 2 встроенных шрифта: Strong и Smooth

Библиотека BigRus1602 работает с опорой на стандартную библиотеку liquid crystal. По умолчанию она уже встроена в Arduino IDE, делать ничего не нужно. 

Минимальный пример

01// В этом примере текст прокручивается по экрану слева направо
02#include "BigRus1602.h"
03 
04char text[] = " АЛХИМИЯ"// обязательно заглавные буквы
05 
06//Пины для подключения LCD Keypad Shield
07const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
08LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
09BigRus1602 lcdRus(&lcd);
10 
11void setup()
12{
13  lcdRus.begin();
14   
15  lcdRus.scrollText(true);  // включаем скроллинг текста
16  lcdRus.print(text);       // выводим текст на экран единожды
17}
18 
19void loop()
20{
21}

Изменяем скорость скроллинга

01//Scroll speed
02#include "BigRus1602.h"
03 
04char textSlow[] = " МЕДЛЕННО";
05char textFast[] = " БЫСТРО";
06 
07//Пины для подключения LCD Keypad Shield
08const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
09LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
10BigRus1602 lcdRus(&lcd);
11 
12void setup()
13{
14  lcdRus.begin();
15}
16 
17void loop()
18{
19  //второй аргумент - временной интервал между сдвигами, вводить его не обязательно(по умолчанию 1000 мс)
20  lcdRus.scrollText(true, 500);
21  lcdRus.print(textFast);
22 
23  lcdRus.scrollText(true, 1000);
24  lcdRus.print(textSlow);
25}

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

01//Sequence of words
02#include "BigRus1602.h"
03 
04const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
05LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
06BigRus1602 lcdRus(&lcd);
07 
08void setup()
09{
10  lcdRus.begin();
11 
12  for (uint8_t i = 0; i <= 100; i++)  //имитируем загрузку
13  {
14    lcdRus.print(i);
15    lcd.setCursor(lcdRus.getCarret(), 1);
16    lcd.print("% ");
17    delay(50);
18  }
19  delay(3000);
20}
21 
22void loop()
23{
24  lcd.clear();
25  for (uint8_t min = 0; min < 30; min++)
26  {
27    for (uint8_t sec = 0; sec < 60; sec++)
28    {
29      lcdRus.print(min);
30      lcdRus.print(":", lcdRus.getCarret() -1);
31      lcdRus.print(sec, lcdRus.getCarret() -1);
32 
33      //заполним "хвост" строки пробелами чтобы избежать появления артефактов от старого текста. Можно заменить на lcd.clear()
34      lcdRus.print("    ", lcdRus.getCarret() -1);
35 
36      delay(1000);
37    }
38  }
39}

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

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

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

Больше примеров есть в папке Example.

Библиотека написана программистом - любителем для экономии вашего времени.

Посмотрите ролик о том, как проходило создание библиотеки.

https://youtu.be/uDgAmcOfXY4

sadman41
Offline
Зарегистрирован: 19.10.2016

Это бы надо в Проекты перетащить.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Я сильно сомневаюсь в том, что кому то может понадобится вывод трёх букв жирным шрифтом на дисплей.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

четырёх! ))

b707
Offline
Зарегистрирован: 26.05.2017

Technomagic - куда Катю дели? Почему ее нет в видео? она ваш главный ресурс для успеха на Ютубе, без нее тут и смотреть не на что :)

А вот зато с ней я готов слушать о чем угодно - о шрифтах, о бурях на марсе, да хоть о чистке септиков :)

lilik
Offline
Зарегистрирован: 19.10.2017

Kakmyc пишет:
Я сильно сомневаюсь в том, что кому то может понадобится вывод трёх букв жирным шрифтом на дисплей.

:-)

https://www.instructables.com/BIG-Alpha-numeric-DISPLAY/

Даёшь "многодисплейные экраны" - много и разных!

Technomagic
Technomagic аватар
Offline
Зарегистрирован: 13.01.2022

Есть два варианта использования:

1. В Режиме бегущей строки

2. Режим часов или таймера в виде ЧЧ:ММ, такого экрана как раз достатчно

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Technomagic пишет:

Есть два варианта использования:

1. В Режиме бегущей строки

2. Режим часов или таймера в виде ЧЧ:ММ, такого экрана как раз достатчно

Для ЧМ:ММ есть BigNumbers.h

А бегущая строка из 4 знаков , это бред.
К тому же она будет не плавно , а сразу на 1/4 экрана шагать.
Работа в никуда одним словом.

Technomagic
Technomagic аватар
Offline
Зарегистрирован: 13.01.2022

b707 пишет:

Technomagic - куда Катю дели? Почему ее нет в видео? она ваш главный ресурс для успеха на Ютубе, без нее тут и смотреть не на что :)

А вот зато с ней я готов слушать о чем угодно - о шрифтах, о бурях на марсе, да хоть о чистке септиков :)

Уже готовятся 2 новых ролика с участием Кати :)

Постараемся снизить уровень занудства в следующих выпусках)

Technomagic
Technomagic аватар
Offline
Зарегистрирован: 13.01.2022

Kakmyc пишет:
Technomagic пишет:

Есть два варианта использования:

1. В Режиме бегущей строки

2. Режим часов или таймера в виде ЧЧ:ММ, такого экрана как раз достатчно

Для ЧМ:ММ есть BigNumbers.h А бегущая строка из 4 знаков , это бред. К тому же она будет не плавно , а сразу на 1/4 экрана шагать. Работа в никуда одним словом.

Шагает плавно, на 1/16 экрана, посмотрите демонстрацию) https://youtu.be/9fWbCSm7FrE

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Посмотрел.
Абсолютно не читаемо.
Возможно показалось, но 8 символов не хватает и временами идёт наложение сопровождаемое мерцанием.

На всякий случай: символ полной штриховки вроде есть в наборах шрифтов.

Technomagic
Technomagic аватар
Offline
Зарегистрирован: 13.01.2022

Kakmyc пишет:

временами идёт наложение сопровождаемое мерцанием..

Мерцание есть на видео, в живую оно отсутствует

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Technomagic пишет:

2. Режим часов или таймера в виде ЧЧ:ММ, такого экрана как раз достатчно

Ни разу не новость )) - http://arduino.ru/forum/proekty/eshche-odni-chasy-na-lcd1602-s-krupnymi-tsiframi

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

куда Катю дели? Почему ее нет в видео?

Что за Катя, почему не знаю?

lilik
Offline
Зарегистрирован: 19.10.2017

ЕвгенийП пишет:

b707 пишет:

куда Катю дели? Почему ее нет в видео?

Что за Катя, почему не знаю?

https://www.youtube.com/watch?v=6AjMIHM4uXA

lilik
Offline
Зарегистрирован: 19.10.2017

v258 пишет:

Technomagic пишет:

2. Режим часов или таймера в виде ЧЧ:ММ, такого экрана как раз достатчно

Ни разу не новость )) - http://arduino.ru/forum/proekty/eshche-odni-chasy-na-lcd1602-s-krupnymi-tsiframi

:-)

Особенно понравилось -"Что бы вы ни делали на Ардуино, все равно получаются или часы, или метеостанция"

lilik
Offline
Зарегистрирован: 19.10.2017

Ещё раз вчитался в тему "как вывести на экран 1602 свой массив пикселей 32*5*8" и понял что никак :-)

Technomagic
Technomagic аватар
Offline
Зарегистрирован: 13.01.2022

lilik пишет:

Ещё раз вчитался в тему "как вывести на экран 1602 свой массив пикселей 32*5*8" и понял что никак :-)

Могу посоветовать только скачать генератор пикселей, в котором будет видно сразу весь массив пикселей 32х5х8. Генератор просто переводит клацание мышкой по пикселям в байт-код пригодный для контроллера.

https://youtu.be/eSnQn7cJNiU  вот так он выглядит.

Здесь можно скачать его, в самом низу страницу ссылка.

lilik
Offline
Зарегистрирован: 19.10.2017

Это всё полезно, но в целом дисплей не позволяет одновременно пользоваться всей своей площадью при выводе графической информации, уступая по всем параметрам кроме размеров ssd1306 :-)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

lilik пишет:

Это всё полезно, но в целом дисплей не позволяет одновременно пользоваться всей своей площадью при выводе графической информации, уступая по всем параметрам кроме размеров ssd1306 :-)

Текстовый дисплей не позволяет выводить графическую информацию, странно, правда?

А использовать графический (по назначению!) не судьба?

 

lilik
Offline
Зарегистрирован: 19.10.2017

Да и текст тоже толком, ни шрифта, ни половину шрифта своего. 

:-)

Вообще удивительно, что китайцы его делают по "такой схеме", у самих около 50000 символов для написания имеется.