Очистка lcd дисплея ардуино
В качестве примера подключим дисплей к управляющей плате Arduino Uno.
Индикатор прогресса яркости светодиода
Создадим проект, в котором будем получать данные с потенциометра и выводить получаемые данные на экран в виде индикатора прогресса. Также будем менять яркость светодиода в соответствии с показаниями. Так как показания варьируются от 0 до 1024, необходимо преобразовать значения в пределах от 0 до 256 для светодиода и от 0 до 17 для экрана. Сам индикатор состоит из полностью закрашенного прямоугольника. Если выводить подобные прямоугольники с начала строки, то будет похоже на индикатор прогресса.
Потенциометр подключаем к выводу A0, светодиод к выводу 6. Подключение ЖК-дисплея стандартное, как описано в начале статьи.
Очистка экрана:
clrScr(); Очистка экрана с заливкой дисплея чёрным цветом | Параметр: Без параметров. |
fillScr( color ); Очистка экрана с заливкой заданным цветом. |
fillScr(VGA_RED); // красный цвет
-
Цет можно задать тремя способами:
- color: По названию цвета - VGA_RED
- color: В формате RGB565 - 0x001F
- color: В формате RGB - 255,100,0
scrollDisplayRight()
Функция scrollDisplayRight() прокручивает информацию на экране индикатора (текст и курсор) на одно знакоместо вправо.
Подключение к Iskra JS
Вывод | Обозначение | Пин Iskra JS |
---|---|---|
1 | GND | GND |
2 | VCC | 5V |
3 | VO | GND |
17 | SDA | SDA |
18 | SCL | SCL |
Для работы с LCD-дисплеем из среды Espruino существует библиотека HD44780.
Функции библиотеки LiquidCrystal
Функции библиотеки LiquidCrystal
lcd.print();
Функция отображает на дисплее произвольную информацию, начиная с текущего положения курсора. В качестве аргумента можно использовать текстовую строку или переменную.
lcd.setCursor( Pos , Str );
Устанавливает курсор ЖК-дисплея в позицию Pos , строки Str дисплея.
- Установка нулевого положения курсора
lcd. home ();
Устанавливает курсор дисплея в нулевую позицию, строки 0 дисплея.
lcd. clear ();
Стирает всю информацию с экрана
lcd. Display();
lcd. noDisplay();
lcd. Cursor();
lcd. noCursor();
- Включение/выключение мигания курсора
lcd. blink();
lcd. noblink();
Влево lcd. scrollDisplayLeft();
Вправо lcd. scrollDisplayRight();
- Установка направления вывода текстовой строки
Слева направо lcd .leftToRight();
Справа налево lcd . rightToLeft ();
Lcd . createChar ( Adr , CH []);
Команда записывает в память дисплея произвольный символ. Запись выполняется по одному из первых 8 адресов (от 0 до 7) в памяти знакогенератора. Символ CH [] должен представлять собой массив из 8 байт. Для задания пикселей, в каждом байте используется только 8 младших бит.
LiquidCrystal lcd( 6, 8, 12, 11, 10, 9); // Объявление дисплея
void setup() lcd.begin(16, 2); // Инициализация ЖК-дисплея
lcd.print("hello, world!"); // Вывод на дисплей
lcd.rightToLeft(); // Установка обратного порядка вывода
lcd.setCursor(12, 1); // Установка начала вывода (строка 2 поз.12)
lcd.print("hello, world!"); // Вывод на дисплей
>
Выводить информацию удобно на экран. Очень популярным решением является текстовый жидкокристаллический экран, знакомый нам по древним звонилкам. Для опытов я использовал простой текстовый экран 16×2 от компании МЭЛТ.
Я думал, что работать с такими экранами очень сложно, оказалось, что ничего страшного.
Краткое описание дисплея: LCD-дисплей MT-16S2H компании Мэлт служит для вывода текста с подсветкой. По изображению похож на дисплеи старых мобильных телефонов вроде Nokia 3310 или Siemens C35. Экран имеет 16 контактов для подведения питания и взаимодействия с управляющей электроникой. Для управления выводом дисплея возможно использовать только 6 из них. Дисплей выполнен на чипе, совместимом с HD44780, который является де-факто стандартом для LCD-экранов.
Процесс подключения очень хорошо описан на сайте Амперки - Подключение текстового экрана к Arduino
Основная особенность дисплея - необычная нумерация выходов. Всего их 16, но идут они не по порядку, а весьма нетривиальным способом. И только три из них подписаны: 14, 1 и 16. Но, оказывается, это вполне достаточно. Я помогу вам разобраться.
14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 16 | 15 |
Контакт | Обозначение | Назначение |
---|---|---|
1 | Vss | Заземление |
2 | Vdd | Питание 5В |
3 | Vo | Регулировка контрастности (потенциометр) |
4 | Rs | Выбор режим (командный или отображения данных) |
5 | RW | Чтение/Запись |
6 | En | Готовность данных |
7 | D0 | Линия передачи данных 0 (не используется) |
8 | D1 | Линия передачи данных 1 (не используется) |
9 | D2 | Линия передачи данных 2 (не используется) |
10 | D3 | Линия передачи данных 3 (не используется) |
11 | D4 | Линия передачи данных 4 |
12 | D5 | Линия передачи данных 5 |
13 | D6 | Линия передачи данных 6 |
14 | D7 | Линия передачи данных 7 |
15 | A | Анод подсветки |
16 | K | Катод подсветки |
Вкратце, чтобы самому не забыть. Втыкаем дисплей своими 16 ножками в макетную плату. Подводим к рельсам питания макетки питание +5 В и землю с Arduino.
Фоновая подсветка дисплея — это отдельный контур, не связанный с остальным. Включить её можно подав +5 В на 15-й контакт дисплея и подключив 16-й контакт к земле. Соединив эти два контакта с соответствующими рельсами, можно включить Arduino и увидеть, что дисплей засветился.
Далее необходимо подключить цепь, отвечающую за отображение символов. Для этого предназначены контакты 1, 2 и 3 на дисплее. Перед подключением отключите Arduino от питания.
Первый — это земля. Соедините его с рельсой земли.
Второй — питание. Соедините его с рельсой +5 В.
Третий — контрастность. Для получение максимально контрастного изображения соедините его с рельсой земли. Вы можете подать на этот контакт произвольное напряжение от 0 до 5 В, чем оно выше, тем тусклее будет изображение, но вместе с этим снизится энергопотребление. Для возможности плавной регулировки контрастности можете подать на этот контакт выходной сигнал потенциометра.
После подключения, если включить Arduino, вы можете увидеть прямоугольные знакоместа. В зависимости от комбинации цветов текста и подсветки они могут быть как яркими и хорошо заметными, так и едва заметными. Это нормально: в любом случае, текст будет смотреться отлично.
createChar()
Функция createChar() создаёт пользовательский символ (глиф) для использования на жидкокристаллическом дисплее. Поддерживаются до восьми символов 5×8 пикселов (нумерация с 0 до 7). Создание каждого пользовательского символа определяется массивом из восьми байтов — один байт для каждой строки. Пять младших значащих битов каждого байта определяют пикселы в этой строке. Чтобы вывести пользовательский символ на экран, используйте функцию write() с номером символа в качестве параметра.
- lcd — переменная типа LiquidCrystal
- num — номер создаваемого символа (0 to 7)
- data — данные символьных пикселов
clear()
Функция clear() очищает экран жидкокристаллического индикатора и располагает курсор в верхнем левом углу.
Кириллица
Вывод кирилицы на дисплей с помощью платформы Iskra JS доступен через встроенную в дисплей таблицу знакогенератора.
Переключение страниц знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:
Дисплей не может одновременно отображать символы разных страниц.
Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.
begin()
Функция begin() определяет размерность (количество символов в ширину и высоту) индикатора.
- lcd — переменная типа LiquidCrystal
- cols — количество символов в строке
- rows — количество строк
cursor()
Функция cursor() выводит на экран жидкокристаллического индикатора курсор — подчёркивание знакоместа в позиции, в которую будет записан следующий символ.
Выбор шрифта:
setFont(SmallFont); // маленький шрифт
-
По умолчанию в библиотеке есть 3 шрифта:
- fontName: SmallFont - маленький шрифт
- fontName: BigFont - большой шрифт
- fontName: SevenSegNumFont - шрифт имитирующий семисегментный индикатор
Визуальный редактор
Редактор для создания собственных символов для дисплеев HD44780
wrote this file. As long as you retain this notice you can do whatever you want with this stuff. If we meet some day, and you think this stuff is worth it, you can buy me a beer in return. Omer Kilic ---------------------------------------------------------------------------- --> Щёлкайте по квадратам для генерации кода.
Переключение страниц знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:
Дисплей не может одновременно отображать символы разных страниц.
Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.
Библиотека LiquidCrystalRus с поддержкой кириллицы
Совсем не обязательно мучиться с байтами, чтобы вывести русский символ. Существует библиотека LiquidCrystalRus, которая поддерживает кириллицу. Исходники лежат на Гитхабе. Скачайте файл LiquidCrystalRus-1.6.0.zip и распакуйте его в папку libraries. У вас получится что-то типа D:\Arduino\libraries\LiquidCrystalRus. В папке находятся файлы библиотеки и папка examples, содержащая три скетча. После этого примеры будут доступны из Arduino IDE. Запустите пример File | Examples | LiquidCrystalRus | HelloWorldRus и убедитесь, что экран способен выводить русские символы.
noCursor()
Функция noCursor() скрывает курсор с экрана жидкокристаллического индикатора.
Подключение нескольких дисплеев
Используя шину I²C можно подключить несколько дисплеев одновременно, при этом количество занятых пинов останется прежним. Подробнее читайте в нашей документации.
После физического смены адреса экрана, подключите дополнительный дисплей параллельно к пинам I²C , а в коде программы инициализируйте работу с двумя дисплеями.
Базовые функции:
Подключение нескольких дисплеев
Используя шину I²C можно подключить несколько дисплеев одновременно, при этом количество занятых пинов останется прежним. Подробнее читайте в нашей документации.
После физического смены адреса экрана, подключите дополнительный дисплей параллельно к пинам I²C , а в коде программы инициализируйте работу с двумя дисплеями.
Подключение шины данных
Для коммуникации между Arduino и экраном необходимо использовать несколько линий взаимодействия:
2 или 3 для командования дисплеем
4 или 8 для передачи данных (кодов символов и команд)
Таким образом занятыми окажутся от 6-ти до 11-ти контактов от обоих устройств. Если вам не требуется считывать с дисплея, что подходит под большинство сценариев использования, для команд понадобится 2 линии.
Если скорость обновления данных так же не является проблемой, для передачи данных достаточно 4-х линий.
Итак, для подключения дисплея достаточно использовать 6 линий, 6 контактов на Arduino. Рассмотрим именно этот сценарий. Как упоминалось, нам не за чем считывать с дисплея, мы будем в него только писать. Поэтому соединим 5-й контакт дисплея, который отвечает за выбор чтение/запись с рельсой земли. Это означает «всегда писать».
Затем, соединяем Arduino и экран нашими 6-ю линиями коммуникации. Какие именно контакты будут выбраны на Arduino не имеет значения: мы зададим их в программе, но для примера была выбрана такая конфигурация:
4-й контакт дисплея — 4-й контакт Arduino. Это линия адресного сигнала. Известная как A0 или RS. В зависимости от того, 0 она или 1, дисплей понимает имеем ли мы на линии данных команду вроде «передвинуть курсор» или код символа для отображения.
6-й контакт дисплея — 5-й контакт Arduino. Это линия разрешения доступа к данным. Известная, как E или Enable. Когда эта линия становится единицей, дисплей исполняет команду или выводит символ с линии данных.
11-й, 12-й, 13-й, 14-й контакт дисплея — 10-й, 11-й, 12-й, 13-й контакт Arduino соответственно. Это линии данных. Известные как D4, D5, D6, D7.
Autoscroll
Бегущая строка. Выводится первая строка, затем вторая.
Программирование
Существует стандартная библиотека LiquidCrystal для работы с текстовыми жидкокристаллическими экранами.
Это удобно, если вы позабыли правильное написание библиотеки и убережёт от опечаток.
Также в состав Arduino IDE входят несколько примеров работы с библиотекой: File | Examples | LiquidCrystal.
Единственное, что вам нужно сделать - это менять строчку инициализации контактов в соответствии с вашими соединениями.
А ещё лучше использовать константы.
Простейшая программа для вывода "Hello World"
В данном случае функция loop() нам не требуется, поэтому оставляем её пустой.
Нужно помнить, что фуккция print() не проверяет длину строк, поэтому самостоятельно следите за своими данными.
Рассмотрим поставляемые примеры.
Подключение к Arduino
Вывод | Обозначение | Пин Arduino Uno |
---|---|---|
1 | GND | GND |
2 | VCC | 5V |
3 | VO | GND |
17 | SDA | SDA |
18 | SCL | SCL |
Для упрощения работы с LCD-дисплеем используйте встроенную библиотеку Библиотека для Arduino «Liquid Crystal I²C». В ней вы найдёте примеры кода с подробными комментариями.
SerialDisplay
Вводим текст в Serial Monitor, чтобы увидеть его на дисплее.
noDisplay()
Функция noDisplay() выключает жидкокристаллический индикатор без потери отображаемой на нем информации.
Blink
Выводим строку hello, world! и мигающий курсор в виде знакоместа.
Собственные символы
Собственные символы рисуются с помощью функции createChar(). Пример, предлагаемый на сайте Arduino:
Вы можете нарисовать несколько собственных символов и вывести их на экран.
Библиотека i2cdetect
В примерах важно использовать правильный адрес. Самый типичный пример - использовать адрес 0х27.
Если у вас попался нестандартный дисплей, то можно узнать используемый адрес устройства при помощи библиотеки i2cdetect, доступный через менеджер библиотек.
После установки библиотеки запустите прилагаемый к нему пример и через последовательный монитор увидите нужный адрес.
Кириллица
Существует способ вывода кириллицы на текстовые дисплеи с помощью таблицы знакогенератора.
Комнатный термометр
Дисплей удобен для отображения показаний модулей и сенсоров. Сделаем задатки «Умного Дома», а именно «комнатный термометр».
HelloWorld
Подключение библиотеки и дисплея
Использование данной библиотеки стандартно для платформы Arduino. Перед первым вызовом любых функций необходимо прописать режим, в котором работает дисплей и номера используемых выводов Arduino . Могут быть использованы любые цифровые вывода, в произвольном порядке. Этот факт значительно повышает универсальность библиотеки и позволяет использовать устройства индикации, совместно с другой периферией в уже готовых проектах.
Для 4-х проводного режима объявление библиотеки выглядит следующим образом:
LiquidCrystal lcd(RS, E, D4,D5,D6,D7);
Здесь lcd – имя, по которому производится вызов функций управления дисплеем. Параметрами являются номера выводов Arduino , к которым подключены соответствующие линии ЖК-индикатора:
- RS – выбор регистра адрес/данные
- E – разрешение чтения с шины
- D 4- D 7 – 4 линии шины данных индикатора
После объявления имени используемого дисплея проводится инициализация дисплея.
lcd.begin(Ch,S, С hSz);
Данная функция выполняет инициализацию дисплея, а также задает количество строк S и символов в строке Ch . Также можно задать размер шрифта ChSz . По умолчанию последний равен 5 x 8.
autoscroll()
Функция autoscroll() включает автоматическую прокрутку экрана жидкокристаллического индикатора и заставляет каждый вывод символа на экран индикатора перемещать предыдущие символы на одно знакоместо. Если текущее направление вывода символов слева направо (значение по умолчанию) — экран индикатора прокручивается влево; если текущее направление вывода символов справа налево — экран индикатора прокручивается вправо. Это производит эффект вывода каждого нового символа в одно и то же знакоместо на экране жидкокристаллического индикатора.
Инициализация работы с дисплеем:
InitLCD(PORTRAIT); // инициализация (вертикальное положение)
-
Положение может быть горизонтальным или вертикальным:
- положение: PORTRAIT - вертикальное
- положение: LANDSCAPE - горизонтальное (по умолчанию)
Поддерживаемые дисплеи:
// Пояснение:
LiquidCrystal ОБЪЕКТ ( RS , E , D4 , D5 , D6 , D7 );
void setup()
// Пояснение:
LiquidCrystal ОБЪЕКТ ( RS , E , D4 , D5 , D6 , D7 );
void setup()
Выводим надпись на дисплей LCD1602 подключённый по шине I2C. Для работы с дисплеем LCD2004 нужно изменить 3 строку на LiquidCrystal_I2C lcd(0x27,20,4);
Выводим надпись на дисплей LCD1602 подключённый по 4-битной параллельной шине. Для работы с дисплеем LCD2004 нужно изменить 5 строку на lcd.begin(20, 4);
Выводим надпись «Русский язык» на дисплей LCD1602 подключённый по шине I2C:
Выводим время прошедшее после старта на дисплей LCD1602 подключённый по шине I2C:
CustomCharacter
Выводим собственные символы: сердечко, смайлик. Небольшая анимация человечка.
LiquidCrystal()
Конструктор LiquidCrystal() создаёт переменную типа LiquidCrystal. Индикатором можно управлять, используя 4 или 8 линий данных. Для подключения по 4-м линиям пропустите контакты от D0 до D3 и оставьте эти линии неподключёнными. Контакт RW может быть соединён с "землёй" вместо соединения с контактом платы Arduino. Если в вашей схеме так — пропустите этот параметр функции.
- rs — номер контакта платы Arduino, который соединяется с контактом RS жидкокристаллического индикатора
- rw — номер контакта платы Arduino, который соединяется с контактом RW жидкокристаллического индикатора (опционально)
- enable — номер контакта платы Arduino, который соединяется с контактом ENABLE жидкокристаллического индикатора
- d0, d1, d2, d3, d4, d5, d6, d7 — номера контактов платы Arduino, которые соединяются соответственно с контактами данных жидкокристаллического инди-катора. D0, D1, D2 И D3 опциональны — если они не задействованы, жидкокристаллический индикатор будет управляться только через 4 линии данных (D4, D5, D6, D7)
Кириллица
Можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x, он считывает за ним все символы, которые могут являться разрядами шестнадцатиричной системы даже если их больше двух. Из-за этого вы не можете просто использовать символы из диапазона 0-9, a-f следом за двузначным кодом символа: это вызовет ошибку компиляции. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются. Так, если вы хотите написать «Яeee»:
Полную таблицу символов с кодами можно найти в документации к экрану.
Я на скорую руку написал скрипт на JavaScript, который конвертирует слова в нижнем регистре в нужные последовательности. Если в слове встречаются повторяющие буквы, то нажмите на кнопку несколько раз.
scrollDisplayLeft()
Функция scrollDisplayLeft() прокручивает информацию на экране индикатора (текст и курсор) на одно знакоместо влево.
blink()
Функция blink() выводит на экран жидкокристаллического индикатора мигающий курсор. Если она используется в комбинации с функцией cursor(), результат будет зависеть от конкретного индикатора.
Функции, реализованные только в библиотеке LiquidCrystal_I2C:
- init(); – Инициализация дисплея. Должна быть первой командой библиотеки LiquidCrystal_I2C после создания объекта. На самом деле данная функция есть и в библиотеке LiquidCrystal, но в той библиотеке она вызывается автоматически (по умолчанию) при создании объекта.
- backlight(); – Включение подсветки дисплея.
- noBacklight(); – Выключение подсветки дисплея.
- setBacklight(flag); – Управление подсветкой (true - включить / false - выключить), используется вместо функций noBacklight и backlight.
SetCursor
Выводим символы алфавита во все доступные позиции экрана.
Cursor
Выводим строку hello, world! и мигающий символ в виде значка подчёркивания.
Вывод текста
Для вывода программы приветствия, воспользуйтесь скриптом:
Результат
LCD Module | Arduino Pin |
---|---|
RS | |
RW | GND |
Enable | |
D4 | |
D5 | |
D6 | |
D7 |
Scroll
Выводим бегущую строку, которая движется вправо и влево.
Функции, общие для библиотек LiquidCrystal и LiquidCrystal_I2C:
- begin(cols,rows,[char_size]); – Инициализация дисплея с указанием количества столбцов, строк и размера символа.
- clear(); – Очистка дисплея с установкой курсора в положение 0,0 (Занимает много времени!).
- home(); – Установка курсора в положение 0,0 (Занимает много времени!).
- display(); – Быстрое включение дисплея (без изменения данных в ОЗУ).
- noDisplay(); – Быстрое выключение дисплея (без изменения данных в ОЗУ).
- blink(); – Включение мигающего курсора (с частотой около 1 Гц).
- noBlink(); – Выключение мигающего курсора.
- cursor(); – Включение подчеркивания курсора.
- noCursor(); – Выключение подчеркивания курсора.
- scrollDisplayLeft(); – Прокрутка дисплея влево. Сдвиг координат дисплея на один столбец влево (без изменения ОЗУ).
- scrollDisplayRight(); – Прокрутка дисплея вправо. Сдвиг координат дисплея на один столбец вправо (без изменения ОЗУ).
- leftToRight(); – Указывает в дальнейшем сдвигать положение курсора, после вывода очередного символа, на один столбец вправо.
- rightToLeft(); – Указывает в дальнейшем сдвигать положение курсора, после вывода очередного символа, на один столбец влево.
- noAutoscroll(); – Указывает в дальнейшем выравнивать текст по левому краю от позиции курсора (как обычно).
- autoscroll(); – Указывает в дальнейшем выравнивать текст по правому краю от позиции курсора.
- createChar(num,array); – Запись пользовательского символа в CGRAM дисплея под указанным номером.
- setCursor(col,row); – Установка курсора в позицию указанную номером колонки и строки.
- print(data); – Вывод текста, символов или цифр на экран дисплея. Синтаксис схож с одноимённой функцией класса Serial.
Таблица знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв.
Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.
Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0–9 и A–F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются.
Сравните две строки кода для вывода надписи «Яeee»:
leftToRight()
Функция leftToRight() устанавливает направление вывода символов на экран жидкокристаллического индикатора слева направо (значение по умолчанию). Это означает, что последующие символы, выводимые на экран индикатора, пойдут слева направо, но не повлияют на выведенный ранее текст.
noBlink()
Функция noBlink() выключает мигающий курсор на экране жидкокристаллического индикатора.
noAutoscroll()
Функция noAutoscroll() выключает автоматическую прокрутку экрана жидкокристаллического индикатора.
print()
Функция print() печатает текст на жидкокристаллическом индикаторе.
- lcd — переменная типа LiquidCrystal
- data — данные для печати (тип char, byte, int, long или string)
- BASE (опционально) — основание, по которому печатаются числа: BIN для двоичных (основание 2), DEC для десятичных (основание 10), OCT для восьмеричных (основание 8), HEX для шестнадцатеричных (основание 16)
Display
Выводим мигающий текст.
Вывод текста:
print("iarduino", 50, 50); // текст "iarduino" горизонтально
print("iarduino", 50, 50, 90); // текст "iarduino" вертикально
- str: строка или содержимое строковой переменной
- x: координата X
- y: координата Y координаты верхнего левого угла области печати
(x можно указать как число или LEFT / RIGHT / CENTER) - r: поворот текста в градусах, вокруг точки x,y
r - необязательный параметр
printNumI(2000,50,50); // результат: "2000"
printNumI(2000,50,50,0); // результат: "2000"
printNumI(2000,50,50,5); // результат: " 2000"
printNumI(2000,50,50,6,'0'); // результат: "002000"
- int: целое число или содержимое целочисленной переменной
- x: координата X
- y: координата Y координаты верхнего левого угла области печати
(x можно указать как число или LEFT / RIGHT / CENTER) - len: количество выводимых разрядов числа int.
игнорируется если len меньше количества разрядов int.
необязательный параметр, по умолчанию: 0 - sym: символ заменяющий недостающие разряды.
необязательный параметр, по умолчанию: ' '
(если len больше чем количество разрядов числа int, то недостающие разряды перед числом будут заменены на sym.)
printNumF(-234.3442,2,50,50); // результат "-234.34"
printNumF(-234.3442,3,50,50); // результат "-234.344"
printNumF(-234.3442,4,50,50,'*'); // результат "-234*3442"
printNumF(-234.3442,1,50,50,',',1); // результат "-234,3"
printNumF(-234.3442,1,50,50,',',7); // результат " -234,3"
printNumF(-234.3442,1,50,50,',',7,'0'); // результат "-0234,3"
Вывод текста
Для вывода первой программы приветствия, воспользуйтесь кодом вроде этого:
Выбор цвета:
setColor(0,0,255); // синий цвет
-
Цет можно задать тремя способами:
- color: По названию цвета - VGA_RED
- color: В формате RGB565 - 0x001F
- color: В формате RGB - 255,100,0
setBackColor(2016); // зелёный цвет
-
Цет можно задать тремя способами:
- color: По названию цвета - VGA_RED
- color: В формате RGB565 - 0x001F
- color: В формате RGB - 255,100,0
Удобнее всего устанавливать цвет по его названию:
Полный перечень цветов: VGA_BLACK, VGA_WHITE, VGA_RED, VGA_GREEN, VGA_BLUE, VGA_SILVER, VGA_GRAY, VGA_MAROON, VGA_YELLOW, VGA_OLIVE, VGA_LIME, VGA_AQUA, VGA_TEAL, VGA_NAVY, VGA_FUCHSIA, VGA_PURPLE, VGA_TRANSPARENT.
Экран с I2C
Стандартный экран неудобно подключать, слишком много контактов задействовано в сборке. Существует альтернативный вариант, когда к экрану прилагается дополнительный модуль. В этом случае используется только четыре контакта (питание, земля и два аналоговых порта).
На других микроконтроллерах сигнальные выводы отличаются (Leonardo: SDA-D2, SCL-D3; MEGA, ADK, DUE: SDA-D20, SCL-D21).
Модуль может поставляться отдельно и его нужно припаять самостоятельно. Но проще сразу приобрести готовый собранный модуль с экраном. Встречаются различные модификации экранов - 4х20, 2х16.
Стандартная библиотека не подойдёт. Нужно использовать библиотеку с поддержкой I2C LiquidCrystal I2C by Frank de Brabander (GitHub).
После установки библиотеки будут доступны несколько примеров: CustomChars, HelloWorld, SerialDisplay.
Если при запуске примера не видны символы на экране, то попробуйте покрутить винт на модуле для изменения контрастности. У меня был именно такой случай.
setCursor()
Функция setCursor() позиционирует курсор жидкокристаллического индикатора, т.е. устанавливает положение, в котором на его экран будет выведен последующий текст.
- lcd — переменная типа LiquidCrystal
- col — номер знакоместа в ряду (начиная с 0 для первого знакоместа)
- row — номер ряда (начиная с 0 для первого ряда)
Подключение к Arduino
Вывод | Обозначение | Пин Arduino Uno |
---|---|---|
1 | GND | GND |
2 | VCC | 5V |
3 | VO | GND |
17 | SDA | SDA |
18 | SCL | SCL |
Для упрощения работы с LCD-дисплеем используйте встроенную библиотеку Библиотека для Arduino «Liquid Crystal I²C». В ней вы найдёте примеры кода с подробными комментариями.
write()
Функция write() записывает символ в жидкокристаллический индикатор.
- lcd — переменная типа LiquidCrystal
- data — символ, записываемый в индикатор
Таблица знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв.
Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.
Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0-9 и A-F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются.
Сравните две строки кода для вывода надписи «Яeee»:
Код для скетча Arduino
TextDirection
Выводим символы в разных направлениях, используя функции leftToRight() и rightToLeft().
Примеры работы для Espruino
В качестве примера подключим дисплей к управляющей плате Iskra JS.
rightToLeft()
Функция rightToLeft() устанавливает направление вывода символов на экран жидкокристаллического индикатора справа налево (значение по умолчанию — слева направо). Это означает, что последующие символы, выводимые на экран индикатора, пойдут справа налево, но не повлияют на выведенный ранее текст.
Знакоместо
Подключение:
UTFT myGLCD(TFT32MEGA, 38, 39, 40, 41); // дисплей на чипе ILI9341.
или
UTFT myGLCD(TFT32MEGA_2, 38, 39, 40, 41); // дисплей на чипе HX8357C.
Дисплеи поставляются на базе чипа ILI9341 или HX8357C. Если изображение на дисплее отображается зеркально, то измените тип дисплея: укажите либо TFT32MEGA, либо TFT32MEGA_2.
Если Вы не планируете использовать SD карту, то выводы 50-53 можно использовать для подключения других модулей.
Выводы не подписанные на рисунке, не используются дисплеем.
UTFT myGLCD(TFT28UNO, A2, A1, A3, A4, A0);
Если Вы не планируете использовать SD карту, то выводы 10-13 можно использовать для подключения других модулей.
Выводы не подписанные на рисунке, не используются дисплеем.
Описание работы с сенсорным экраном находится в разделе Wiki работа с TouchScreen
UTFT myGLCD(TFT01_24SP, 5, 4, 8, 7, 6);
Дисплей можно подключать к любым выводам Arduino указав № выводов при объявлении объекта myGLCD библиотеки UTFT:
UTFT myGLCD(TFT01_24SP, SDI/MOSI, SCK, CS, RESET, DC/RS);
Уровень логической «1» на входах дисплея ≤ 3,3 В.
Если Вы используете 5 В логику, то подключайте входы дисплея через делители:
При питании от 3,3 В необходимо замкнуть перемычку J1 на обратной стороне платы дисплея.
Если Вы желаете использовать SD-карту, то выводы SD_CS, SD_MOSI, SD_MISO и SD_SCK необходимо подключить к Arduino по аппаратной шине SPI:
Если аппаратный вывод CS(SS) Arduino занят, то вывод SD_CS можно подключить к любому другому выводу Arduino, указав его номер в скетче (см пример в файле image_SD библиотеки UTFT).
TouchScreen можно подключать к любым выводам Arduino указав № выводов при объявлении объекта myTouch библиотеки URTouch:
URTouch myTouch( T_CLK, T_CS, T_DIN, T_OUT, T_IRQ);
Например: URTouch myTouch(13, 12, 11, 10, 9);
Указанные в примере выводы Arduino для подключения TouchScreen пересекаются с выводами аппаратной шины SPI на платах Arduino Uno, Pro Mini, Nano и т.д. Если Вы желаете использовать на этих платах и TouchScreen, и SD-карту , то для TouchScreen нужно выбрать другие выводы Arduino, например, аналоговые выводы A0-A4, указав их в скетче при объявлении объекта:
URTouch myTouch(A0, A1, A2, A3, A4);
Описание работы с сенсорным экраном со встроенным контроллером функций TouchScreen находится в разделе Wiki работа с TouchScreen по последовательной шине данных.
UTFT myGLCD(TFT01_22SP, 5, 4, 8, 7, 6);
UTFT myGLCD(TFT18SHLD, 5, 4, 8, 7, 6);
Дисплей можно подключать к любым выводам Arduino указав № выводов при объявлении объекта myGLCD библиотеки UTFT:
UTFT myGLCD(TFT01_22SP, SDI/MOSI, SCK, CS, RESET, DC/RS);
Уровень логической «1» на входах дисплея ≤ 3,3 В.
Если Вы используете 5 В логику, то подключайте входы дисплея через делители:
Если Вы желаете использовать SD-карту, то выводы SD_CS, SD_MOSI, SD_MISO и SD_SCK необходимо подключить к Arduino по аппаратной шине SPI:
Если аппаратный вывод CS(SS) Arduino занят, то вывод SD_CS можно подключить к любому другому выводу Arduino, указав его номер в скетче (см пример в файле image_SD библиотеки UTFT).
Если Вы собираетесь использовать библиотеку UTFT для работы с другими дисплеями, то закомментируйте строку с названием Вашего дисплея в файле «memorysaver.h». А для экономии памяти, раскомментируйте остальные строки кода файла «memorysaver.h».
Выводим на дисплей текст тремя базовыми шрифтами:
Заливаем весь дисплей различными цветами:
Рисуем различные графические элементы:
display()
Функция display() включает жидкокристаллический индикатор после того, как он был выключен функцией noDisplay(). Эта функция восстанавливает текст (и курсор), который был на дисплее.
Функция home() располагает курсор в верхнем левом углу жидкокристаллического индикатора. Используется для определения начального положения при выводе последовательного текста на экран индикатора. Чтобы ещё и очистить экран индикатора, используйте вместо этой функции функцию clear().
Все функции:
- InitLCD([положение]); – Инициирует начало работы с дисплеем. Необязательный параметр может принимать одно из двух значений: PORTRAIT (вертикальная ориентация) или LANDSCAPE (горизонтальная ориентация - по умолчанию).
- clrScr(); – Очищает дисплей, стирая всю отображаемую на дисплее информацию и заливая дисплей черным цветом.
- fillScr(color); – Очищает дисплей, стирая всю отображаемую на дисплее информацию и заливая его указанным в качестве параметра цветом фона.
- getDisplayXSize(); – Возвращает количество пикселей дисплея по горизонтали, число типа int.
- getDisplayYSize(); – Возвращает количество пикселей дисплея по вертикали, число типа int.
- setColor(color); – Выбор цвета для текста и фигур, выводимых после данной функции.
- getColor(); – Возвращает установленный цвет для текста и фигур в формате RGB565, число типа word.
- setBackColor(color); – Выбор цвета для фона текста, выводимого после данной функции.
- getBackColor(); – Возвращает установленный цвет для фона текста в формате RGB565, число типа word.
- setFont(fontName); – Выбор шрифта для текста выводимого после данной функции.
- getFont(); – Возвращает указатель на выбранный шрифт.
- getFontXsize(); – Возвращает количество пикселей в одном символе шрифта, по ширине.
- getFontYsize(); – Возвращает количество пикселей в одном символе шрифта, по высоте.
- print(str,x,y[,r]); – Вывод на дисплей строк или содержимого строковых переменных.
- printNumI(int,x,y[,len[,sym]]); – Вывод на дисплей целого числа или содержимого целочисленной переменной.
- printNumF(float,dec,x,y[,sym1[,len[,sym2]]]); – Вывод на дисплей вещественного числа или содержимого переменной вещественного типа
- drawPixel(x,y); – Вывод на дисплей точки. Цвет точки определяется текущим значением цвета, устанавливаемым командой setColor().
- drawLine(x1,y1,x2,y2); – Вывод на дисплей линии, заданной координатами двух точек.
- drawRect(x1,y1,x2,y2); – Вывод на дисплей прямоугольника, противоположные углы которого заданы координатами двух точек.
- drawRoundRect(x1,y1,x2,y2); – Вывод на дисплей прямоугольника со скругленными углами.
- fillRect(x1,y1,x2,y2); – Вывод на дисплей закрашенного прямоугольника.
- drawCircle(x,y,R); – Вывод на дисплей окружности, определяемую координатами центра и радиусом.
- fillCircle(x,y,R); – Вывод на дисплей закрашенной окружности.
- drawBitmap(x1,y1,x2,y2,data[,scale]); – Вывод на дисплей картинки из массива.
- Для вывода на дисплей картинки из файла с SD-карты нужно вызвать функцию load(x1,y1,x2,y2,data); объекта библиотеки UTFT_SdRaw.
Для работы функции load, нужно установить и подключить библиотеки: UTFT_SdRaw и SdFat.
Читайте также: