Тачскрин дисплей станет украшением для любого проекта на Arduino.
В этой статье мы рассмотрим touchscreen display shield со встроенным слотом для microSD карты. TFT дисплей имеет диагональ 2.8″, подсветку, в которой используется 4 белых светодиода, и возможность отображения 262000 оттенков цветов (18 бит)! Дисплей имеет разрешением 240х320 пикселей с индивидуальным управлением. Обратите внимание, что это гораздо больше, чем, например, у черно-белого LCD дисплея 5110. На шилде встроен резистивный тачскрин, что позволяет определяеть положение пальца при нажатии на экран.
TFT shield продается в полностью собранном виде, готовый к запуску. Достаточно его просто установить сверху на вашу Arduino и подключить необходимую библиотеку в Arduino IDE. Процедура установки-наладки-первого заруска займет не больше 10 минут!
Конечно, производители не оставили нас наедине с даташитом и пожеланием «Удачи!». Есть библиотеки, которые значительно облегчат вашу работы с TFT шилдом.
Есть отличная open-source графическая библиотека, которая дает возможность рисовать пиксели, линии, прямоугольники, окружности и текст: Скачать на Github.
Кроме того, написана тач-скрин библиотека: Скачать на Github, которая определяет координаты x, y и z (давление), в которой есть пример скетча для демонстрации указанных возможностей. Данный скетч написандля Arduino, но может быть адаптирован для других микроконтроллеров!
Технические характеристики TFT дисплея:
Дополнительные вопросы и ответы
Я ознакомился с даташитом и обнаружил, что доступен SPI интерфейс. Почему вы используете параллельный интерфейс? SPI ведь лучше, будет задействовано меньше пинов!
Действительно, драйвер на дисплее поддерживает SPI, но дисплеев, которые его могут использовать нет. На тачскрин шилде соответствующие пины просто не выведены в качестве коннекторов. Скорее всего это связано с тем, что скорость передачи по SPI была бы очень медленная.
Задействованы все пины! Как я могу подключить еще что-то к Arduino?
Можно использовать protoshield или proto-screwshield. Вы можете подключить различные i2c датчики или аналоговые сенсоры к аналоговым пинам 4 и 5. Можно использовать i2c плату расширения, чтобы получить больше пинов. Если же пинов надо действительно много, можно использовать 8 пинов для передачи данных пока TFT не записывает данные. Это пины high-z и они не используются, пока пины WR и RD находятся в состоянии high.
TFT шилд 2.8 дюйма поставляется от производителей (даже из дешевого Китая) в собранном виде. Для использования достаточно просто установить его сверху на Arduino. Никаких дополнительных проводов, никаких макеток!
Adafruit в свое время подготовили библиотеку с примером скетча для использования с этими TFT дисплеями. Библиотека не очень хорошо оптимизирована, отрабатывает не на максимальной скорости, но для знакомства с сенсорным дисплеем вполне подойдет. Кроме того, она может быть использована и для других микроконтроллеров. Как бы то ни было, сейчас нас интересует именно Arduino.
По ссылке вы сможете скачать архив с библиотекой и примерами. Распакуйте скачанный архив и не забудьте корректно интегрировать библиотеку в Arduino IDE.
Вам понадобится GFX graphics core. Постумаем аналогично. Распаковываем, перекидываем в папку с библиотеками для Arduino IDE.
Если вы используете именно шилд от Adafruit, есть еще один нюанс! Откройте файл TFTLCD.h в папке с библиотеками и раскомментируйте строку, которая находится сверху:
//comment or uncomment the next line for special pinout!
#define USE_ADAFRUIT_SHIELD_PINOUT
Перезагрузите Arduino IDE. После перезагрузки должны отработать несколько графических примеров.
Библиотека GFX Library от Adafruit
Библиотека TFT LCD library основана на графической библиотеке Adaftui GFX graphics. В GFX есть много готовых функций для основы вашего проекта. Библиотека поддерживает пиксели, линии, прямоугольники, окружности, скругленные прямоугольники, треугольники, отображение текста, поворот. Скачать ее можно по ссылке.
Данный LCD TFT шилд имеет встроенный 2.8″ 4-х проводниковый резистивный дисплей. Его можно использовать для определения места контакта пальца, стилуса и т.п. Для работы с сенсорным дисплеем вам понадобится 4 пина на Arduino.
Скачать пример вы можете здесь: Github repository. Не забудьте разархивировать скачанный файл и переместить его в папку с библиотеками Arduino IDE.
Сенсорный дисплей подключается к Arduino следущим образом:
После подключения загрузите пример tftpaint_shield, который находится в библиотеке TFTLCD library. С правой стороны на экране появятся ‘боксы с цветами’. Вы можете нажать на один из боксов для выбора цвета, которым будете рисовать. Нажав на левую часть экрана вы можете его очистить.
Сенсорный дисплей сделан из тонкого стекла. Он очень хрупкий. Малейшая трещина или повреждение выведет его из строя. Будьте аккуратны при переносе дисплея, особенно с его углами. Для взаимодействия с резистивным экраном можно использовать не только пальцы, но и стилусы. Понятное дело, слишком сильно давить на поверхность дисплея тоже не стоит.
На TFT LCD дисплее 2.8″ дюйма есть встроенный слот для micoSD карты. Этот слот можно использовать для загрузки изображений! Предварительно отформатируйте карту в FAT32 или FAT16 ( более детально особенности работы SD карты с Arduino отображены здесь).
В большинстве скетчей-примеров SD карта не будет работать. Необходимо ее предварительно инициализировать.
Для увеличения скорости обмена данных можно загрузить дополнительную библиотеку здесь: Fixes & Updates to the Arduino SD Library. Не забудьте скопировать распакованную библиотеку в соответствующую папку в Arduino IDE.
Если вы пользуетесь Arduino Mega, внесите некоторые правки в файл SD/utility/Sd2Card.h. Надо снять тег комментария со строки #define MEGA_SOFT_SPI 1. Благодаря этому для обмена данными с SD картой, Arduino Mega сможет использовать те же пины, что и классические Arduino. Для тестировки можете загрузить это изображение тигра: Download this tiger bitmap and save it to the microsd card!
Запустите Arduino IDE и выберите скетч tftbmp_shield. Загрузите его на Arduino и вуаля! На экране отобразится следующее:
Для загрузки подойдут изображения, размер которых меньше 240х320 пикселей. Рисунки надо сохранять в 24-битном BMP формате. Даже если изначально рисунок не имел 24 бита, пересохраните его, так как это самый легкий формат для чтения с помощью Arduino. Можно поворачивать рисунки с использованием процедуры setRotation().
По умолчанию разработчики шилда считают, что вы постоянно будете использовать подсветку. Однако вы можете управлять ее яркость с помощью ШИМ выходов или вообще выключать для экономии энергии. Для этого вам понадобится немного потрудиться. Найдите на задней стороне TFT LCD шилда 2.8″ два коннектора подсветки. С помощью ножа уберите дорожку между клемами VCC и соедините два квадрата, обозначенных Pin3. После этого вы сможете управлять подсветкой с использованием цифрового пина 3.
Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!
arduino-diy.com
Внимание! Дисплей работает от источника питания 5 вольт, а работа логики — 3,3 вольта. Если вы используете Arduino c 5-вольтовой логикой, то подключайте управляющие пины дисплея к Arduino через резистивные делители. В противном случае TFT-экран может выйти из строя. Для плат с 3,3 вольтовой логикой резистивные делители не нужны.
В качестве примера возьмём управляющую платформу Arduino Uno. Общение с TFT-экраном происходит через шину SPI. Подключаем управляющие пины к Arduino через делители напряжения, чтобы не повредить дисплей. Руководствуйтесь схемой ниже: Для облегчения работы с TFT-экраном используйте библиотеку UTFT, которая включает в себя разнообразные готовые примеры. Библиотека подходит как для работы с контроллерами, основанными на AVR-платформе, так и с контроллерами на ARM-платформе.
Прошейте Arduino скетчем приведённым ниже. В результате на экране вы должны увидеть надпись «HelloWorld».
// библиотека для работы с дисплеем #include <UTFT.h> // создаём объект класса UTFT // и передаём идентификатор модели дисплея и номера пинов // к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS UTFT myGLCD(TFT01_22SP, 9, 8, 12, 11, 10); // объявления встроенного шрифта extern uint8_t BigFont[]; void setup() { // инициализируем дисплей myGLCD.InitLCD(); // очищаем экран myGLCD.clrScr(); // выбираем тип шрифта myGLCD.setFont(BigFont); // печатаем «Hello, world!» в центре верхней строки дисплея myGLCD.print("Hello, world!", CENTER, 0); } void loop() { }
Метод InitLCD
– инициализирует дисплей и задает горизонтальную или вертикальную ориентацию. В качестве параметра указывается идентификатор ориентации. Будучи заданной без параметров команда устанавливает горизонтальную ориентацию. Если указать параметр PORTRAIT или 0 – будет выбрана вертикальная ориентация, если указать LANDSCAPE или 1 – горизонтальная.
Метод clrScr
– очищает дисплей, стирая всю отображаемую на дисплее информацию и заливает его черным цветом. Параметров не имеет.
Метод print
– выводит на дисплей текст, содержимое символьной переменной или объекта типа String. В качестве параметров передаются выводимый текст, координаты верхнего левого угла области печати.
Эта команда предназначена для вывода текстовой информации. Координаты печати X
и Y
задаются в пикселях и могут быть переданы как явно, так и через целочисленные переменные или выражения. Существуют также три предопределенных идентификатора, предназначенные для использования в качестве координаты X
:
LEFT
– текст выравнивается по левой границе дисплея
CENTER
– текст выравнивается по центру дисплея
RIGHT
– текст выравнивается по правой границе дисплея
Библиотека UTFT
позволяет работать с подгружаемыми шрифтами. Шрифты хранятся в виде массивов данных, которые размещаются в отдельных файлах и подключаются к тексту программы. Исходная библиотека включает 3 шрифта.
SmallFont – 95 символов 8×12
BigFont – 95 символов 16×16
SevenSegNumFont – 10 цифровых символов 32×50
Выводим текст с разными шрифтами и изменяем их ориентацию на дисплее:
// библиотека для работы с дисплеем #include <UTFT.h> // создаём объект класса UTFT // и передаём идентификатор модели дисплея и номера пинов // к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS UTFT myGLCD(TFT01_22SP, 9, 8, 12, 11, 10); // объявления встроенных шрифтов extern uint8_t SmallFont[]; extern uint8_t BigFont[]; extern uint8_t SevenSegNumFont[]; void setup() { } void loop() { // инициализируем дисплей с вертикальной ориентацией myGLCD.InitLCD(0); // очищаем экран myGLCD.clrScr(); // выбираем большой шрифт myGLCD.setFont(BigFont); // печатаем строку в центре верхней строки дисплея myGLCD.print("TFT01_22SP", CENTER, 0); // выбираем большой шрифт myGLCD.setFont(SmallFont); // печатаем строку в указанной строке позиции myGLCD.print("Hello from Amperka!", CENTER, 50); // выбираем семисегментный шрифт myGLCD.setFont(SevenSegNumFont); // печатаем строку в указанной строке позиции myGLCD.print("12345", CENTER, 100); // ждём 1 секунду delay(1000); // инициализируем дисплей с горизонтальной ориентацией myGLCD.InitLCD(1); // очищаем экран myGLCD.clrScr(); // выбираем большой шрифт myGLCD.setFont(BigFont); // печатаем строку в центре верхней строки дисплея myGLCD.print("Hello, user!", CENTER, 0); // выбираем большой шрифт myGLCD.setFont(SmallFont); // печатаем строку в указанной строке позиции myGLCD.print("The screen is 2.2 diagonal", CENTER, 50); // выбираем семисегментный шрифт myGLCD.setFont(SevenSegNumFont); // печатаем строку в указанной строке позиции myGLCD.print("67890", CENTER, 100); // ждём 1 секунду delay(1000); }
У каждого метода, отвечающего за цветность, есть три параметра: R, G, B. Допустимые значения для параметров – от 0 до 255. Задавайте уровень каждого цвета вручную или используйте готовые идентификаторы:
Идентификатор цвета | Цвет |
---|---|
VGA_SILVER | серебряный |
VGA_GRAY | серый |
VGA_WHITE | белый |
VGA_MAROON | красно-коричневый |
VGA_RED | красный |
VGA_PURPLE | пурпурный |
VGA_FUCHSIA | фуксия |
VGA_GREEN | зеленый |
VGA_LIME | лайм |
VGA_NAVY | темно-синий |
VGA_BLUE | синий |
VGA_TEAL | сине-зеленый |
VGA_AQUA | морская волна |
Добавим красок в строку «HelloWorld» и выведем несколько цветовых вариантов.
// библиотека для работы с дисплеем #include <UTFT.h> // создаём объект класса UTFT // и передаём идентификатор модели дисплея и номера пинов // к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS UTFT myGLCD(TFT01_22SP, 9, 8, 12, 11, 10); // объявления встроенного шрифта extern uint8_t BigFont[]; void setup() { // инициализируем дисплей с вертикальной ориентацией myGLCD.InitLCD(0); // очищаем экран myGLCD.clrScr(); // выбираем большой шрифт myGLCD.setFont(BigFont); // устанавливаем красный цвет «чернил» для печати и рисования myGLCD.setColor(VGA_RED); // печатаем строку в указанной строке позиции myGLCD.print("Hello, World!", CENTER, 0); // устанавливаем синий цвет «чернил» для печати и рисования myGLCD.setColor(VGA_BLUE); // печатаем строку в указанной строке позиции myGLCD.print("Hello, World!", CENTER, 36); // устанавливаем зелёный цвет «чернил» для печати и рисования myGLCD.setColor(VGA_GREEN); // печатаем строку в указанной строке позиции myGLCD.print("Hello, World!", CENTER, 72); // устанавливаем серебряный цвет «чернил» для печати и рисования myGLCD.setColor(VGA_SILVER); // печатаем строку в указанной строке позиции myGLCD.print("Hello, World!", CENTER, 108); } void loop() { }
Опциональный параметр метода print
позволяет печатать строки под углом от 0 до 359 градусов. Вращение задается относительно координат печати (левый верхний угол). Нулевое значение угла приводит к горизонтальной печати, далее, по мере увеличения угла, происходит вращение текста по часовой стрелке на заданный угол. Приведенный ниже пример позволяет получить необычный графический эффект:
// библиотека для работы с дисплеем #include <UTFT.h> // создаём объект класса UTFT // и передаём идентификатор модели дисплея и номера пинов // к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS UTFT myGLCD(TFT01_22SP, 9, 8, 12, 11, 10); // объявления встроенного шрифта extern uint8_t BigFont[]; void setup() { // инициализируем дисплей с вертикальной ориентацией myGLCD.InitLCD(0); // очищаем экран myGLCD.clrScr(); // выбираем большой шрифт myGLCD.setFont(BigFont); // устанавливаем зелёный цвет «чернил» для печати и рисования myGLCD.setColor(VGA_GREEN); } void loop() { // каждый цикл печатаем строку с поворотам на 20 градусов for (int deg = 0; deg < 360; deg += 20) { String text = "Amperka"; myGLCD.print(text, 120, 160, deg); } }
Методы печати не определяют выход за пределы дисплея. Так что за максимальной длиной строки придется следить самостоятельно. Если строка окажется слишком длинной, её «хвост» будет выводится поверх уже напечатанного текста.
Программно вывод геометрических фигур реализован через методы библиотеки UTFT
, которые используют попиксельный вывод, массив 240×320 точек.
Метод | Описание | Параметры |
---|---|---|
drawPixel(x, y) | Вывод пикселя | x, y координата пикселя |
drawLine(x1, y1 ,x2 ,y2) | Вывод линии | x1, y1 и x2, y2 координаты начальной и конечной точки линии |
drawRect(x1, y1 ,x2 ,y2) | Вывод прямоугольника | x1, y1 и x2, y2 координаты двух противоположных углов |
drawFillRect(x1, y1 ,x2 ,y2) | Вывод закрашенного прямоугольника | x1, y1 и x2, y2 координаты двух противоположных углов |
drawCircle(x, y, r) | Вывод окружности | x, y координаты центра окружности, r радиус |
drawfillCircle(x, y, r) | Вывод закрашенной окружности | x, y координаты центра окружности, r радиус |
Выведем их на экран.
// библиотека для работы с дисплеем #include <UTFT.h> // создаём объект класса UTFT // и передаём идентификатор модели дисплея и номера пинов // к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS UTFT myGLCD(TFT01_22SP, 9, 8, 12, 11, 10); void setup() { // инициализируем дисплей с вертикальной ориентацией myGLCD.InitLCD(0); // очищаем экран myGLCD.clrScr(); } void loop() { // устанавливаем чёрный цвет «чернил» для печати и рисования myGLCD.setColor(0, 0, 0); // вывод закрашенного прямоугольника myGLCD.fillRect(1, 1, 240, 320); // выводим 5 прямоугольников разными цветами for (int i = 1; i < 6; i++) { switch (i) { case 1: myGLCD.setColor(255, 0, 255); break; case 2: myGLCD.setColor(255, 0, 0); break; case 3: myGLCD.setColor(0, 255, 0); break; case 4: myGLCD.setColor(0, 0, 255); break; case 5: myGLCD.setColor(255, 255, 0); break; } myGLCD.fillRect(40+(i*20), 30+(i*20), 100+(i*20), 90+(i*20)); } delay(2000); // устанавливаем чёрный цвет «чернил» для печати и рисования myGLCD.setColor(0, 0, 0); // вывод закрашенного прямоугольника myGLCD.fillRect(1, 1, 240, 320); // выводим 5 прямоугольников разными цветами for (int i = 1; i < 6; i++) { switch (i) { case 1: myGLCD.setColor(255, 0, 255); break; case 2: myGLCD.setColor(255, 0, 0); break; case 3: myGLCD.setColor(0, 255, 0); break; case 4: myGLCD.setColor(0, 0, 255); break; case 5: myGLCD.setColor(255, 255, 0); break; } myGLCD.fillCircle(170-(i*20), 60+(i*20), 30); } delay(2000); }
Мы рассмотрели команды рисования графических примитивов. Кстати, для библиотеки UTFT
существует дополнение UTFT_Geometry, которое позволяет выводить на дисплей треугольники (контурные и заполненные), дуги окружностей и сектора кругов.
Метод drawBitmap
позволяет выводить на дисплей специально подготовленное растровое изображение. В качестве параметров задаются координаты верхнего левого угла изображения, его размеры и имя массива, в котором хранится закодированное изображение. Опциональный параметр scale позволяет управлять масштабированием изображения при выводе на дисплей.
Подготовим изображение для вывода на дисплей. Нам понадобиться графический редактор GIMP и утилита ImageConverter565
, которая поставляется вместе с библиотекой и располагается в папке Tools.
В графическом редакторе GIMP откройте картинку, которую хотите отобразить на дисплее.
Преобразуйте картинку до размеров дисплея, не больше чем 240×320. Советуем изменить только один параметр, второй автоматически откалибруется сам. Это позволит сохранить пропорции изображения.
Теперь выставьте размер холста 240×320. Если всё сделано правильно, картинка не должна выходить за пределы холста.
Сохраните изображение в формате .jpeg и откройте в программе ImageConverter565.
Изображение размером 240×320 пикселей займет непозволительно много места в памяти контроллера, поэтому мы уменьшим его в 2 раза (120×160 пикселей) и воспользуемся масштабированием. Для этого установите флаг «Reduce size to» и задайте требуемые размеры картинки (120×160).
В переключателе «Save As» выберем «.c»
Для AVR-платформы, в переключателе «Target Board» выберем «AVR», для ARM-платформу — «ARM/PIC32»
В поле «Array Name» задайте имя картинки и нажмите «Save».
В результате работы конвертера вы получите файл с расширением «.c», в котором будет храниться информация о картинке и закодированное изображение. Поместите этот файл в папку Вашего проекта и объявите в программе массив при помощи спецификатора extern
так же, как мы это делали для шрифтов. Только в квадратных скобках обязательно нужно указать размер массива в 16-ричном формате. Это значение находится в первом элементе массива, его можно посмотреть открыв полученный в результате конвертирования файл в любом текстовом редакторе.
Не забудьте после копирования и подключения массива закрыть и снова открыть файл программы. При этом файл массива откроется на соседней вкладке рядом с текстом программы.
Теперь выведем изображение на дисплей:
// библиотека для работы с дисплеем #include <UTFT.h> // создаём объект класса UTFT // и передаём идентификатор модели дисплея и номера пинов // к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS UTFT myGLCD(TFT01_22SP, 9, 8, 12, 11, 10); // объявления встроенного шрифта extern uint8_t BigFont[]; // объявления двух массив изображений extern unsigned int amperka[0x400]; extern unsigned int raspberry[0x400]; void setup() { // инициализируем дисплей с горизонтальной ориентацией myGLCD.InitLCD(); } void loop() { // закрашиваем дисплей белым цветом myGLCD.fillScr(255, 255, 255); int x = 0; for (int s = 0; s < 4; s++) { x += (s*32); myGLCD.drawBitmap(x, 0, 32, 32, amperka, s+1); } x = 0; for (int s = 4; s > 0; s--) { myGLCD.drawBitmap(x, 224-(s*32), 32, 32, raspberry, s); x += (s*32); } delay(1000); }
Наименование: TFT01-22SP
Контроллер: ILI9340C
Диагональ: 2,2 дюйма
Напряжение питание: 5 В
Напряжение сигналов: 3,3 В
Разрешение: 240 x 320 (RGB)
Интерфейс: SPI
Дополнительно: разъём для SD-карты
Размер экрана: 37×48 мм
Размер модуля: 40×67 мм
При длительной работе в закрытом корпусе возможен нагрев экрана. Нагрев можно уменьшить, если отключить подсветку экрана, или делать её менее яркой при помощи PWM через какой-нибудь транзистор в те моменты, когда экран не используется.
wiki.amperka.ru
Общение с TFT-экраном происходит через 16-битный параллельный интерфейс.
Для работы с платформами форм-фактора Arduino mega 2560, вставьте дисплей сверху методом «бутерброда». Для коммуникации микроконтроллером дисплей задействует пины: D25-D28, D32-D40, D44-D53. Остальные пины можно использовать по своему усмотрению.
Для облегчения работы с TFT-экраном используйте библиотеку UTFT, которая включает в себя разнообразные готовые примеры. Библиотека подходит как для работы с контроллерами, основанными на AVR-платформе, так и с контроллерами на ARM-платформе.
Прошейте Arduino скетчем приведённым ниже. В результате на экране вы должны увидеть надпись «HelloWorld».
// библиотека для работы с дисплеем #include <UTFT.h> // создаём объект класса UTFT // и передаём идентификатор модели дисплея и номера управляющих пинов UTFT myGLCD(CTE32HR, 38, 39, 40, 41); // объявления встроенного шрифта extern uint8_t BigFont[]; void setup() { // инициализируем дисплей myGLCD.InitLCD(); // очищаем экран myGLCD.clrScr(); // выбираем тип шрифта myGLCD.setFont(BigFont); // печатаем «Hello, world!» в центре верхней строки дисплея myGLCD.print("Hello, world!", CENTER, 0); } void loop() { }
Метод InitLCD
– инициализирует дисплей и задает горизонтальную или вертикальную ориентацию. В качестве параметра указывается идентификатор ориентации. Будучи заданной без параметров команда устанавливает горизонтальную ориентацию. Если указать параметр PORTRAIT или 0 – будет выбрана вертикальная ориентация, если указать LANDSCAPE или 1 – горизонтальная.
Метод clrScr
– очищает дисплей, стирая всю отображаемую на дисплее информацию и заливая дисплей черным цветом. Параметров не имеет.
Метод print
– выводит на дисплей текст, содержимое символьной переменной или объекта типа String. В качестве параметров передаются выводимый текст, координаты верхнего левого угла области печати.
Эта команда предназначена для вывода текстовой информации. Координаты печати X
и Y
задаются в пикселях и могут быть переданы как явно, так и через целочисленные переменные или выражения. Существуют также три предопределенных идентификатора, предназначенные для использования в качестве координаты X
:
LEFT
– текст выравнивается по левой границе дисплея
CENTER
– текст выравнивается по центру дисплея
RIGHT
– текст выравнивается по правой границе дисплея
Библиотека UTFT
позволяет работать с подгружаемыми шрифтами. Шрифты хранятся в виде массивов данных, которые размещаются в отдельных файлах и подключаются к тексту программы. Исходная библиотека включает 3 шрифта.
SmallFont – 95 символов 8×12
BigFont – 95 символов 16×16
SevenSegNumFont – 10 цифровых символов 32×50
Выводим текст с разными шрифтами и изменяем их ориентацию на дисплее:
// библиотека для работы с дисплеем #include <UTFT.h> // создаём объект класса UTFT // и передаём идентификатор модели дисплея и номера управляющих пинов UTFT myGLCD(CTE32HR, 38, 39, 40, 41); // объявления встроенных шрифтов extern uint8_t SmallFont[]; extern uint8_t BigFont[]; extern uint8_t SevenSegNumFont[]; void setup() { } void loop() { // инициализируем дисплей с вертикальной ориентацией myGLCD.InitLCD(0); // очищаем экран myGLCD.clrScr(); // выбираем большой шрифт myGLCD.setFont(BigFont); // печатаем строку в центре верхней строки дисплея myGLCD.print("CTE32HR", CENTER, 0); // выбираем большой шрифт myGLCD.setFont(SmallFont); // печатаем строку в указанной строке позиции myGLCD.print("Hello from Amperka!", CENTER, 100); // выбираем семисегментный шрифт myGLCD.setFont(SevenSegNumFont); // печатаем строку в указанной строке позиции myGLCD.print("12345", CENTER, 200); // ждём 1 секунду delay(1000); // инициализируем дисплей с горизонтальной ориентацией myGLCD.InitLCD(1); // очищаем экран myGLCD.clrScr(); // выбираем большой шрифт myGLCD.setFont(BigFont); // печатаем строку в центре верхней строки дисплея myGLCD.print("Hello, user!", CENTER, 0); // выбираем большой шрифт myGLCD.setFont(SmallFont); // печатаем строку в указанной строке позиции myGLCD.print("The screen is 3.2 diagonal", CENTER, 100); // выбираем семисегментный шрифт myGLCD.setFont(SevenSegNumFont); // печатаем строку в указанной строке позиции myGLCD.print("67890", CENTER, 200); // ждём 1 секунду delay(1000); }
У каждого метода, отвечающего за цветность, есть три параметра: R,G,B. Допустимые значения для параметров – от 0 до 255. Задавайте уровень каждого цвета вручную или используйте готовые идентификаторы:
Идентификатор цвета | Цвет |
---|---|
VGA_SILVER | серебряный |
VGA_GRAY | серый |
VGA_WHITE | белый |
VGA_MAROON | красно-коричневый |
VGA_RED | красный |
VGA_PURPLE | пурпурный |
VGA_FUCHSIA | фуксия |
VGA_GREEN | зеленый |
VGA_LIME | лайм |
VGA_NAVY | темно-синий |
VGA_BLUE | синий |
VGA_TEAL | сине-зеленый |
VGA_AQUA | морская волна |
Добавим красок в строку «HelloWorld» и выведем её несколько цветных вариантов.
// библиотека для работы с дисплеем #include <UTFT.h> // создаём объект класса UTFT // и передаём идентификатор модели дисплея и номера управляющих пинов UTFT myGLCD(CTE32HR, 38, 39, 40, 41); // объявления встроенного шрифта extern uint8_t BigFont[]; void setup() { // инициализируем дисплей с вертикальной ориентацией myGLCD.InitLCD(); // очищаем экран myGLCD.clrScr(); // выбираем большой шрифт myGLCD.setFont(BigFont); // устанавливаем красный цвет «чернил» для печати и рисования myGLCD.setColor(VGA_RED); // печатаем строку в указанной строке позиции myGLCD.print("Hello, World!", CENTER, 0); // устанавливаем синий цвет «чернил» для печати и рисования myGLCD.setColor(VGA_BLUE); // печатаем строку в указанной строке позиции myGLCD.print("Hello, World!", CENTER, 36); // устанавливаем зелёный цвет «чернил» для печати и рисования myGLCD.setColor(VGA_GREEN); // печатаем строку в указанной строке позиции myGLCD.print("Hello, World!", CENTER, 72); // устанавливаем серебряный цвет «чернил» для печати и рисования myGLCD.setColor(VGA_SILVER); // печатаем строку в указанной строке позиции myGLCD.print("Hello, World!", CENTER, 108); } void loop() { }
Еще один опциональный параметр метода print
позволяет печатать строки под углом от 0 до 359 градусов. Вращение задается относительно координат печати (левый верхний угол). Нулевое значение угла приводит к горизонтальной печати, далее, по мере увеличения угла, происходит вращение текста по часовой стрелке на заданный угол. Приведенный ниже пример позволяет получить необычный графический эффект:
// библиотека для работы с дисплеем // библиотека для работы с дисплеем #include <UTFT.h> // создаём объект класса UTFT // и передаём идентификатор модели дисплея и номера управляющих пинов UTFT myGLCD(CTE32HR, 38, 39, 40, 41); // объявления встроенного шрифта extern uint8_t BigFont[]; void setup() { // инициализируем дисплей с горизонтальной ориентацией myGLCD.InitLCD(); // очищаем экран myGLCD.clrScr(); // выбираем большой шрифт myGLCD.setFont(BigFont); // устанавливаем зелёный цвет «чернил» для печати и рисования myGLCD.setColor(VGA_GREEN); } void loop() { // каждый цикл печатаем строку с поворотам на 20 градусов for (int deg = 0; deg < 360; deg += 20) { String text = "Amperka"; myGLCD.print(text, 240, 160, deg); } }
Методы печати не умеют определять выход за пределы дисплея. Так что за максимальной длиной строки придется следить самостоятельно. Если строка окажется слишком длинной, то ее «хвост» может быть выведен поверх уже напечатанного текста.
Программно вывод геометрических фигур реализован через методы библиотеки UTFT
, которые используют попиксельный вывод, массив 480×320 точек:
Метод | Описание | Параметры |
---|---|---|
drawPixel(x, y) | Вывод пикселя | x, y координата пикселя |
drawLine(x1, y1 ,x2 ,y2) | Вывод линии | x1, y1 и x2, y2 координаты начальной и конечной точки линии |
drawRect(x1, y1 ,x2 ,y2) | Вывод прямоугольника | x1, y1 и x2, y2 координаты двух противоположных углов |
drawFillRect(x1, y1 ,x2 ,y2) | Вывод закрашенного прямоугольника | x1, y1 и x2, y2 координаты двух противоположных углов |
drawCircle(x, y, r) | Вывод окружности | x, y координаты центра окружности, r радиус |
drawfillCircle(x, y, r) | Вывод закрашенной окружности | x, y координаты центра окружности, r радиус |
Выведем их на экран.
// библиотека для работы с дисплеем #include <UTFT.h> // создаём объект класса UTFT // и передаём идентификатор модели дисплея и номера управляющих пинов UTFT myGLCD(CTE32HR, 38, 39, 40, 41); void setup() { // инициализируем дисплей с вертикальной ориентацией myGLCD.InitLCD(); // очищаем экран myGLCD.clrScr(); } void loop() { // устанавливаем чёрный цвет «чернил» для печати и рисования myGLCD.setColor(0, 0, 0); // очищаем экран myGLCD.clrScr(); // выводим 5 прямоугольников разными цветами for (int i = 1; i < 6; i++) { switch (i) { case 1: myGLCD.setColor(255, 0, 255); break; case 2: myGLCD.setColor(255, 0, 0); break; case 3: myGLCD.setColor(0, 255, 0); break; case 4: myGLCD.setColor(0, 0, 255); break; case 5: myGLCD.setColor(255, 255, 0); break; } myGLCD.fillRect(70+(i*20), 60+(i*20), 150+(i*20), 140+(i*20)); } delay(2000); // устанавливаем чёрный цвет «чернил» для печати и рисования myGLCD.setColor(0, 0, 0); // очищаем экран myGLCD.clrScr(); // выводим 5 окружностей разными цветами for (int i = 1; i < 6; i++) { switch (i) { case 1: myGLCD.setColor(255, 0, 255); break; case 2: myGLCD.setColor(255, 0, 0); break; case 3: myGLCD.setColor(0, 255, 0); break; case 4: myGLCD.setColor(0, 0, 255); break; case 5: myGLCD.setColor(255, 255, 0); break; } myGLCD.fillCircle(300-(i*20), 100+(i*20), 40); } delay(2000); }
Мы рассмотрели команды рисования графических примитивов. Кстати, для библиотеки UTFT
существует дополнение UTFT_Geometry, которое позволяет выводить на дисплей треугольники (контурные и заполненные), дуги окружностей и сектора кругов.
Метод drawBitmap
позволяет выводить на дисплей специально подготовленное растровое графическое изображение. В качестве параметров задаются координаты верхнего левого угла изображения, его размеры и имя массива, в котором хранится закодированное изображение. Опциональный параметр scale позволяет управлять масштабированием изображения при выводе на дисплей.
Подготовим изображение для вывода на дисплей. Для этого понадобится сделать ряд действий описанных ниже, а также графический редактор GIMP и специальная утилита ImageConverter565
, которая поставляется вместе с библиотекой и располагается в папке Tools.
В графическом редакторе GIMP откройте картинку, которую хотите отобразить на дисплее.
Далее преобразуйте картинку, так чтоб она вписалась в дисплей, то есть не больше чем 480×320. Советуем менять, только один параметр картинки, а второй откалибруется сам, что бы сохранилась пропорция изображения.
Теперь выставьте размер холста 480×320, при это если всё правильно сделали картинка не должна выходить за пределы холста.
Сохраните изображение в формате .jpeg и откройте в программе ImageConverter565.
Фоновое изображение размером 480×320 пикселей займет непозволительно много места в памяти контроллера, поэтому мы используем изображение, уменьшенное в 2 раза (240×160 пикселей) и воспользуемся масштабированием. Для этого установите флаг «Reduce size to» и задайте требуемые размеры картинки (240×160).
В переключателе «Save As» выберем «.c»
Если используете AVR-платформу, то в переключателе «Target Board» выберем «AVR», а если ARM-платформу, то — «ARM/PIC32»»
В поле «Array Name» задайте имя картинки и нажмите «Save».
В результате работы конвертера вы получите файл с расширением «.c», в котором будет храниться информация о картинке и закодированное изображение. Поместите этот файл в папку Вашего проекта и объявите в программе массив при помощи спецификатора extern
так же, как мы это делали для шрифтов. Только в квадратных скобках обязательно нужно указать размер массива в 16-ричном формате. Это значение находится в первом элементе массива, его можно посмотреть открыв полученный в результате конвертирования файл в любом текстовом редакторе.
Не забудьте после копирования и подключения массива закрыть и снова открыть файл программы. При этом файл массива откроется на соседней вкладке рядом с текстом программы.
Теперь выведем изображение на дисплей:
// библиотека для работы с дисплеем #include <UTFT.h> // создаём объект класса UTFT // и передаём идентификатор модели дисплея и номера управляющих пинов UTFT myGLCD(CTE32HR, 38, 39, 40, 41); // объявления двух массив изображений extern unsigned int amperka[0x1000]; extern unsigned int raspberry[0x1000]; void setup() { // инициализируем дисплей с горизонтальной ориентацией myGLCD.InitLCD(); } void loop() { // закрашиваем дисплей белым цветом myGLCD.fillScr(255, 255, 255); // выводим изображение int x = 0; for (int s = 0; s < 3; s++) { x += (s*96); myGLCD.drawBitmap(x, 0, 64, 64, amperka, s+1); } x = 0; for (int s = 3; s > 0; s--) { myGLCD.drawBitmap(x, 320-(s*64), 64, 64, raspberry, s); x += (s*64); } delay(1000); }
Если вам не хватает объёма памяти микроконтроллера для хранения изображений, вы можете загружать их прямо с SD-карты. Для облегчения работы c выводом изображений на дисплей вам понадобится скачать и подключить библиотеки UTFT_SdRaw и SdFat.
Метод load
библиотеки UTFT_SdRaw
позволяет выводить на дисплей специально подготовленное растровое графическое изображение.
myFiles.load(x, y, sizeX, sizeY, name, scale)
В качестве параметров задаются координаты верхнего левого угла изображения, его размеры, имя массива, в котором хранится закодированное изображение. Опциональный параметр scale позволяет управлять масштабированием изображения при выводе на дисплей.
Подготовим изображение для вывода на дисплей. Для этого понадобится:
Утилита ImageConverter565
, которая поставляется вместе с библиотекой UTFT
и располагается в директории Tools
.
Далее необходимо выполнить некоторый ряд действий:
В графическом редакторе GIMP откройте картинку.
Далее преобразуйте изображение, так чтоб оно вписалось в дисплей, то есть не больше чем 480×320.
Теперь выставьте размер холста 480×320, при это если всё правильно сделали картинка не должна выходить за пределы холста.
Сохраните изображение в формате .jpeg
.
Откройте картинку в программе ImageConverter565.
Установите флаг «Reduce size to» и задайте требуемые размеры картинки (480×320).
В переключателе «Save As» выберите .raw
Если используете AVR-платформу, то в переключателе «Target Board» выберем «AVR», а если ARM-платформу, то — «ARM/PIC32»»
В поле «Array Name» задайте имя изображения и нажмите «Save».
В результате работы конвертера вы получите файл с расширением .raw
, в котором будет храниться информация о картинке и закодированное изображение. Скопируйте этот файл на SD-карту.
Далее вставьте SD-карту в слот с обратной стороны дисплея и прошейте Arduino скетчем приведённым ниже.
/* В качестве примера скопируйте файл «Arduino.raw» входящим в состав библиотеки «UTFT_SdRaw» на SD-карту */ #include <SPI.h> // расширенная библиотека для работы с SD-картой #include <SdFat.h> // библиотека для работы с дисплеем #include <UTFT.h> // библиотека для вывода изображений на дисплей с SD-карты #include <UTFT_SdRaw.h> // пин ChipSelect к которому подключена SD-карта #define SD_CHIP_SELECT 53 // создаём объект работы с SD-картой SdFat sd; // создаём объект класса UTFT // и передаём идентификатор модели дисплея и номера управляющих пинов UTFT myGLCD(CTE32HR, 38, 39, 40, 41); // объявления встроенного шрифта extern uint8_t BigFont[]; // создаём объект для работы и вывода изображений на дисплей UTFT_SdRaw myFiles(&myGLCD); void setup() { // инициализируем дисплей с вертикальной ориентацией myGLCD.InitLCD(); // очищаем экран myGLCD.clrScr(); // выбираем большой шрифт myGLCD.setFont(BigFont); // ждём успешной инициализации SD-карты while (!sd.begin(SD_CHIP_SELECT)) { // устанавливаем красный цвет «чернил» для печати и рисования myGLCD.setColor(VGA_RED); // печатаем строку в указанной строке позиции myGLCD.print("SD Card failed!", CENTER, 100); delay(1000); } // устанавливаем зелёный цвет «чернил» для печати и рисования myGLCD.setColor(VGA_GREEN); // печатаем строку в указанной строке позиции myGLCD.print("SD Card initialised", CENTER, 100); // ждём 1 секунду delay(1000); // выводим изображение с SD-карты на дисплей myFiles.load(0, 0, 480, 320, "Arduino.raw"); } void loop() { }
Наименование: CTE32HR
Контроллер: HX8357B
Диагональ: 3,2 дюйма
Рабочее напряжение: 3,3-5 В
Разрешение: 480×320 (RGB)
Интерфейс: 16-битный параллельный интерфейс
Дополнительно: разъём для SD-карты
Размер экрана: 70×43 мм
Размер модуля: 89×54 мм
wiki.amperka.ru
Для реализации данного проекта нам понадобится:
— Arduino Uno
— LCD TFT 3.5” Shield для подключения к Arduino Uno
— Датчик температуры ds18b20
— Резистор 4.7 Ком 0.25 Вт
— Резистор 62 Ом 2 шт
— Аккумулятор Ni-Mn, 1.2V, 1000mA 6 шт
— Синий светодиод 5мм 4 шт
— Фанера толщиной 10 мм
— Немного тонкого пластика или картона
— Наждачная бумага
— Электролобзик
— Термоклей
— Паяльник
— Припой, канифоль
— Изолента
— Двусторонний скотч
— Соединительные провода
— Акриловая краска
— Красители для акриловой краски
— Дрель
— Сверла по дереву 5 мм и 3 мм
— Саморезы по дереву 3 х 30 мм
Шаг 1 Подготовка экрана.
Для начала возьмем экран, перед установкой его необходимо немного подготовить. В моем случае он выглядит так:
У вас он может немного отличаться, их много разновидностей. Подсветка экрана запитана через стабилизатор на 3.3 вольта и резистор от 5 вольт с Arduino. Это хорошо видно на фото:
Такая схема делает не возможным управление подсветкой, а оно пригодится, делать меньше яркость на ночь, например. Для осуществления возможности контроля яркости разрезаем дорожку около резистора и припаиваем провод соединяющий выход стабилизатора напряжения и резистор. Приклеиваем сверху изоленту, чтобы не было случайных КЗ. Потом мы разрежем этот провод и подключим к Arduino или просто поставим выключатель в разрыв. В итоге должно получится так:
Теперь экран готов к установке
Шаг 2 Подготовка Arduino Uno.
Экран использует много контактов Arduino, кроме этого на плате с экраном часто размещают слот под SD карту. Еще одна проблема заключается в том, что при соединении экрана и Arduino оставшиеся выводы Arduino становятся не доступны. Поэтому надо выбирать аналог Arduino Uno с подготовленными дополнительными посадочными гнездами для выводов. Таким образом мы сможем припаять гребенку к свободным выводам в обратную сторону. Итак, мы откажемся от слота SD карты в пользу свободных выводов. Распаиваем в обратную сторону следующие выводы: D0, D1, D10, D11, D12, D13, A5. Также с обратной стороны нам понадобятся выводы +5 вольт, GND, RES. Для питания будем использовать Ni-Mn аккумуляторы, и будет необходимо их заряжать, для этих целей припаиваем провода к разъему питания Arduino, таким образом мы сможет и заряжать аккумуляторы и питать Arduino во время зарядки. В конечном итоге получаем следующее:
Шаг 3 Изготовление корпуса.
Начнем с изготовления корпуса для наших часов. За основу возьмем фанеру толщиной 10 мм. Форма может быть разной и, если вам не понравилась выбранная мною форма, вы можете изготовить шаблон и вырезать своей формой. Но если вы решили сделать такой же, как и у меня, тогда распечатываем следующую картинку на любом принтере в масштабе 100%:
Вырезаем распечатанный шаблон по внешнему краю. Прикладываем шаблон к фанере, очерчиваем и вырезаем, на этот раз из фанеры, две такие детали. В первой детали необходимо вырезать прямоугольник размером нашего экрана. Для этого размещаем экран посередине нашей заготовки, обратите внимание, ориентировать по середине надо сам экран, плата на которой находится наш экран не симметрична. Поэтому посередине размещаем сам экран, а очерчивает по размерам платы и вырезаем в заготовке этот прямоугольник:
Далее необходимо соединить экран и Arduino Uno. Прикладываем к нашей заготовке и отмечаем на фанере места вырезов под USB порт и разъем питания Arduino. Используя нож прорезаем по отмеченным линиям, но не до конца, а на только на нужную глубину:
Кладем заготовку из фанеры на ровную поверхность, внутрь кладем экран. Ровная поверхность нужна чтобы экран и передняя часть заготовки находилась в одной плоскости. Обратите внимание чтобы вырезы под USB и разъем питания Arduino совпадали с их фактическим расположением. Используя термоклеевой пистолет приклеиваем экран к фанере, заодно можно приклеить и провода подсветки, чтобы их случайно не выдрать:
С лицевой стороны будет выглядеть так:
Покрываем нашу заготовку акриловой краской. Я выбрал акриловою краску так как она не пахнет и быстро сохнет. Используя колер придаем белой краске нужный нам цвет. Мне нравится фиолетовый. Вы можете покрасить в любой понравившийся вам цвет:
Теперь переходим ко второй заготовке, в ней необходимо вырезать прямоугольник размером 75 мм на 35 мм, для доступа к выводам Arduino. А также надо сделать пять отверстия диаметром 5 мм для светодиодов. И прорезь для выключателя. И отверстия 3 мм под саморезы. Также, как и первую заготовку красим вторую:
Для соединения этих частей из фанеры той же толщины изготовим два прямоугольники размером 20 мм на 40 мм и один квадрат со стороной 20 мм. И просверливаем в них отверстия 3 мм под саморезы:
Шаг 4 Электрика.
Ставим Arduino на место:
Прикручиваем наши соединительные прямоугольники как показано на фото:
Берем аккумуляторы, спаиваем их последовательно по три штуки, выводим провода и скручиваем изолентой. Размещаем их в нижних частях лицевой заготовки, с обратной стороны и приклеиваем на термоклей. Провод от минусового контакта разъема питания Arduino припаиваем к минусу первой тройки аккумуляторов. Плюс от первой тройки припаиваем к минусу второй тройки аккумуляторов. Плюс от второй тройки паяем к одному из контактов выключателю. Провод от плюсового контакта разъема питания Arduino паяем ко второму контакту выключателя. Проше говоря: все аккумуляторы должны быть соединены последователь, минус от них припаян к минусу разъема питания Arduino, а плюс через выключатель к плюсу разъема питания:
Переходим к задней части. В проделанные отверстия вставляем светодиоды и фиксируем их термоклеем. Спаиваем их параллельно по два светодиода и не забываем про резисторы на плясовой провод. Минус от светодиодов подключаем к GND, плюс к D11 Arduino.
В верхнее отверстие вставляем датчик температуры ds18b20. Он обладает высокой точностью измерения, погрешность не более 0,5 °C. Датчик откалиброван при изготовлении, какой-либо дополнительной настройки не требуется. Диапазон измерения температуры -55 … + 125 °C. Есть два режима работы: с внешним источником питания и «паразитного питания». Мы будем использовать внешнее питание, так как при этом он работает стабильнее. Подключение следующее:
Так же фиксируем его термоклеем. В конечном итоге должно получится следующее:
Контакт DQ датчика температуры подключаем к D10 Arduino. Не забудьте припаять подтягивающий резистор между DQ и +5(VDD).
Перед окончательной сборкой еще раз проверьте чтобы все было припаяно и подключено:
Шаг 5 Собираем все вместе.
Аккуратно, чтобы не порвать провода, переворачивает заднюю часть и кладем ее на лицевую часть. В местах крепления соединительных прямоугольников проделываем отверстия и вкручиваем саморезы, соединяя таким образом обе части:
Теперь из тонкого пластика вырезаем полости толщиной 35 мм. На двусторонний скотч клеим эти полости по кругу на боковины наших часов:
Также из тонкого пластика вырезаем внутренние элементы бумажного шаблона и наклеиваем их на лицевую сторону часов:
Для зарядки аккумуляторов и работы часов во время зарядки необходим блок питания напряжением 7.2 – 8 V, с ограничение тока в 600 mA. Если у вас будут другие аккумуляторы, то и блок питания нужно подбирать другой, главное чтобы ток зарядки не превышал 10% от емкости аккумуляторов.
На этом сборка закончена, осталось только отредактировать и записать скетч.
Шаг 6 Подготовка среды и заливка скетча.
Для редактирования и заливки скетча вначале надо установить Arduino IDE с официального сайта:
www.Arduino.cc.
Затем установить следующие библиотеки. Для работы с экраном библиотека UTFT:
Для подключения датчика температуры библиотека OneWire:
Для установки этих библиотек распакуйте архивы и поместите распакованные файлы в папку «libraries», находящуюся в папке с установленной Arduino IDE. Или не распаковывая скачанные архивы, в среде Arduino IDE выберите меню Скетч – Подключить библиотеку. В самом верху выпадающего списка выберите пункт «Добавить .Zip библиотеку». Не забудьте после всего этого перезагрузить Arduino IDE. Скетч для часов:
Датчик температуры работает по протоколу One Wire и имеет уникальный адрес для каждого устройства — 64-разрядный код. Чтобы каждый раз не искать этот адрес, подключаем датчик к Arduino, заливаем в нее скетч находящийся в меню Файл – Примеры – Dallas Temperature – OneWireSearch. Далее запускаем Инструменты — Монитор порта. Arduino должна найти наш датчик, написать его адрес и текущие показания температуры. Копируем или просто записываем адрес вашего датчика. Открываем скетч Ard_LCD_TFT_Term, ищем строку:
byte addr[8]={0x28, 0xFF, 0xDD, 0x14, 0xB4, 0x16, 0x5, 0x97};//адрес моего датчика
Записываем адрес вашего датчика между фигурными скобками, заменяя адрес моего датчика. Осталось только залит отредактированный скетч. Хочу еще сказать, что просто часы возможно скучновато, но вы можете написать свой собственный скетч. Я по мере написания других скетчев для этих часов буду их выкладывать.
Получайте на почту подборку новых самоделок. Никакого спама, только полезные идеи!
*Заполняя форму вы соглашаетесь на обработку персональных данных
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.usamodelkina.ru
При разработке проектов Arduino, часто приходится использовать дисплеи для вывода информации. Дисплеи эти бывают разные и иногда начинающий разработчик ставит перед собой вопрос, — какой использовать? Давайте разберемся в этих непонятных аббревиатурах: LCD, TFT, OLED
Все имеющиеся в продаже Arduino LCD дисплеи можно поделить на две основные группы:
Сегментный дисплей – это тема отдельной статьи, здесь будем говорить только о ЖК дисплеях.
В интернет – магазинах часто встречаются экраны трех видов:
Начинающие разработчики, как правило реализуют свои проекты с применением обычного LCD 1602, видео ниже демонстрирует, что представляет из себя экранчик, в конце видео можно посмотреть, как дисплей отображает символы.
Отличное видео демонстрации работы дисплея arduino tft. Паренек рассказывает, как подключить его, показывает примеры вывода графической и текстовой информации на экран. Еще упоминает о выводе текста в Arduino tft на русском языке. Интересное видео, рекомендую.
Пример работы с OLED LCD Display Module I2C 0.96 в среде Arduino. Подробная видео инструкция по применению, от подключения, до установки библиотеки.
К выбору экрана нужно подходить из требований проекта. Например, если в планах выводить временной график температуры, то лучше использовать TFT дисплей, если нужно отображать пару значений, достаточно обойтись arduino lcd 1602 или даже сегментным. OLED дисплеи Ардуино можно применить, когда остро встает проблема потребления электроэнергии.
Метки: Метки LCD LCD 1602 oled tft дисплей
arduinomania.ru
| ||||
|
ru-arduino.livejournal.com
Модуль является бескорпусным цветным ЖКИ монитором QVGA с сенсорным экраном, имеющим диагональ 2,4 дюйма. Он предназначен для работы совместно с микроконтроллерами разных типов и процессорными системами. Несмотря на возможность отображения полноцветных фотографий, основное применение – отображение простой графики и символьных данных с использованием 16 цветов. На экран можно выводить анимацию:
Графических возможностей монитора достаточно для создания изображения клавиатуры работающей благодаря сенсорным поверхностям. Одновременно с обработкой нажатий дисплей 2.4 TFT 240х320 сенсорный + MicroSD отображает результаты выполнения команд оператора и индицирует значения контролируемых параметров. Применение значительно упрощает устройства ввода-вывода прибора. ЖКИ индикатор имеет постоянно включенную подсветку. Есть одна кнопка. На плате расположен контейнер для SD карты.
Характеристики 2.4 TFT 240х320
Питание
Напряжение 5 В
Ток 300 мА
Напряжение входных сигналов 5 или 3,3 В
Диагональ 2,4 дюйма
Разрешающая способность 320 X 240 точек с индивидуальным контролем
Максимальное количество оттенков 262144
Подсветка белая
Интерфейс 8080
Максимальный объем microSD карты 32 Гб
Размеры 71 x 52 x 7 мм
Контакты
ЖКИ индикатор использует 8 контактов модуля для передачи данных и 4 контакта для сигналов управления. Сенсорная часть дисплея использует 4 контакта совместно с ЖКИ. Работа с Micro SD картой требует 4 контакта.
Контакт
3.3V Питание
5V Питание
GND Питание
J4-1 Кнопка
ЖКИ индикатор и сенсорная поверхность
LCD_RD управление ЖКИ, чтение
LCD_WR TOUCH_YP управление ЖКИ, запись или данные сенсорной поверхности
LCD_RS TOUCH_XM управление ЖКИ, команда/данные или данные сенсорной поверхности
LCD_CS управление ЖКИ, выбор устройства
LCD_RST сброс
LCD_D2 данные ЖКИ
LCD_D3 данные ЖКИ
LCD_D4 данные ЖКИ
LCD_D5 данные ЖКИ
LCD_D6 / TOUCH XP данные ЖКИ / данные сенсорной поверхности
LCD_D7 / TOUCH YM данные ЖКИ / данные сенсорной поверхности
LCD_D0 данные ЖКИ
LCD_D1 данные ЖКИ
Micro SD
SD_CS выбор
SD_DI SD вход данных
SD_DO выход данных
SD_SCK тактирование данных
Дисплей 2.4 TFT 240х320 сенсорный + MicroSD может устанавливаться в соединители Arduino.
Подключение к Arduino UNO:
Дисплей 2.4 TFT 240х320 сенсорный + MicroSD.
Питание 5 вольт поступает на цепи схемы и микросхему U1 стабилизатор напряжения 3,3 вольта. Информационные сигналы проходят через микросхемы 74xx541 – буферы шин данных. IC1 микросхема ADS7843 – контроллер сенсорных экранов. Это 12 битный АЦП с устройством выборки-хранения, синхронным последовательным интерфейсом и низкоомными ключами управления сенсорными контактами.
Основной компонент модуля – TFT1 совмещенный со специализированным контроллером жидкокристаллический экран. Ссылки на описание ЖКИ и различных типов контроллеров в конце страницы.
Кнопка
На краю платы модуля расположена кнопка. Кроме сенсорной клавиатуры дисплей 2.4 TFT 240х320 сенсорный + MicroSD имеет механическую кнопку. Ее контакты соединяют с общим проводом контакт 1 соединителя J4. Это расположенный с краю соединителя J4 возле контакта 3V3 неподписанный контакт. Кнопка может использоваться для нужд компонуемого прибора. При работе совместно с Arduino контакт 1 соединителя J4 подключается к линии сброс. Нажатие кнопки вызывает сброс Arduino.
Начало работы
Большая часть обеспечения работы модуля принадлежит программе микроконтроллера. Для этого удобно использовать опубликованные в интернете существующие программные решения. За основу берут написанные для Arduino программы и модифицируют их под аппаратные средства разрабатываемого прибора.
Когда мы пытаемся обуздать дисплей 2.4 TFT 240х320 сенсорный + MicroSD можно получить неожиданные результаты: белый экран, весь экран с шумом, сенсорные функции не работают или инвертируется позиция по координате Y, инвертируются цвета. Дело в том, что в дисплей различные производители устанавливают различные типы основного контроллера ЖКИ: ST7781, Spfd5408, IL9341, Sitronix ST7783262K, S6D0154 и другие. Их описания в конце страницы. Прежде всего нужно определить какой тип контроллера дисплея применен в вашем модуле. Микросхема и ЖКИ экран это одно устройство. Установить тип можно только программным путем. Для этого используют микроконтроллерный модуль Arduino UNO и программу LCD_ID_Reader Version 1.2, которая читает идентификатор микросхемы. LCD_ID_Reader не требует установки дополнительных библиотек. Также есть программа определения типа контроллера в библиотеке самурай, речь о ней пойдет далее.
Программное обеспечение Arduino
Для различных контроллеров ЖКИ разработаны различные библиотеки.
Для контроллера SPFD5408 используется библиотека JoaoLopesF. По сути это доработанная для SPFD5408 библиотека от Adafruit. В ней есть возможность калибровки сенсорного экрана.
Для контроллеров
S6D0154 диагональ 2,8 дюйма
ILI9488 диагональ 3,95 дюйма 320 x 480 точек
ILI9327 диагональ 3,6 дюйма
ILI9341
NT35702, совместим с ILI9327
Библиотека самурай
По умолчанию эта библиотека предназначена для экранов с диагональю 2,8 дюйма. На меньших пропадает часть изображения. Для диагонали 2,4 дюйма в файле TFTLCD-Library/Adafruit_TFTLCD.cpp надо нейтрализовать строки:
//#define TFTWIDTH 320
//#define TFTHEIGHT 480
и убрать символы комментария в строках:
#define TFTWIDTH 240
#define TFTHEIGHT 320
Программа определения типа контроллера ЖКИ – graphicstest. В монитор последовательного порта будет выведен тип контроллера ЖКИ.
Для работы сенсорного экрана измените #define YP A1 #define XM A2 #define YM 7 #define XP 6
Для контроллеров
ILI9325
ILI9328
И для контроллера с кодом идентификации 0xC505
Библиотека adafruit/TFTLCD-Library
Для ILI9325D библиотека UTFT
Для контроллера ST7781 установить:
Smoke-And-Wires/TFT-Shield-Example-Code
adafruit/Adafruit-GFX-Library
adafruit/Touch-Screen-Library
Установка библиотеки, тестирование, описание библиотеки, шрифты, определение координат нажатия, работа с микроSD картой, конвертирование из формата 24-bit в 16-bit здесь
Сенсорная поверхность
Дисплей 2.4 TFT 240х320 сенсорный + MicroSD передает программе три величины: координаты нажатия (X и Y) и давление Z. Используется резистивная технология сенсорного экрана.
Поверхность состоит из двух полимерных слоев, покрытых резистивным материалом, выступающим в качестве электродов. Слои склеиваются по краям. Под управлением программы данные поступают из микросхемы IC1 для обнаружения нажатия. Микроконтроллер прибора получает 10-битное число (0..1023) для каждой оси. Программно эта величина масштабируется в соответствии с размерами экрана.
Пять проводов сенсорной поверхности (четыре сигнальных и один общий) подключены через тонкий шлейф к контроллеру ЖКИ.
Для контроллера SPFD5408 используется библиотека 4-wire resistive touchscreens . Скопируйте разархивированные и переименованные папки:
Для контроллера ЖКИ ST7781 применяется библиотека контроля нажатия. Также установите. Скачайте и разархивируйте демонстрационный код . Скопируйте папку SWIFT-Shield из извлеченного архива в папку библиотек Arduino.
Графический тест
Для модуля с контроллером IL9341.
Подключите дисплей 2.4 TFT 240х320 сенсорный + MicroSD к Arduino UNO. Загрузите библиотеки adafruit/TFTLCD-Library и Adafruit-GFX-Library.
Попробуйте пример graphictest в библиотеке adafruit/TFTLCD. На экране должно быть изображение как показано выше. Если дисплей 2.4 TFT 240х320 сенсорный + MicroSD ничего не отображает или показывает только статическую картинку, то можно попробовать изменить программу graphictest. Модификация программы заключается в жесткой установке типа контроллера дисплея. Строку 60 замените на:
uint16_t identifier = 0x9341; //Need hardcode here (IC)
Для контроллера ЖКИ SPFD5408.
Создайте два графических файла формата BMP со следующими параметрами: 320 точек ширина картинки, цвет 24 бит и объем не превышающий 250 Кбайт. Имя файла должно состоять из восьми латинских букв. Скопируйте файл в корневой каталог карты microSD. Если эксперимент пройдет удачно, то на карту можно записать много картинок. Тест будет выводить их на экран поочередно.
Скачать следующие библиотеки :
TFT-Shield-Example-Code
Распакуйте и скопируйте в папку SWTFT-Shield в библиотеки Arduino.
Adafruit GFX graphics
Переименуйте распакованные папки в Adafruit_GFX. Они должны содержать .cpp и .h файлы.
Если имя папки отличается, то Arduino не распознает ключевые слова из библиотеки.
Arduino library resistive touchscreens
Переименуйте раскрытую папку в TouchScreen.
Библиотеки, примеры и картинки можно скачать отсюда
Подключите USB-кабель к ПК и откройте Arduino IDE. Далее откройте Under File—>Examples –> SWTFT-Shield.
Результаты работы программных примеров.
Graphicstest
Graphicstest
Rotationtest.
Откройте последовательный монитор Arduino IDE и выберите скорость 9600 и New Line в нижней части окна. При нажатии на кнопку Send будут появляться различные изображения.
Ttfbmp.
Файлы BMP записанные на micro SD карту будут выводится на экран.
Ttfpaint.
Можете выбрать любой цвет чтобы рисовать или писать на сенсорном экране.
Проект: Осцилограф на основе Arduino UNO R3 и дисплея 2.4 TFT 240х320
Работа совместно с Arduino Mega
01
02
видео
Описание ЖКИ индикатора монитора на основе контроллера SPFD5408A
Описания контроллеров ЖКИ
SPFD5408A
ILI9320
ILI9325
ILI9328
ILI9341
S6D1121
Библиотека Arduino для подключения TFT дисплеев на чипе ILI9341
Библиотека UTFT для цветных TFT дисплеев для Arduino
Библиотека Arduino для подключения TFTLCD
Touch Screen Library
TFT LCD Library
GFX Library
Latest SD Card Library
it4it.club