? lcd 1602 русский шрифт на ардуино

Содержание

Функции

Наряду со стандартными функциями, унаследованными из библиотеки LiquidCrystal_I2C, в данной библиотеке реализованы следующие:

  • printAt(x, y, text) – вывод текста на дисплей с указанной позиции.
  • printf(format, …) – форматированный вывод текста. Действуют те же правила, что и в других функциях форматированного вывода, например, sprintf.
  • printfAt(x, y, format, …) – форматированный вывод с указанной позиции.
  • attachEncoder(pinA, pinB, pinBtn) – сообщает библиотеке, к каким выводам Ардуино подключен энкодер.
  • getEncoderState() – опрос состояния энкодера. Возвращает значение типа eEncoderState (перечисляемый тип, описан в библиотеке как {eNone, eLeft, eRight, eButton}).
  • printMultiline(text) – вывод длинного текста с возможностью вертикальной прокрутки. Возврат из функции осуществляется при нажатии кнопки энкодера.
  • inputVal(title, min, max, default, , ) – ввод числового значения. title – заголовок; параметры min и max задают диапазон, в котором может изменяться значение; default – начальное значение; step – величина приращения, по умолчанию равна 1; необязательный параметр onChangeFunc — указатель на функцию, которая должна вызываться при изменении значения.
  • inputValAt(x, y, min, max, default, , ) – аналогична функции inputVal, но в отличие от нее не очищает дисплей при вызове и ввод значения осуществляется с указанной позиции.
  • inputValBitwise(title, value, precision, , ) – позволяет вводить значения путем редактирования отдельных разрядов числа. Параметр title определяет заголовок; value – ссылка на переменную, в которую будет помещен результат ввода; precision – общее количество разрядов в числе; scale – количество разрядов после запятой, значение по умолчанию 0; signed – разрешает (при значении true) или запрещает (при значении false – по умолчанию) ввод отрицательных чисел. Функция возвращает true, если пользователь подтвердил ввод, false, если отказался.
  • inputStrVal(title, buffer, length, available_symbols) – аналогично функции inputValBitwise предоставляет возможность поразрядного ввода, но кроме цифр могут быть введены и другие символы. Параметр title определяет заголовок; buffer – ссылка на символьный буфер, в который будет помещен результат ввода; length – количество вводимых символов; параметр available_symbols – это строка символов, доступных для ввода. Функция возвращает true, если пользователь подтвердил ввод, false, если отказался.
  • selectVal(title, list_of_values, count, , ) – позволяет выбрать значение из списка list и возвращает индекс выбранного элемента. title – отображаемый на дисплее заголовок; list – список значений для выбора, представляет собой массив значений типа char*, String или int; count – количество элементов в массиве; show_selected — флаг отображения метки на выбранном элементе; selected_index – индекс выбранного по умолчанию элемента.
  • showMenu(menu, menu_length, show_title) – отображает меню и возвращает ключ выбранного элемента. menu – массив элементов типа sMenuItem; menu_length – длина меню; show_title – признак необходимости отображения заголовка.
  • getSelectedMenuItem() – возвращает ключ выбранного пункта меню для использования внутри обработчиков.
  • attachIdleFunc(IdleFunc) – позволяет привязать функцию, которая будет вызываться библиотекой при бездействии.

5Создание собственных символов для ЖК дисплея

Немного подробнее рассмотрим вопрос создания собственных символов для ЖК экранов. Каждый символ на экране состоит из 35-ти точек: 5 в ширину и 7 в высоту (+1 резервная строка для подчёркивания). В строке 6 приведённого скетча мы задаём массив из 7-ми чисел: {0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0}. Преобразуем 16-ричные числа в бинарные: {00000, 01010, 11111, 11111, 01110, 00100, 00000}. Эти числа – не что иное, как битовые маски для каждой из 7-ми строк символа, где «0» обозначают светлую точку, а «1» – тёмную. Например, символ сердца, заданный в виде битовой маски, будет выглядеть на экране так, как показано на рисунке.

Создание собственного символа для LCD экрана

init_bargraph()

Description

Initializes particular bar graph. The function creates a set of custom
characters for displaying bar graphs. Some number of first current custom
characters (5 or 8) will be overwritten according to the type of graph.

Parameters

  • graphtype: Type of a graph.
    • Valid values: unsigned integer
      • LCDI2C_VERTICAL_BAR_GRAPH — rewrites all 8 custom characters
      • LCDI2C_HORIZONTAL_BAR_GRAPH — rewrites first 5 custom characters
      • LCDI2C_HORIZONTAL_LINE_GRAPH — rewrites first 5 custom characters
    • Default value: none

Returns

  • ResultCode: Numeric code determining processing of the initialization.
    • 0: success
    • 1: failure, e.g., not recognized graph type

Функция print()

Функция print() печатает текст на жидкокристаллическом индикаторе.

Синтаксис функции print():

lcd.print(data) lcd.print(data, BASE)

Параметры:

 lcd — переменная типа LiquidCrystal;

 data — данные для печати (тип char, byte, int, long или string);

 BASE (опционально) — основание, по которому печатаются числа: BIN для двоичных (основание 2), DEC для десятичных (основание 10), OCT для восьмеричных (основание 8), HEX для шестнадцатеричных (основание 16).

Пример использования функции print():

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); void setup()

{lcd.print(«hello, world!»);} void loop() {;}

LiquidCrystal — blink() and noBlink()¶

The Liquid Crystal Library allows you to control LCD displays that are
compatible with the Hitachi HD44780 driver. There are many of them out there,
and you can usually tell them by the 16-pin interface.

This example sketch shows how to use the blink() and noBlink()
methods to blink a block-style cursor.

Hardware Required

  • Arduino Board
  • LCD Screen (compatible with Hitachi HD44780 driver)
  • pin headers to solder to the LCD display pins
  • 10k Potentiometer
  • breadboard
  • hook-up wire

Circuit

Before wiring the LCD screen to your Arduino we suggest to solder a
pin header strip to the 14 (or 16) pin count connector of the LCD screen,
as you can see in the image above.

Lcd display connections

To wire your LCD screen to your Arduino, connect the following pins:

  • LCD RS pin to digital pin 12
  • LCD Enable pin to digital pin 11
  • LCD D4 pin to digital pin 5
  • LCD D5 pin to digital pin 4
  • LCD D6 pin to digital pin 3
  • LCD D7 pin to digital pin 2
  • Additionally, wire a 10K pot to +5V and GND, with it’s wiper (output)
    to LCD screens VO pin (pin3).

Lcd display schem

(Image developed using Fritzing.
For more circuit examples, see the Fritzing project page)

Code

/*
  LiquidCrystal Library - Blink

Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
library works with all LCD displays that are compatible with the
Hitachi HD44780 driver. There are many of them out there, and you
can usually tell them by the 16-pin interface.

This sketch prints "Hello World!" to the LCD and makes the
cursor block blink.

The circuit
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD RW pin to ground
* 10K resistor
  * ends to +5V and ground
  * wiper to LCD VO pin (pin 3)

Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http//www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe

This example code is in the public domain.

http//arduino.ccenTutorialLiquidCrystalBlink

*/

// include the library code
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
}

void loop() {
  // Turn off the blinking cursor
  lcd.noBlink();
  delay(3000);
  // Turn on the blinking cursor
  lcd.blink();
  delay(3000);
}

7Что находится «за» шиной I2C

В качестве бонуса рассмотрим временную диаграмму вывода латинских символов «A», «B» и «С» на ЖК дисплей. Эти символы имеются в ПЗУ дисплея и выводятся на экран просто передачей дисплею их адреса. Диаграмма снята с выводов RS, RW, E, D4, D5, D6 и D7 дисплея, т.е. уже после преобразователя FC-113 «I2C параллельная шина». Можно сказать, что мы погружаемся немного «глубже» в «железо».

Временная диаграмма вывода латинских символов «A», «B» и «С» на LCD дисплей 1602

На диаграмме видно, что символы, которые имеются в ПЗУ дисплея (см. стр.11 даташита, ссылка ниже), передаются двумя полубайтами,
первый из которых определяет номер столбца таблицы, а второй – номер строки. При этом данные «защёлкиваются» по фронту сигнала на линии E (Enable), а линия RS (Register select, выбор регистра) находится в состоянии логической единицы, что означает передачу данных. Низкое состояние линии RS означает передачу инструкций, что мы и видим перед передачей каждого символа. В данном случае передаётся код инструкции возврата каретки на позицию (0, 0) ЖК дисплея, о чём также можно узнать, изучив техническое описание дисплея.

И ещё один пример. На этой временной диаграмме показан вывод символа «Сердце» на ЖК дисплей.

Временная диаграмма вывода символа «Сердце» из ПЗУ на ЖК дисплей 1602

Опять, первые два импульса Enable соответствуют инструкции Home() (0000 00102) – возврат каретки на позицию (0; 0), а вторые два – вывод на ЖК дисплей хранящийся в ячейке памяти 310 (0000 00112) символ «Сердце» (инструкция lcd.createChar(3, heart); скетча).

LiquidCrystal()¶

Description

Creates a variable of type LiquidCrystal.
The display can be controlled using 4 or 8 data lines.
If the former, omit the pin numbers for d0 to d3 and leave those lines
unconnected.
The RW pin can be tied to ground instead of connected to a pin on the
Arduino; if so, omit it from this function’s parameters.

Syntax

LiquidCrystal(rs, enable, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)
LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)

Parameters

the number of the Arduino pin that is connected to the
RS pin on the LCD
the number of the Arduino pin that is connected to the
RW pin on the LCD (optional)
the number of the Arduino pin that is connected to
the enable pin on the LCD
, , , , , , , :
the numbers of the Arduino pins
that are connected to the corresponding data pins on the LCD.
, , , and
are optional; if omitted, the LCD will be controlled
using only the four data lines (, , , ).

Элементы платы

Дисплей

Дисплей MT-16S2H-I умеет отображать все строчные и прописные буквы латиницы и кириллицы, а также типографские символы. Для любителей экзотики есть возможность создавать собственные иконки.

Экран выполнен на жидкокристаллической матрице, которая отображает 2 строки по 16 символов. Каждый символ состоит из отдельного знакоместа 5×8 пикселей.

Контроллер дисплея

Матрица индикатора подключена к встроенному чипу КБ1013ВГ6 с драйвером расширителя портов, которые выполняют роль посредника между экраном и микроконтроллером.

Контроллер КБ1013ВГ6 аналогичен популярным чипам зарубежных производителей HD44780 и KS0066, что означает совместимость со всеми программными библиотеками.

I²C-расширитель

Для экономии пинов микроконтроллера на плате дисплея также распаян дополнительный преобразователь интерфейсов INF8574A: микросхема позволит общаться экрану и управляющей плате по двум проводам через интерфейс I²C.

Контакты подключения

На плате дисплея выведено 18 контактов для подведения питания и взаимодействия с управляющей электроникой.

Вывод Обозначение Описание
1 GND Общий вывод (земля)
2 VCC Напряжение питания (5 В)
3 VO Управление контрастностью
4 RS Выбор регистра
5 R/W Выбор режима записи или чтения
6 E Разрешение обращений к индикатору (а также строб данных)
7 DB0 Шина данных (8-ми битный режим)(младший бит в 8-ми битном режиме)
8 DB1 Шина данных (8-ми битный режим)
9 DB2 Шина данных (8-ми битный режим)
10 DB3 Шина данных (8-ми битный режим)
11 DB4 Шина данных (8-ми и 4-х битные режимы)(младший бит в 4-х битном режиме)
12 DB5 Шина данных (8-ми и 4-х битные режимы)
13 DB6 Шина данных (8-ми и 4-х битные режимы)
14 DB7 Шина данных (8-ми и 4-х битные режимы)
15 LED+ Питания подсветки (+)
16 LED– Питания подсветки (–)
17 SDA Последовательная шина данных
18 SCL Последовательная линия тактированния

Обратите внимания, что физические контакты подсветки экрана и , также интерфейс шины I²C и расположены не в порядком соотношении с другими пинами экрана.

Питание

Экран совместим со всеми контроллерами с логическим напряжением от 3,3 до 5 вольт. Но для питания самого индикатора (пин VCC) необходимо строго 5 вольт

Если в вашем проекте нет линии 5 вольт, обратите внимание на дисплей текстовый экран 16×2 / I²C / 3,3 В.

Интерфейс передачи данных

Дисплей может работать в трёх режимах:

  • 8-битный режим — в нём используются и младшие и старшие биты (-)
  • 4-битный режим — в нём используются только младшие биты (-)
  • I²C режим — данные передаются по протоколу I²C/TWI. Адрес дисплея .

Использовать восьмибитный и четырёхбитный режим в данном дисплее не целесообразно. Ведь главное достоинство этой модели именно возможность подключения через I²C.
Если всё-таки есть необходимость использовать 4-битный или 8-битный режим, читайте документацию на текстовый экран 16×2.

Объединение питания

Для подключения питания к дисплею необходимо пять контактов:

Вывод Обозначение Описание
1 GND Общий вывод (земля)
2 VCC Напряжение питания (5 В)
3 VO Управление контрастностью
15 LED+ Питания подсветки (+)
16 LED– Питания подсветки (–)

Но если запаять перемычки и на обратной стороне дисплея, количество контактов питания можно сократить до трёх, объединив цепь питания и подсветки дисплея.

Мы взяли этот шаг на себя и спаяли перемычки самостоятельно.

Выбор адреса

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

Для общения с каждым дисплеем отдельно, необходимо установить в них разные адреса. Для смены адреса на обратной стороне дисплея установлены контактные площадки , и .

Капнув припоем на контактные площадки, мы получим один из семи дополнительных адресов:

  • нет припоя, соответственно нет электрического контакта.
  • есть припой, соответственно есть электрический контакт.
J2 J1 J0 Адрес
L L L 0x38
L L H 0x39
L H L 0x3A
L H H 0x3B
H L L 0x3C
H L H 0x3D
H H L 0x3E
H H H 0x3F

3Библиотека для работы по протоколу I2C

Теперь нужна библиотека для работы с LCD по интерфейсу I2C. Можно воспользоваться, например, (ссылка в строке «Download Sample code and library»).
Библиотека для работы по протоколу I2C

Скачанный архив LiquidCrystal_I2Cv1-1.rar разархивируем в папку \libraries\, которая находится в директории Arduino IDE.

Библиотека поддерживает набор стандартных функций для LCD экранов:

Функция Назначение
LiquidCrystal() создаёт переменную типа LiquidCrystal и принимает параметры подключения дисплея (номера выводов);
begin() инициализация LCD дисплея, задание параметров (кол-во строк и символов);
clear() очистка экрана и возврат курсора в начальную позицию;
home() возврат курсора в начальную позицию;
setCursor() установка курсора на заданную позицию;
write() выводит символ на ЖК экран;
print() выводит текст на ЖК экран;
cursor() показывает курсор, т.е. подчёркивание под местом следующего символа;
noCursor() прячет курсор;
blink() мигание курсора;
noBlink() отмена мигания;
noDisplay() выключение дисплея с сохранением всей отображаемой информации;
display() включение дисплея с сохранением всей отображаемой информации;
scrollDisplayLeft() прокрутка содержимого дисплея на 1 позицию влево;
scrollDisplayRight() прокрутка содержимого дисплея на 1 позицию вправо;
autoscroll() включение автопрокрутки;
noAutoscroll() выключение автопрокрутки;
leftToRight() задаёт направление текста слева направо;
rightToLeft() направление текста справа налево;
createChar() создаёт пользовательский символ для LCD-экрана.

Библиотека i2cdetect

В примерах важно использовать правильный адрес. Самый типичный пример — использовать адрес 0х27

Если у вас попался нестандартный дисплей, то можно узнать используемый адрес устройства при помощи библиотеки i2cdetect, доступный через менеджер библиотек.

После установки библиотеки запустите прилагаемый к нему пример и через последовательный монитор увидите нужный адрес.

Перечень функций библиотеки LiquidCrystal и LiquidCrystal_I2C

Системные функции:

init() – Обязательная инициализация

begin(col, row, size) – Инициализация дисплея с указанием количества col — столбцов, строк — row и размера символа — size

backlight() – Активация подсветки

noBacklight() – Деактивация подсветки

display() – Включить вывод на экран

noDisplay() – Выключить вывод экран

Функции работы с текстом:

clear() – Очистить экранную область и сброс позиции курсора в 0, 0

home() – Сброс курсора в позицию 0, 0

setCursor(col, row) – Установка курсора в положение, col — колонка и row — строка

print(«Ваш текст») – Выводит текст в экранную область дисплея

blink() – Включить мерцание курсора

noBlink() – Выключить мерцание курсора

cursor() – Включить курсор в виде нижнего подчеркивания

noCursor() – Выключить курсор

leftToRight() – Сдвигать курсор вправо, после символа

rightToLeft() – Сдвигать курсор влево, после символа

autoscroll() – Выравнять текст справа от курсора

noAutoscroll() – Выравнять текст слева от курсора

scrollDisplayLeft() – Сдвиг экранной области влево на один шаг

scrollDisplayRight() – Сдвиг экранной области вправо на один шаг

Данная библиотека позволяет платам Arduino управлять жидкокристаллическими дисплеями (LCD) на основе контроллера HD44780 (или аналогах), который используется в большинстве символьных LCD дисплеев.

Описание методов библиотеки

LiquidCrystal() — создаёт переменную типа LiquidCrystal и принимает параметры подключения дисплея (номера выводов);

begin() — инициализация LCD дисплея, задание параметров (кол-во строк и символов);

clear() — очистка экрана и возврат курсора в начальную позицию;

home() — возврат курсора в начальную позицию;

setCursor() — установка курсора на заданную позицию;

write() — выводит символ на ЖК экран;

print() — выводит текст на ЖК экран;

cursor() — показывает курсор, т.е. подчёркивание под местом следующего символа;

noCursor() — прячет курсор;

blink() — мигание курсора;

noBlink() — отмена мигания;

noDisplay() — выключение дисплея с сохранением всей отображаемой информации;

display() — включение дисплея с сохранением всей отображаемой информации;

scrollDisplayLeft() — прокрутка содержимого дисплея на 1 позицию влево;

scrollDisplayRight() — прокрутка содержимого дисплея на 1 позицию вправо;

autoscroll() — включение автопрокрутки;

noAutoscroll() — выключение автопрокрутки;

leftToRight() — задаёт направление текста слева направо;

rightToLeft() — направление текста справа налево;

createChar() — создаёт пользовательский символ для LCD-экрана.

Русификация LCD 1602 I2C дисплея

Перед загрузкой следующего скетча, необходимо установить библиотеку LCD_1602_RUS.h для русификации дисплея 1602 Ардуино. Архив с библиотекой можно скачать на нашем сайте на странице — Библиотеки для Ардуино. После установки библиотеки из архива загрузите в микроконтроллер небольшой пример с кодом для LCD, который значительно упростит для вас вывод кириллицы на дисплей.

Скетч с библиотекой LCD_1602_RUS.h

#include <Wire.h> // библиотека для управления устройствами по I2C 
#include <LCD_1602_RUS.h> // подключаем библиотеку LCD_1602_RUS

LCD_1602_RUS LCD(0x27,16,2); // присваиваем имя LCD для дисплея

void setup() {
   LCD.init(); // инициализация LCD дисплея
   LCD.backlight(); // включение подсветки дисплея
   
   LCD.setCursor(2,0); // ставим курсор на 3 символ первой строки
   LCD.print("РУСИФИКАЦИЯ!"); // печатаем символ на первой строке
}

void loop() {
 
}

Индикатор прогресса яркости светодиода

Создадим проект, в котором будем получать данные с потенциометра и выводить получаемые данные на экран в виде индикатора прогресса. Также будем менять яркость светодиода в соответствии с показаниями. Так как показания варьируются от 0 до 1024, необходимо преобразовать значения в пределах от 0 до 256 для светодиода и от 0 до 17 для экрана. Сам индикатор состоит из полностью закрашенного прямоугольника. Если выводить подобные прямоугольники с начала строки, то будет похоже на индикатор прогресса.

Потенциометр подключаем к выводу A0, светодиод к выводу 6. Подключение ЖК-дисплея стандартное, как описано в начале статьи.

Генерация пользовательских символов для LCD

Если вы находите символы на дисплее неподходящими и неинтересными, вы можете создать свои собственные символы (глиф) для своего ЖК-дисплея. Пользовательские символы чрезвычайно полезны в том случае, когда вы хотите отобразить символ, который не является частью стандартного набора символов ASCII.

Как мы уже обсуждали ранее в этом руководстве, символ на дисплее формируется в матрице 5×8 пикселей, поэтому вам нужно определить свой пользовательский символ в этой матрице. Для определения символа необходимо использовать функцию createChar() библиотеки LiquidCrystal.

Для использования  createChar()  сначала необходимо назначить массив из 8 байт. Каждый байт (учитывается только 5 бит) в массиве определяет одну строку символа в матрице 5×8. В то время как нули и единицы в байте указывают, какие пиксели в строке должны быть включены, а какие-выключены.

Генератор символов LCD

Создание собственного символа до сих пор было непросто! Поэтому было создано небольшое приложение под названием «Генератор пользовательских символов» для LCD.

Вы видите синюю сетку ниже? Вы можете нажать на любой из 5 × 8 пикселей, чтобы установить/очистить этот конкретный пиксель. И когда вы нажимаете на пиксели, код для символа генерируется рядом с сеткой. Этот код может быть непосредственно использован в вашем скетче Arduino.

Единственным ограничением является то, что библиотека LiquidCrystal поддерживает только восемь пользовательских символов.

Следующий скриншот демонстрирует, как вы можете использовать эти пользовательские символы на дисплее.

//  подключаем библиотеку LiquidCrystal:
#include <LiquidCrystal.h>

// Создаем LCD объект. Выводы: (rs, enable, d4, d5, d6, d7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// создадим несколько пользовательских символов
byte Heart = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};

byte Bell = {
0b00100,
0b01110,
0b01110,
0b01110,
0b11111,
0b00000,
0b00100,
0b00000
};


byte Alien = {
0b11111,
0b10101,
0b11111,
0b11111,
0b01110,
0b01010,
0b11011,
0b00000
};

byte Check = {
0b00000,
0b00001,
0b00011,
0b10110,
0b11100,
0b01000,
0b00000,
0b00000
};

byte Speaker = {
0b00001,
0b00011,
0b01111,
0b01111,
0b01111,
0b00011,
0b00001,
0b00000
};


byte Sound = {
0b00001,
0b00011,
0b00101,
0b01001,
0b01001,
0b01011,
0b11011,
0b11000
};


byte Skull = {
0b00000,
0b01110,
0b10101,
0b11011,
0b01110,
0b01110,
0b00000,
0b00000
};

byte Lock = {
0b01110,
0b10001,
0b10001,
0b11111,
0b11011,
0b11011,
0b11111,
0b00000
};

void setup() 
{
  // инициализируем LCD и устанавливаем количество столбцов и строк: 
  lcd.begin(16, 2);

  // создание нового символа
  lcd.createChar(0, Heart);
  // создание нового символа
  lcd.createChar(1, Bell);
  // создание нового символа
  lcd.createChar(2, Alien);
  // создание нового символа
  lcd.createChar(3, Check);
  // создание нового символа
  lcd.createChar(4, Speaker);
  // создание нового символа
  lcd.createChar(5, Sound);
  // создание нового символа
  lcd.createChar(6, Skull);
  // создание нового символа
  lcd.createChar(7, Lock);

  // Очищаем LCD дисплей 
  lcd.clear();

  // Печатаем сообщение на LCD.
  lcd.print("Custom Character");
}

// Печатаем все пользовательские символы
void loop() 
{ 
  lcd.setCursor(0, 1);
  lcd.write(byte(0));

  lcd.setCursor(2, 1);
  lcd.write(byte(1));

  lcd.setCursor(4, 1);
  lcd.write(byte(2));

  lcd.setCursor(6, 1);
  lcd.write(byte(3));

  lcd.setCursor(8, 1);
  lcd.write(byte(4));

  lcd.setCursor(10, 1);
  lcd.write(byte(5));

  lcd.setCursor(12, 1);
  lcd.write(byte(6));

  lcd.setCursor(14, 1);
  lcd.write(byte(7));
}

После включения библиотеки нам нужно инициализировать пользовательский массив из восьми байтов.

byte Heart = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};

В настройках мы должны создать пользовательский символ, используя функцию createChar(). Эта функция принимает два параметра. Первый — это число от 0 до 7, чтобы зарезервировать один из 8 поддерживаемых пользовательских символов. Второй параметр — это имя массива байтов.

// создание нового символа
lcd.createChar(0, Heart);

Далее в цикле для отображения пользовательского символа мы используем функцию write(), а в качестве параметра мы используем номер символа, который мы зарезервировали.

// byte(0) покажет символ Heart (сердце).
lcd.write(byte(0));

3Библиотека для работы по протоколу I2C

Теперь нужна библиотека для работы с LCD по интерфейсу I2C. Можно воспользоваться, например, (ссылка в строке «Download Sample code and library»).
Библиотека для работы по протоколу I2C

Скачанный архив LiquidCrystal_I2Cv1-1.rar разархивируем в папку \libraries\, которая находится в директории Arduino IDE.

Библиотека поддерживает набор стандартных функций для LCD экранов:

Функция Назначение
LiquidCrystal() создаёт переменную типа LiquidCrystal и принимает параметры подключения дисплея (номера выводов);
begin() инициализация LCD дисплея, задание параметров (кол-во строк и символов);
clear() очистка экрана и возврат курсора в начальную позицию;
home() возврат курсора в начальную позицию;
setCursor() установка курсора на заданную позицию;
write() выводит символ на ЖК экран;
print() выводит текст на ЖК экран;
cursor() показывает курсор, т.е. подчёркивание под местом следующего символа;
noCursor() прячет курсор;
blink() мигание курсора;
noBlink() отмена мигания;
noDisplay() выключение дисплея с сохранением всей отображаемой информации;
display() включение дисплея с сохранением всей отображаемой информации;
scrollDisplayLeft() прокрутка содержимого дисплея на 1 позицию влево;
scrollDisplayRight() прокрутка содержимого дисплея на 1 позицию вправо;
autoscroll() включение автопрокрутки;
noAutoscroll() выключение автопрокрутки;
leftToRight() задаёт направление текста слева направо;
rightToLeft() направление текста справа налево;
createChar() создаёт пользовательский символ для LCD-экрана.

Визуальный редактор

Редактор для создания собственных символов для дисплеев HD44780

Щёлкайте по квадратам для генерации кода.

Очистить
Инвертировать

Результат

byte customChar = {
	0b00000,
	0b00000,
	0b00000,
	0b00000,
	0b00000,
	0b00000,
	0b00000,
	0b00000
};
LCD Module Arduino Pin
RS
RW GND
Enable
D4
D5
D6
D7

Код для скетча Arduino

#include <LiquidCrystal.h>

// initialize the library
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
byte customChar = {
	0b00000,
	0b00000,
	0b00000,
	0b00000,
	0b00000,
	0b00000,
	0b00000,
	0b00000
};
void setup()
{
  // create a new custom character
  lcd.createChar(0, customChar);
  
  // set up number of columns and rows
  lcd.begin(16, 2);

  // print the custom char to the lcd
  lcd.write((uint8_t)0);
}

void loop()
{
  
}

Источник генератора: https://omerk.github.io/lcdchargen/

Экран с I2C

Стандартный экран неудобно подключать, слишком много контактов задействовано в сборке. Существует альтернативный вариант, когда к экрану прилагается дополнительный модуль. В этом случае используется только четыре контакта (питание, земля и два аналоговых порта).

На других микроконтроллерах сигнальные выводы отличаются (Leonardo: SDA-D2, SCL-D3; MEGA, ADK, DUE: SDA-D20, SCL-D21).

Модуль может поставляться отдельно и его нужно припаять самостоятельно. Но проще сразу приобрести готовый собранный модуль с экраном. Встречаются различные модификации экранов — 4х20, 2х16.

Купить на AliExpress ЖК-дисплей 1602 Синяя подсветка с адаптером

Стандартная библиотека не подойдёт. Нужно использовать библиотеку с поддержкой I2C LiquidCrystal I2C by Frank de Brabander (GitHub).

После установки библиотеки будут доступны несколько примеров: CustomChars, HelloWorld, SerialDisplay.

Если при запуске примера не видны символы на экране, то попробуйте покрутить винт на модуле для изменения контрастности. У меня был именно такой случай.

Библиотека i2cdetect

В примерах важно использовать правильный адрес. Самый типичный пример — использовать адрес 0х27

Если у вас попался нестандартный дисплей, то можно узнать используемый адрес устройства при помощи библиотеки i2cdetect, доступный через менеджер библиотек.

После установки библиотеки запустите прилагаемый к нему пример и через последовательный монитор увидите нужный адрес.

1Описание FC-113 преобразователя последовательного интерфейса в параллельный

  • Модуль FC-113 сделан на базе микросхемы PCF8574T, которая представляет собой 8-битный сдвиговый регистр – «расширитель» входов-выходов для последовательной шины I2C. На рисунке микросхема обозначена DD1.
  • R1 – подстроечный резистор для регулировки контрастности ЖК дисплея.
  • Джампер J1 используется для включения подсветки дисплея.
  • Выводы 1…16 служат для подключения модуля к выводам LCD дисплея.
  • Контактные площадки А1…А3 нужны для изменения адреса I2C устройства. Запаивая соответствующие перемычки, можно менять адрес устройства. В таблице приведено соответствие адресов и перемычек: «0» соответствует разрыву цепи, «1» – установленной перемычке. По умолчанию все 3 перемычки разомкнуты и адрес устройства 0x27.

I2C модуль FC-113 для подключения ЖК экрана

clear()

Description

Overloaded function for clearing the entire LCD screen or just a part of a row.

  • Using the function without any parameters clears the entire srceen.
  • For clearing the entire row use the function just with the first parameter.
  • The functions sets the cursor to the start column and row after clearing, i.e., after calling without parameters to the home position (0, 0), or after calling with parameters to the starts of cleared row segment.

Parameters

  • rowStart: Number of a row to be cleared counting from 0.

    • Valid values: unsigned byte 0 to of the
    • Default value: none
  • colStart: Order number of the first character in a cleared row counting from 0, which the cleared segment starts from.

    • Valid values: unsigned byte 0 to of the
    • Default value: 0 (start of a row)
  • colCnt: Number of cleared characters in a cleard row.

    • Valid values: unsigned byte 0 to of the
    • Default value: 255, but internally limited to (cols — colStart)

Описание

Классический LCD дисплей, раньше такие стояли в кассовых аппаратах и офисной технике.

  • Бывают разного размера, самый популярный – 1602 (16 столбцов 2 строки), есть ещё 2004, 0802 и другие. В наборе идёт 1602.
  • Снабжён отключаемой светодиодной подсветкой. Существует несколько вариантов, например синий фон белые буквы, зелёный фон чёрные буквы, чёрный фон белые буквы и проч. В наборе идёт с зелёным фоном и чёрными буквами.
  • Сам по себе требует для подключения 6 цифровых пинов, но китайцы выпускают переходник на шину I2C на базе PCF8574, что сильно упрощает подключение и экономит пины. В наборе идёт дисплей с припаянным переходником.
  • На переходнике также распаян потенциометр настройки контрастности (синий параллелепипед с крутилкой под крестовую отвёртку). В зависимости от напряжения питания нужно вручную подстроить контрастность. Например при питании платы от USB на пин 5V приходит ~4.7V, а при внешнем питании от адаптера – 5.0V. Контрастность символов на дисплее будет разной!
  • Переходник может иметь разный адрес для указания в программе: или , об этом ниже.

Встроенные библиотеки в Arduino IDE

Вместе с дистрибутивом интегрированной среды разработки Arduino IDE поставляются встроенные библиотеки. Установка и подключение библиотек в Arduino IDE — это отдельный процесс, которому мы посвятили отдельную статью.

Многие разделяют все библиотеки на 3 основных группы:

  • Встроенные.
  • Дополнительные.
  • Зависимые.

Остановимся немного подробнее на данной терминологии.

Встроенные библиотеки

Встроенные библиотеки — наборы файлов, которые уже идут вместе со средой разработки Arduino IDE. Можно сказать, что они сразу установлены в среде.

Такие библиотеки не нужно отдельно искать и скачивать. Как только вы запустили среду Ардуино — вы можете их начать использовать в своих проектах.

Дополнительные библиотеки

Дополнительные библиотеки отдельно скачивают и устанавливают. Эти библиотеки идут с различными модулями, которые помогают создавать более сложные устройства. Среди таких модулей разные датчики, сенсоры, а иногда и более сложные гаджеты.

Как правило, такие библиотеки скачивают на сайтах производителей модулей. Некоторые основные библиотеки вы можете скачать в этом разделе.

Зависимые библиотеки

Без таких библиотек не могут работать основные установленные библиотеки. Изредка такое может встретиться при создании какого-то проекта.

Но как правило производители в один архив помещают всё что необходимо.

Список встроенных библиотек

На официальном сайте производителя Ардуино arduino.cc можно найти список встроенных библиотек.

Вместе с Arduino IDE на данный момент идут:

  • EEPROM
  • Ethernet / Ethernet 2
  • Firmata
  • GSM
  • LiquidCrystal
  • SD
  • Servo
  • SPI
  • SoftwareSerial
  • Stepper
  • TFT
  • WiFi
  • Wire