cart

Продуктов в корзине: 0

Поиск товаров

Новинки



Недорогой но хороший LCD дисплей для Arduino. Оснащен сенсорной панелью. С помощью данного дисплея вы сможете организовать как ввод так и вывод данных с ардуино.

2.4tftlcdrear2.4tftlcdfront2.4tftlcduno

 

Купить сейчас

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

Полное название 2.4 inch TFT touch LCD Module LCD Screen Module For Arduino UNO
Диагональ LCD TFT дисплея 2.4"
Разрешение 240x320 точек
Количество цветов 18-бит (262 000)

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

ST7789V
Порты Arduino занятые дисплеем DIO 2 .. 9, AI 0 .. 3*
Свободные порты Arduino DIO 0, DIO 1, AI 4*, AI 5 и DIO 10..12 (если неиспользовать считыватель микро SD карты)
Напряжение

5В, работает с логикой 3.3В или 5В

Потребление 3.3В / 300mA
Боковая подсветка

4 белых светодиода (LED), которые можно подключить через транзистор для управления подсветкой

Сенсорный экран 4-проводной резистивный
Считыватель микро SD (проверена работа с 8 ГБ картой)

Разьемы для подключения TFT LCD A137 к Arduino UNO:

LCD_CS (Chip Select) A3 (Analog 3)
LCD_RS (Command/Data) A2 (Analog 2)
LCD_WR (Write) A1 (Analog 1)
LCD_RD (Read) A0 (Analog 0)
LCD_RESET

A4* (Analog 4), можно пересоединить LCD_RESET к
линии RESET Arduino UNO как описано ниже.

LCD_D2 DIO 2
LCD_D3 DIO 3
LCD_D4 DIO 4
LCD_D5 DIO 5
LCD_D6 DIO 6
LCD_D7 DIO 7
LCD_D0 DIO 8
LCD_D1 DIO 9
SD SS DIO 10
SD DI DIO 11
SD DO DIO 12
SD SСLK DIO 13

Возможно подключение “разъем в разъем” к контроллеру
Arduino UNO. Размеры плат дисплея и контроллера Arduino UNO совпадают.

Подключение дисплея к Arduino UNO
Перед подключением дисплея к контроллеру его библиотеки должны быть установлены на компьютере. Для ПК с ОС Windows это можно сделать следующим образом.
1. Загрузите ( например эту ) на компьютер с ОС Windows  пакет программ Arduino. Распакуйте пакет программ и поместите его в каталог, например, c:\arduino-1.0.6\ 

2. Подсоедините к портам обесточенного Arduino дисплей  соединив вышеназванные на платах одноименные порты.

3. Подключите Arduino к USB порту компьютера. Когда Windows запросит местоположение драйвера укажите папку c:\arduino-1.0.6\drivers\. Если установить драйвер не удалось воспользуйтесь этим драйвером

4. После установки драйвера, номер COM порта выделенный вашим компьютером для Arduino можно найти в списке диспетчера устройств (Driver Manager).

devmanager

 

5. Запустите программу Arduino c:\arduino-1.0.6\arduino.exe
6. Загрузите программу управления миганием светодиода платы Arduino: Меню > File > Examples > 01.Basics> Blink

ardide

 7. Выберети через меню и запустите программу Blink. Если при компиляции не появилось ошибок, проверьте , что закачка скетча удачно прошла  и UNO исполняет программу по миганию светодиода платы Arduino подключенного к  порту DIO 13.

8. Подключите библиотеки для работы с устройствами дисплея платы ST7789V. Загрузите модифицированную TFT SHIELD библиотеку. Зайдите в Эскиз=>Импорт библиотек=>Добавить библиотеку. Укажите файл с библиотекой. ВНИМАНИЕ! Данная библиотека используется ТОЛЬКО контроллером Arduino UNO и на версии DUE может не работать. Для нее необходимо найти нужную библиотеку.

9. Загрузите библиотеку графики. По аналогии с предыдущим пунктом, интегрируйте библиотеку в среду програмирования.

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

11. Проверьте работу демонстрационных программ графического дисплея. Для этого в программе Arduino загрузите один из демонстрационных pde файлов: Меню > File >
Open > c:\arduino-1.0.6\libraries\Mcufriend_kbv_2.5\examples\. Данные программы помимо дисплея могут отображаться в окне COM соединения с компьютером который открывается
кнопкой меню программы Arduino. Через это окно можно передавать данные программе которая считывает их из COM порта Arduino.

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

// ЛСД Экран
//#include <SD.h> //работа с cd картой
#include <Adafruit_GFX.h>// работа с экраном
#include <gfxfont.h>// фонт для вывода
#include <MCUFRIEND_kbv.h> // драйвер экрана
MCUFRIEND_kbv tft;

 

В функии setup вставьте

// управление TFT дисплеем

tft.reset(); //Сброс дисплея
uint16_t identifier = tft.readID(); //чтение ID чипа
tft.begin(identifier); // включение дисплея

Разворот дисплея.

// разворот направления печати дисплея
tft.setRotation(rotation); // установка угла начальных координат дисплея, rotation = 0 .. 3

tft.setRotation(tft.getRotation()+1); // разворот экрана на 90 градусов


Примечание: Драйвер полученного дисплея A137 имеет следующий номер
LCD driver chip: 7789

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

Команды графических примитивов.

Текст

tft.drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size)

 Рисование символа шрифта

tft.void setCursor(uint16_t x0, uint16_t y0);

Установка курсора в зоне 240 x 320 точек
tft.void setTextColor(uint16_t color); Установка цвета шрифта
tft.void setTextColor(uint16_t color, uint16_t backgroundcolor); Установка цвета шрифта и фона
tft.void setTextSize(uint8_t size); Установка размера шрифта
tft.void setTextWrap(boolean w); Установка режима переноса символа длинной строки на новую или на начало текущей строки
tft.print(12.345); tft.print(“Hello”); tft.println(“World”);tft.print(0xF81F, HEX). Вывод чисел и строк на дисплей

 

Другие

tft.drawPixel(uint16_t x, uint16_t y, uint16_t color);  Вывод точки (пикселя)
tft.drawLine(uint16_t x0, uint16_t y0, uint16_t x1,uint16_t y1, uint16_t color); Построение линии между точками (x0,y0) и (x1,y1)

tft.void drawFastVLine(uint16_t x0, uint16_t y0,uint16_t length, uint16_t color)

Построение вертикальной линиидлиной length

tft.void drawFastHLine(uin86_t x0, uin86_t y0, uint8_t length, uint16_t color);

Построение горизонтальной линии длиной length

tft.drawCircle(uint16_t x0, uint16_t y0, uint16_t r, uint16_t color); Рисование круга радиусом r с центром в x0,y0
tft.fillCircle (uint16_t x0, uint16_t y0, uint16_t r, uint16_t color) Заливка круга радиусом r с центром в x0,y0
tft.drawTriangle(uint16_t x0, uint16_t y0, uint16_t x1,uint16_t y1, uint16_t x2, uint16_t y2, color); Рисование треугольника с вершинами (x0,y0), (x1,y1) и (x2,y2)
tft.fillTriangle(uint16_t x0, uint16_t y0, uint16_t x1,uint16_t y1, uint16_t x2, uint16_t y2, color); заливка треугольника с вершинами(x0,y0), (x1,y1) и (x2,y2)
tft.drawRect(drawRect(uint16_t x0, uint16_t y0,uint16_t w, uint16_t h, uint16_t color); Рисование прямоугольника ширинойw и высотой h
tft.fillRect(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint16_t color); заливка прямоугольника шириной w и высотой h
tft.drawRoundRect(uint16_t x0, uint16_t y0, uint16_t w,uint16_t h, uint16_t radius, uint16 color); Рисование прямоугольника со скругленными углами
tft.fillRoundRect(uint16_t x0, uint16_t y0, uint16_t w,uint16_t h, uint16_t radius, uint16 color); заливка прямоугольника со скругленными углами
drawBitmap(int16_t x, int16_t y, uint8_t *bitmap,int16_t w, int16_t h, uint16_t color); Рисование небольшой монохромного(одноцветного) изображения. Bitmap располагается в памяти программ.
tft.fillScreen(uint16_t color); заливка дисплея
tft.fillScreen(BLACK); сброс (очистка) дисплея
   

 

Изменение шрифтов
Описание шрифтов выводимых на экран символов находится в glcdfont.c файлах библиотек Arduino. В файле указывается размер шрифтов, код первого символа, количество символов
и приводится таблица шрифтов. Таблица шрифтов фиксированной ширины, например, размером 5 х 7 пикселей с первого символа N 0x20 (32) по 0x7F (127) символ выглядит следующим образом
static const unsigned char font[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00,// (space)
0x00, 0x00, 0x5F, 0x00, 0x00,// !
...
0x3C, 0x4A, 0x49, 0x49, 0x30,// 6

0x01, 0x71, 0x09, 0x05, 0x03,// 7
0x36, 0x49, 0x49, 0x49, 0x36,// 8
...
0x7E, 0x11, 0x11, 0x11, 0x7E,// A
0x7F, 0x49, 0x49, 0x49, 0x36,// B
0x3E, 0x41, 0x41, 0x41, 0x22,// C
...
0x08, 0x08, 0x2A, 0x1C, 0x08,// ->
0x08, 0x1C, 0x2A, 0x08, 0x08 // <-
};
где в каждой строке находится битовая маска символа, например, как показано на рисунке.

bitmask

Любой символ таблицы шрифтов можно изменить добавив или удалив биты отображаемых пикселов (см. Рис. 4). Это можно сделать при помощи текстового редактора или специальных программ, например, GLCDFontCreator.exe.

Купить сечас

Вывод русских букв

В программу необходмо вставить функцию

String utf8rus(String source)
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;

   if (n >= 0xBF){
     switch (n) {
     case 0xD0: {
    n = source[i]; i++;
  if (n == 0x81) { n = 0xA8; break; }
  if (n >= 0x90 && n <= 0xBF) n = n + 0x2F;
    break;
  }
case 0xD1: {
n = source[i]; i++;
if (n == 0x91) { n = 0xB7; break; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
break;
}
}
}
m[0] = n; target = target + String(m);
}
return target;
}

И в папку библиотеки Adafruit_GFX(обычно она находится в Моих документакх=>Arduino=>Adafruit_GFX) залить модифицированный файл фонтов. Дляэтого качаем его и разархивируем. Файл glcdfont.c в папке библиотеки Adafruit_GFX заменяем аналогичным из архива. Вывод на экран будет вызываться командой tft.print(utf8rus("Температура"));

tft.fillScreen(RED);
tft.setTextSize(4);
tft.setCursor(30,0);
tft.print(utf8rus("Температура"));
tft.setCursor(0,50);
tft.print(utf8rus("Текущая: "));

Кроме того в начало программы вставьте 

#include <gfxfont.h>// фонт для вывода

Определение координат сенсорной точки
Для обнаружения нажатия необходимо знать сопротивление между крайними координатами по X. Сопротивление можно измерить с помощью любого мультиметра. Величина сопротивления, например, 300 ом и размеры сенсорной зоны устанавливаются отношением (Сопротивление меряется между пинами XM и XP).Замерив его я обнаружил что у меня пины перепутаны пины wr и rs. Сответсвенно поменял выводы в скетче


#define YP A1 // must be an analog pin
#define XM A2 // must be an analog pin
#define YM 7 // can be a digital pin
#define XP 6 // can be a digital pin
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); // 300 это и есть сопротивление. в моем случае было 269

Для работы с сенсорным экраном необходимо подключить библиотеку

#include <TouchScreen.h> // библиотека сенсорного экрана

Обычно измеренные координаты сенсорной зоны дисплея масштабируются в координатах зоны изображения.
#define TS_MINX 150
#define TS_MINY 120
#define TS_MAXX 920
#define TS_MAXY 940

в координаты зоны изображения 240 x 320 точек с использованием следующих команд.
tft.fillRect(165, 160, 130, 52, ORANGE); // построение прямоугольника
TSPoint p = ts.getPoint(); // считывание координат нажатия в зоне 1024 х 1024
p.x = tft.width()-(map(p.x, TS_MINX, TS_MAXX, tft.width(), 0)); // преобразование
p.y = tft.height()-(map(p.y, TS_MINY, TS_MAXY, tft.height(), 0)); // преобразование
// нажатие в зоне прямоугольника ?
if ((p.x > 15) and (p.x < 90) and (p.y > 120) and (p.y < 215)){…}


Несовпадение преобразованных координат нажатия на углы прямоугольника по оси Х с координатами построения изображения прямоугольника получилось как 15 к 160 и 90 к 212. Несовпадение можно уменьшить проведя калибровку резистивной матрицы сенсорного экрана.

Другой вариант использования тестовых угловых координат для определения - произошло ли нажатие в прямоугольной зоне, позволяет отказаться от функции перевода (масштабирования):
TSPoint p = ts.getPoint();// считывание координат нажатия в зоне 1024 х 1024
// нажатие в зоне прямоугольника ?
if ((p.x > 200) and (p.x < 365) and (p.y > 525) and (p.y < 840)){…}


Особенности построения сенсорных клавиш
При использовании сенсорного дисплея для ввода реакции пользователя необходимо на экране показать зоны ввода (сенсорные клавиши). От варианта построения клавиш и считывая координат нажатия на экран зависит надежность срабатывания ввода. Рассмотрим
два варианта организации ввода через дисплей.
1. Одна клавиша используется для ввода двух состояний, например, ВКЛ./ВЫКЛ. (ON/OFF)
2. Используются две клавиши: одна для ON, а другая для OFF.
В первом варианте за время нажатия происходило многократное переключение клавиши с ON на OFF и обратно, что затрудняло установку заданного положения клавиши. При введении 100 мс задержки между переключениями потребовалось значительно увеличить силу нажатия и, зачастую, требовалось многократное нажатие для изменения состояния клавиши.
Использование двух клавиш увеличило зону экрана занятую вводом, однако в этом варианте не зависимо от задержки происходило уверенное переключение даже при минимальной силе нажатия.

 Купить сейчас

Файлы

Arduino IDE 1.6.4 - Среда програмирования для ардуино (нет драйверов для ARDUINO DUE)

Arduino IDE 1.5.8 - Среда програмирования для ардуино

Драйвер для ARDUINO UNO для Windows 7 64-bit (если не установились драйвера с IDE воспользуйтесь этим драйвером)

Adafruit-GFX - Библиотека графики для работы с дисплеем

Mcufriend_kbv_2.5 -Библиотека для работы с дисплеем на базе чипсета ST7789V.

Touch-Screen - Библиотека для работы с сенсором.

utf8rus - Модифицированный файл фонтов с русскими буквами

Добавить комментарий


Защитный код
Обновить

Go to top