Ардуино tft lcd дисплеи: руководство пользователя

Ардуино tft lcd дисплеи: руководство пользователя

Плата расширения Arduino TFT

Arduino TFT – это плата расширения для Ардуино, которая содержит TFT-экран с подсветкой и разъем для карты памяти формата microSD. С помощью специальной библиотеки TFT на экран можно выводить текст, изображения или геометрические фигуры.

Расположение внешних выводов платы расширения соответствует специальным разъемам на Arduino Esplora и Arduino Robot, что облегчает подключение экрана к этим устройствам. Однако, TFT-дисплей можно использовать с любой моделью Ардуино.

Библиотека TFT включается в состав среды разработки Ардуино. начиная с версии 1.0.5.

Библиотека

Библиотека Arduino TFT разработана на основе библиотек Adafruit GFX и Adafruit ST7735, и значительно расширяет их возможности. Библиотека GFX в основном содержит процедуры отрисовки графики, в том время, как ST7735 – функции для взаимодействия с TFT-экраном. Те дополнения библиотек, которые касаются Ардуино, спроектированы таким образом, чтобы максимально соответствовать API языка Processing.

Библиотека имеет обратную совместимость, что позволяет вам использовать в программах функции Adafruit (подробнее о них см. здесь).

Методы библиотеки TFT опираются на функции библиотеки SPI, поэтому во всех программах, работающих с TFT-экраном, должна быть объявлена библиотека SPI. Соответственно, при работе с SD-картой памяти – необходимо объявить библиотеку SD.

Организация экрана

По умолчанию экран имеет горизонтальную ориентацию, соответственно, его ширина – больше, чем высота. Верхняя часть экрана находится с той стороны платы, где указана надпись “SD CARD”. При такой ориентации, разрешение экрана составляет 160 х 128 пикселей.

Систему координат дисплея лучше всего представить в виде сетки, каждая ячейка которой является отдельным пикселем. Местоположение пикселя задается парой координат. Точка в левом верхнем углу экрана будет иметь координаты 0,0. Если эта точка сместится в верхний правый угол, то ее координаты будут равны 0, 159; в левый нижний угол – 127,0; в правый нижний – 127, 159.

Дисплей можно использовать и в вертикальном положении (также известном как “портретная ориентация”). Для этого достаточно вызвать функцию setRotation(0), после чего оси x и y поменяются местами. После вызова этого метода, функции screen.width() и screen.right() станут возвращать уже другие значения.

Цвета

Экран позволяет передавать цвет глубиной 16 бит. Красная и синяя составляющие цвета могут принимать 32 различных значения (разрядность 5 бит), а зеленая составляющая – 64 значения (разрядность 6 бит). Однако, с целью совместимости с другими программами, библиотека все равно работает с 8-битными значениями красного, зеленого и синего каналов (0 – 255), пропорционально масштабируя их в необходимый диапазон.

Аппаратный и программный интерфейс SPI – что лучше?

Организовать работу с TFT-экраном можно двумя способами. Первый способ – использовать аппаратную шину SPI Ардуино, второй – вручную объявить расположение необходимых выводов. С точки зрения функциональности экрана, нет никакой разницы между первым и вторым способом. Однако скорость работы аппаратного интерфейса SPI значительно выше.

Если на TFT-модуле планируется использование SD-карты памяти, то взаимодействовать с модулем необходимо только через аппаратный интерфейс SPI. Он используется во всех примерах к данной библиотеке.

Подключение экрана

Подключение к Arduino Esplora

На лицевой стороне Arduino Esplora есть специальный разъем для подключения экрана. Вставьте экран Ардуино в этот разъем так, чтобы синяя надпись “SD Card” была расположена возде порта USB.

Подключение к другим платам Ардуино

Чтобы узнать, как подключать экран к другим моделям Ардуино, прочтите это руководство.

Пишем первую программу

Для начала работы с TFT-экраном, сперва попробуем написать программу, которая будет отрисовывать простую линию. После этого напишем программу, формирующую 2 цветных прямоугольника, пересекающие экран по горизонтали.

В примерах вначале будут приведены листинги программ для Arduino Uno, Leonardo и др. моделей. Листинги для Arduino Esplora будут приведены ниже.

Итак, в начале программы, объявим выводы Ардуино, которые будут использоваться для взаимодействия с экраном, импортируем необходимые библиотеки и создадим экземпляры основных классов библиотеки TFT:

В блоке setup() необходимо запустить библиотеку функцией begin() и очистить экран, установив черный цвет фона с помощью функции background().

В блоке loop(), для отрисовки прямой линии на экране необходимо вызвать функцию line(). Функция line() принимает четыре аргумента: начальные координаты x и y, конечные координаты x и y. Чтобы нарисовать прямоугольник, необходимо вызвать функцию rect(), которая также принимает четыре параметра: координаты x и y левого верхнего угла, ширина и высота прямоугольника в пикселях. Между вызовами этих функций можно изменить цвет выводимой фигуры с помощью функций stroke() или fill(). Функция stroke() изменяет цвет линии или контура геометрической фигуры, а функция fill() – изменяет цвет заливки фигуры. После вызова функции noStroke() библиотека не будет отрисовывать границы выводимых фигур. Чтобы отменить действие этой функции, достаточно вызвать метод stroke().

Структура программы для Arduino Esplora практически ничем не отличается. В Arduino Esplora предусмотрен отдельный разъем для подключения TFT-экрана, поэтому выводы, взаимодействующие с ним, заданы аппаратно и не подлежат изменению. В программе в этом случае необходимо использовать специальный класс EsploraTFT для работы с экраном.

Именно поэтому в программе не нужно указывать выводы Ардуино, которые будут взаимодействовать с экраном; эта информация автоматически содержится внутри создаваемого объекта:

Перемещения по экрану

Иллюзия движения или анимация создается путем быстрого стирания и отрисовки изображения на экране. При использовании языка Processing на мощном компьютере, для очистки экрана и отрисовки картинки в новой позиции можно вызывать функцию background() перед каждым вызовом функции draw(). Однако производительность Arduino, по сравнению с настольным ПК, весьма ограничена, поэтому выполнение функции background() из библиотеки TFT занимает определенное время.

В условиях ограниченного быстродействия, для создания иллюзии движения лучше проверять положение объекта в цикле loop(). Если положение объекта изменилось, то необходимо закрасить его фоновым цветом, а затем перерисовать объект в новой позиции. Благодаря тому, что в данном случае обновляется не весь экран, а лишь некоторые его пиксели, процесс обновления картинки ускоряется и создается иллюзия движения.

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

В цикле loop() мы вначале обновляем позицию точки, добавляя к переменным x и y величину направления движения. После этого проверяем, отличается ли текущее и предыдущее положение точки. Если отличается, то стираем предыдущую точку, закрашивая ее фоновым цветом, а затем рисуем новую точку в необходимой позиции. Если точка “долетает” до границы экрана – инвертируем направление движения.

Версия этой программы для Arduino Esplora приведена ниже:

Выводим текст

В библиотеке TFT содержится базовый шрифт для вывода текста на экран. По умолчанию, размер символов составляет 5х8 пикселей (5 – в ширину, 8 – в высоту). В библиотеке предусмотрена возможность изменения размера шрифта на 10×16, 15×24 или 20×32. Для получения дополнительной информации о шрифтах см. страницу Adafruit о работе с графическими примитивами.

Итак, в нижеследующем примере попробуем создать простой счетчик, который будет увеличиваться на единицу каждые полсекунды. Для этого, как и в предыдущих примерах, подключим необходимые библиотеки и объявим нужные переменные в блоке setup().

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

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

Тот же самый код для Arduino Esplora:

Выводим изображение из файла, находящегося на SD-карте памяти

Библиотека TFT позволяет считывать .bmp-файлы с SD-карты памяти и выводить их содержимое на экран. Причем отображаемые картинки могут не соответствовать разрешению TFT-экрана (160×128). Следует иметь ввиду, что Ардуино не может модифицировать изображения, поэтому все необходимые манипуляции с графическими файлами (такие, как масштабирование, обрезка и т.д.) необходимо сделать до их “заливки” на SD-карту.

В следующем примере показана работа с графическим файлом “arduino.bmp”, расположенном в корне SD-карты памяти, и содержащим изображение размером 160×128 пикселей. В программе осуществляется считывание файла и вывод его на экран с помощью библиотеки TFT.

Помимо уже знакомых вам библиотек, в этом примере понадобится подключить еще одну библиотеку – SD. Также необходимо объявить вывод CS, связанный с разъемом SD-карты.

Класс PImage используется для загрузки изображения (этот класс может также использоваться для проверки формата графического файла на предмет его совместимости с библиотекой TFT).

После того, как файл будет прочитан, Ардуино выведет изображение в указанных вами координатах. В данном случае картинка будет выведена, начиная с левого верхнего угла экрана.

Тот же самый код для Arduino Esplora: :

Что дальше?

Теперь, когда вы разобрались с принципами работы дисплея, загляните в справку по библиотеке TFT – там вы найдете информацию об API библиотеки, а также дополнительные примеры кода. Для получения дополнительной технической информации, см. страницу с описанием платы расширения Arduino TFT. Также не помешает посетить страницу с описанием графической библиотеки Adafruit – там можно найти дополнительную информацию о функциях, не освещенных в данном руководстве.

Подключение TFT дисплея с драйвером ILI9341 к Arduino.

Для Arduino есть очень много модулей , датчиков. Но все это скучно без дисплея )) В этой статье мы с вами подключим TFT дисплей с драйвером ILI9341 к контролеру.

В руки мне попал Китайский брат с маркировкой KMRTM24024-SPI. Это TFT дисплей с диагональю 2.4″ и SPI интерфейсом.

Характеристики :

  • Диагональ: 2,4 .
  • Цвет: 18-бит, 262 000 оттенков.
  • Разрешение: 320 х 240.
  • Соотношение сторон экрана: 4 : 3 .
  • Питание : 3.3В/5 В.
  • Интерфейс : SPI .

Самое интересное, что логика работы драйвера 3.3 В . По этому нам потребуется согласовать наше Arduino с логикой 5 В и дисплей.

Выводы :

  • VCC = +5v (+5 вольт).
  • GND = GND (земля).
  • LED = +3.3v (подсветка дисплея).
  • SCK = SPI.
  • SDI/SD (MOSI) = SPI.
  • SDO(MISO) = SPI.
  • CS = выбор устройства.
  • D/C = Команда/Данные.

Схема подключения :

Так как логика работу у дисплея и контролера разная нам надо их согласовать. Тут есть два варианта:

  • Использовать делитель напряжения на резисторах, нам потребуется резисторы 20 кОм и 10 кОм.

    Этот пример поможет вам с конвертацией типа float в string:

    Вот собственно и все . Дальше все ограничено только вашей фантазией.

    Работа с цветными графическими дисплеями TFT (библиотека UTFT)

    Библиотека

    Поддерживаемые дисплеи

    Дисплеи Инициализация
    Цветной графический дисплей 2.8 TFT 320х240   Данный дисплей совместим с любыми Arduino.

    UTFT myGLCD(TFT01_24SP, 6, 5, 4, 3, 2);

    Дисплей можно подключать к любым выводам Arduino указав № выводов при объявлении объекта myGLCD библиотеки UTFT:
    UTFT myGLCD(TFT01_24SP, SDI/MOSI, SCK, CS, RESET, DC/RS);

    На дисплее установлен преобразователь уровней, так что его можно подключать и к 3В и к 5В логике.

    Описание работы с сенсорным экраном находится в разделе Wiki работа с TouchScreen

    Данный дисплей совместим только с Arduino Mega.

    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 можно использовать для подключения других модулей.

    Выводы не подписанные на рисунке, не используются дисплеем.

    Цветной графический дисплей 2.8 TFT 320×240 UNO
    Данный дисплей совместим только с Arduino Uno.

    UTFT myGLCD(TFT28UNO, A2, A1, A3, A4, A0);

    Если Вы не планируете использовать SD карту, то выводы 10-13 можно использовать для подключения других модулей.

    Выводы не подписанные на рисунке, не используются дисплеем.

    Описание работы с сенсорным экраном находится в разделе Wiki работа с TouchScreen

    Цветной графический дисплей 2.4 TFT 240×320
    Данный дисплей совместим с любыми Arduino.

    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 по последовательной шине данных.

    Данный дисплей совместим с любыми Arduino.

    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».

    #1 Пример

    Выводим на дисплей текст тремя базовыми шрифтами:

    #2 Пример

    Заливаем весь дисплей различными цветами:

    #3 Пример

    Рисуем различные графические элементы:

    Базовые функции:

    Все функции:

    • 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.

    Инициализация работы с дисплеем:

    InitLCD( [положение] );
    Инициализация работы с дисплеем, с указанием его положения.

    InitLCD(PORTRAIT); // инициализация (вертикальное положение)

    Параметр:

      Положение может быть горизонтальным или вертикальным:
    • положение: PORTRAIT – вертикальное
    • положение: LANDSCAPE – горизонтальное (по умолчанию)

    Очистка экрана:

    clrScr();
    Очистка экрана с заливкой дисплея чёрным цветом
    Параметр: Без параметров.
    fillScr( color );
    Очистка экрана с заливкой заданным цветом.

    fillScr(VGA_RED); // красный цвет

    Параметр:

      Цет можно задать тремя способами:
    • color: По названию цвета – VGA_RED
    • color: В формате RGB565 – 0x001F
    • color: В формате RGB – 255,100,0

    Выбор цвета:

    setColor( color );
    Выбор цвета для текста и фигур, выводимых после данной функции.

    setColor(0,0,255); // синий цвет

    Параметр:

      Цет можно задать тремя способами:
    • color: По названию цвета – VGA_RED
    • color: В формате RGB565 – 0x001F
    • color: В формате RGB – 255,100,0
    setBackColor( color );
    Выбор цвета для фона текста, выводимого после данной функции.

    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.

    Выбор шрифта:

    setFont( fontName );
    Выбор шрифта для текста выводимого после данной функции.

    setFont(SmallFont); // маленький шрифт

    Параметр:

      По умолчанию в библиотеке есть 3 шрифта:
    • fontName: SmallFont – маленький шрифт
    • fontName: BigFont – большой шрифт
    • fontName: SevenSegNumFont – шрифт имитирующий семисегментный индикатор

    Вывод текста:

    print( str , x , y [, r] );
    Выводит на дисплей строки или содержимое строковых переменных.

    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( int , x , y [, len [, sym ] ] );
    Выводит на дисплей целые числа или содержимое целочисленных переменных.

    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( float , dec, x , y [, sym1 [, len [, sym2 ] ] ] );
    Выводит на дисплей вещественные числа или содержимое переменных вещественного типа.

    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”

    pro2rus › Блог › Arduino: TFT дисплей 2,4 320х240

    Подключаем:
    Экран — Ардуино
    LCD_CS — A3 — управление ЖКИ, выбор устройства
    LCD_RS — A2 — управление ЖКИ, команда/данные или данные сенсорной поверхности XM
    LCD_WR — A1 — управление ЖКИ, запись или данные сенсорной поверхности YP
    LCD_RD — A0 — управление ЖКИ, чтение
    LCD_ RST — A4, можно присоединить LCD_RESET к линии RESET Arduino UNO
    LCD_D0 — DIO 8 — данные ЖКИ
    LCD_D1 — DIO 9 — данные ЖКИ
    LCD_D2 — DIO 2 — данные ЖКИ
    LCD_D3 — DIO 3 — данные ЖКИ
    LCD_D4 — DIO 4 — данные ЖКИ
    LCD_D5 — DIO 5 — данные ЖКИ
    LCD_D6 — DIO 6 — данные ЖКИ / данные сенсорной поверхности XP
    LCD_D7 — DIO 7 — данные ЖКИ / данные сенсорной поверхности YM
    SD CS — DIO 10 — выбор SD
    SD DI — DIO 11 — вход данных
    SD DO — DIO 12 — выход данных
    SD SСK — DIO 13 — тактирование данных
    3.3V — 3.3V
    5V — 5V
    GND — GND

    Библиотек для TFT-дисплеев много, все зависит от контроллера дисплея.
    Чтобы определиться заливаем в Атмегу скетч LCD_ID_Reader.ino

    Для меня подходит библиотека SWTFT.h
    Она с косяками ))) Не компилируется )) Надо в файле SWTFT.cpp вписать строку в начале:
    #define swap(a, b)

    Дальше привожу скетч с описанием функций:

    // Описываем переменные цветов
    #define BLACK 0x0000
    #define BLUE 0x001F
    #define RED 0xF800
    #define GREEN 0x07E0
    #define CYAN 0x07FF
    #define MAGENTA 0xF81F
    #define YELLOW 0xFFE0
    #define WHITE 0xFFFF

    // Открываем объект
    SWTFT tft;
    uint8_t rotation=0; // прописываем ориентацию экрана 0…3

    void setup() <
    tft.reset(); // инициализация
    uint16_t >tft.begin(identifier); // начинаем работать
    tft.setRotation(rotation); // определяем ориентацию экрана
    tft.fillScreen(GREEN); // заливка экрана
    tft.setCursor(50, 20); //установка курсора в пикселях
    tft.setTextColor(BLUE); //установка цвета шрифта
    tft.setTextSize(2); //установка размера шрифта
    tft.println(“Ilya Bulatov”); //печать текста с переводом строки_следующая строка с нулевого пикселя
    delay(50);
    int w, h;
    w = tft.width(); //считываем размер по горизонтали_зависит от ориентации экрана
    h = tft.height(); //считываем размер по вертикали_зависит от ориентации экрана
    tft.print(“Razmer TFT:”); //печать текста без перевода строки
    tft.print(w);
    tft.println(h);
    delay(50);
    tft.drawLine(10, 100, 200, 110, RED); //рисуем линию красного цвета
    tft.drawLine(200, 110, 98, 280, YELLOW);
    tft.drawLine(98, 280, 10, 100, CYAN);
    delay(50);
    tft.drawFastHLine(20, 120, 200, MAGENTA); //рисует линию по горизонтали
    tft.drawFastVLine(120, 120, 170, WHITE); //рисует линию по вертикали
    delay(50);
    tft.drawRect(30, 90, 150, 120, BLACK); //рисует прямоугольник без заливки 30_90 начальные координаты 150_ширина 120_высота
    tft.fillRect(100, 160, 80, 40, YELLOW); //заливает прямоугольную область
    delay(50);
    tft.drawCircle(120, 160, 80, RED); //рисует окружность 80_радиус
    tft.fillCircle(120, 160, 30, CYAN); //заливает окружность
    delay(50);
    tft.drawTriangle(20, 110, 200, 120, 110, 210, BLACK); //рисует треугольник без заливки
    tft.fillTriangle(30, 120, 180, 140, 90, 180, BLUE); //заливает треугольник
    delay(50);
    tft.drawRoundRect(35, 95, 140, 110, 4, MAGENTA); //рисует прямоугольник без заливки 4_скругление в пикселах
    tft.fillRoundRect(65, 125, 80, 50, 8, CYAN); //заливает прямоугольную область со скруглением
    delay(50);
    rotation=tft.getRotation()+1; //возвращает ориентацию экрана
    tft.drawPixel(120,160, RED); //рисует точку
    tft.drawPixel3(100,100,0×23,0x45,0xAC); //рисует точку цвета RGB
    tft.drawLine3Byte(10,110,200,120,0×23,0x45,0xAC); //рисует линию RGB
    uint16_t clr=tft.readPixel(120,160); //чтение цвета пиксела
    clr=tft.color565(0x23,0x45,0xAC); //преобразование цвета RGB
    >

    tft.setRotation(rotation); // определяем ориентацию экрана
    tft.fillScreen(GREEN); // заливка экрана
    tft.setCursor(50, 20); //установка курсора в пикселях
    tft.setTextColor(BLUE); //установка цвета шрифта
    tft.setTextSize(2); //установка размера шрифта
    tft.println(“Ilya Bulatov”); //печать текста с переводом строки_следующая строка с нулевого пикселя
    delay(50);
    int w, h;
    w = tft.width(); //считываем размер по горизонтали_зависит от ориентации экрана
    h = tft.height(); //считываем размер по вертикали_зависит от ориентации экрана
    tft.print(“Razmer TFT:”); //печать текста без перевода строки
    tft.print(w);
    tft.println(h);
    delay(50);
    tft.drawLine(10, 100, 200, 110, RED); //рисуем линию красного цвета
    tft.drawLine(200, 110, 98, 280, YELLOW);
    tft.drawLine(98, 280, 10, 100, CYAN);
    delay(50);
    tft.drawFastHLine(20, 120, 200, MAGENTA); //рисует линию по горизонтали
    tft.drawFastVLine(120, 120, 170, WHITE); //рисует линию по вертикали
    delay(50);
    tft.drawRect(30, 90, 150, 120, BLACK); //рисует прямоугольник без заливки 30_90 начальные координаты 150_ширина 120_высота
    tft.fillRect(100, 160, 80, 40, YELLOW); //заливает прямоугольную область
    delay(50);
    tft.drawCircle(120, 160, 80, RED); //рисует окружность 80_радиус
    tft.fillCircle(120, 160, 30, CYAN); //заливает окружность
    delay(50);
    tft.drawTriangle(20, 110, 200, 120, 110, 210, BLACK); //рисует треугольник без заливки
    tft.fillTriangle(30, 120, 180, 140, 90, 180, BLUE); //заливает треугольник
    delay(50);
    tft.drawRoundRect(35, 95, 140, 110, 4, MAGENTA); //рисует прямоугольник без заливки 4_скругление в пикселах
    tft.fillRoundRect(65, 125, 80, 50, 8, CYAN); //заливает прямоугольную область со скруглением
    delay(50);
    rotation=tft.getRotation()+1; //возвращает ориентацию экрана
    tft.drawPixel(120,160, RED); //рисует точку
    tft.drawPixel3(100,100,0×23,0x45,0xAC); //рисует точку цвета RGB
    tft.drawLine3Byte(10,110,200,120,0×23,0x45,0xAC); //рисует линию RGB
    uint16_t clr=tft.readPixel(120,160); //чтение цвета пиксела
    clr=tft.color565(0x23,0x45,0xAC); //преобразование цвета RGB
    >

    PS: Большей частью для себя писал.

    Заходите в группу “Матрица”. Программирование микроконтроллеров, ардуино, ПЛИС, 3Д и ЧПУ.
    Реализация всего на практике и диагностика авто “ПроДвижение — техслужба”

    Источники:

    http://xn--90aeniddllys.xn--p1ai/podklyuchenie-tft-displeya-s-drajverom-ili9341-k-arduino/

    http://wiki.iarduino.ru/page/rabota-s-cvetnym-graficheskim-displeem

    http://www.drive2.ru/b/494772536991547753/

    http://pikabu.ru/story/posloynoe_vskryitie_bmi160_akselerometr__giroskop_6767032

Ссылка на основную публикацию