8 (800) 350-30-16

Сенсорный дисплей TFT 2.4 дюйма

Дата: / Категория: Дисплеи / Автор: DOC_tr

Это какая-то жесть, трэш и хардкор!

С этим экраном без пол-литра разобраться невозможно!  

Ну ладно, свое негодование я выразил, теперь можно приступить к инструкции подключения сенсорного экрана к Arduino. Как вы уже догадались из заголовка статьи - подключать мы будем Сенсорный дисплей TFT 2.4 дюйма.

Я взял готовую библиотеку для работы с сенсорным дисплеем - Adafruit_TFTLCD и TouchScreen (их выкладывать не буду, и так много в интернете), и попробовал пример paint из Образцов.

Не скажу, что был удивлен, когда ничего не заработало, но это меня немного расстроило.

После этого я перепробовал 5 различных библиотек, но все равно все впустую.

Вдруг я наткнулся на библиотеку, написанную как раз для данного контроллера SPFD5408 - github или архив на нашем сайте. Попробовав ее запустить, я было вздохнул с облегчением, когда на экране появились надписи, и уже начал ликовать, но и тут меня ждало разочарование - тачскрин не работал. Точнее работал, но только один раз и при тыке в определенное место. Я уж начал грешить на экран, но решил добить все это дело до конца и пошел сравнивать коды библиотек.

В стандартной библиотеке Adafruit_TFTLCD выбор устройства идет с помощью следующего кода:

uint16_t identifier = tft.readID();

if(identifier == 0x9325) {
Serial.println(F("Found ILI9325 LCD driver"));
} else if(identifier == 0x9328) {
Serial.println(F("Found ILI9328 LCD driver"));
} else if(identifier == 0x7575) {
Serial.println(F("Found HX8347G LCD driver"));
} else if(identifier == 0x9341) {
Serial.println(F("Found ILI9341 LCD driver"));
} else if(identifier == 0x8357) {
Serial.println(F("Found HX8357D LCD driver"));
} else {
Serial.print(F("Unknown LCD driver chip: "));
Serial.println(identifier, HEX);
Serial.println(F("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
Serial.println(F(" #define USE_ADAFRUIT_SHIELD_PINOUT"));
Serial.println(F("should appear in the library header (Adafruit_TFT.h)."));
Serial.println(F("If using the breakout board, it should NOT be #defined!"));
Serial.println(F("Also if using the breakout, double-check that all wiring"));
Serial.println(F("matches the tutorial."));
return;
}

tft.begin(identifier); 

Так как у нас драйвер ILI9341, то код, по идее, должен быть 0x9341. Как бы не так. Идентификатор устройства не хочет определяться, и поэтому весь следующий код мы меняем на:

tft.begin(0x9341); 

Отлично, теперь попробуем с помощью примера отобразить изображение с флешки. 

Код данного примера слишком длинный, поэтому я оставлю его на pastebin

Данный код уже исправлен для нашего дисплея, так что можно смело создавать изображение в формате bmp 320х240 и заливать его на флешку. Я залил следующее изображение:

И получилось у меня вот что:

 

Что ж, очень неплохо. Цвета четкие, и отображается все правильно. Пока все хорошо.

Теперь постараемся проверить наш тачпад в действии. 

Данный код тоже из образцов, но со стандартным TouchScreen.h он работать отказывался. Поэтому я заменил его на SPFD5408_TouchScreen.h из библиотеки SPFD5408

#include <stdint.h>
#include <SPFD5408_TouchScreen.h>

#define YP A2
#define XM A3
#define YM 8
#define XP 9
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

void setup(void) {
Serial.begin(9600);
}

void loop(void) {
TSPoint p = ts.getPoint();
if (p.z > ts.pressureThreshhold) {
Serial.print("X = "); Serial.print(p.x);
Serial.print("\tY = "); Serial.print(p.y);
Serial.print("\tPressure = "); Serial.println(p.z);
}
delay(100);
}

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

И я начал копаться в коде библиотеки SPFD5408 и в ее примерах.

Нашел кучу багов. Например, дисплей не отдает ширину и высоту, свой идентификатор и много разных данных. Помимо этого x почему-то был y, и наоборот. Все что только возможно было напутано и перепутано.

Короче, после нескольких часов исправления кода у меня все заработало, и я могу с чистой совестью поделиться с вами примерами на основе библиотеки SPFD5408

Так как все примеры громоздки я, опять же, залил их на PasteBin (приведенные ниже скетчи работают только с дисплеем 2.4" (320х240). Ширина и высота там захардкожены.),

Первым делом у нас идет калибровка дисплея, потому что, когда я пытался на нем что-то рисовать, то линия шла на сантиметр ниже и левее, чем то место, где я касался пальцем, так что сначала откалибруем наш дисплей с помощью данного кода

Сначала нужно коснуться 2-х точек в разных углах экрана

После чего получим данные:

Отсюда нам нужны только 4 числа. Куда их вставлять я расскажу ниже.

TS_MINX 198
TS_MINY 205
TS_MAXX 999
TS_MAXY 942

После касаемся экрана и проверяем, чтобы там, где мы касаемся экрана, появлялись синие точки.

Вот в целом и все. Запоминаем наши данные, а лучше записываем, и переходим к примеру paint. Исправленный код вы можете найти по ссылке и, единственное, что там нужно изменить, это наши калибровочные данные. Все те переменные, которые мы получили с помощью калибровки, мы вводим в строках 15-18

После запускаем, и получаем отличный paint ;)

Вот на этом мои мучения с сенсорным дисплеем TFT 2.4 дюйма закончились и, надеюсь, данная статья сэкономит кому-нибудь время.

UPD

Данная статья рассказывает как подключить к UNO. Для MEGA картинка с флешки читаться не будет из-за разной приязки портов. Все остальные примеры работают как с UNO, так и с MEGA

Теги: #Arduino, #TFT, #Сенсор, #Shield

Ваша оценка:

Рейтинг: 8.0 (Оценок: 22)

Комментарии (36):

Arturofropy
2020-10-25 17:26
<a href=http://mysite.com>http://mysite.com</a>
RaymondJeoro
2020-10-22 16:41
<a href=http://mysite.com>http://mysite.com</a>
xpnyndpo
2020-06-08 13:00
https://canadianpillsbuy.com/ - canada cialis without precipitation  
cialis available in uae  <a href=https://canadianpillsbuy.com/>cialis pills side effects</a>  addiction au cialis
Alexfef
2018-09-22 08:21
Ваш сайт это убогое говно, вы его сами делали или заплатили криворукому студенту?
Я делаю крутые сайты профессионально и дешево!!! Телефон +79169295582 или 879169295582 по россии. Звоните! Скидка только сейчас!
Слыш, мудак, сайт закажи или зассал терпила? Маму твою ебал.
Скидка только сейчас, консультация бесплатно. Примеры работ по запросу.
Александр
backrecKl
2018-03-27 01:49
Очень забавный вопрос

---
Вместо критики пишите свои варианты. скачать фифа 15 с кряками через торрент, 3 dm cracks fifa 15 а также <a href=http://15fifa.ru/>сайт фифа на русском языке</a> фифа 15 скачать торрент на пк
Aged
2018-01-15 22:42
Работает но с драйвером 0х7575 с другими ну ни как. И зеркальное изображение. Как исправить. Спасибо.
bva1
2017-03-09 22:04
bmp файл нужно переименовать в robom.bmp
lexa
2016-12-15 03:06
Скажите пожалуйста 1) а дисплей совместим с Nano  вместо Uno?
2) Сенсор реагирует если палцем нажать?
DOC_tr
2016-12-16 10:50
@lexa:1 - чисто теоретически, если правильно развести все контакты, то да. Но оно вам надо? Легче просто купить UNO и воткнуть в него.
2 - да, реагирует.
Димон
2016-09-24 12:25
Все отлично заработало, тач и экран, как прикрутить русский язык подскажите
KblCb
2016-09-03 00:05
Проверял экран, думал сенсор неисправен.
Пэинт рисует точками и где попало.
Запускал калибровку - вообще не реагировал экран на мои нажатия, пока случайно не нажал на противоположную сторону экрана. Получается, что первая точка теста в левом верхнем углу, а я жму правый верхний угол и тест проходит.
Инвертирована X.
Подозреваю, что китайцами был неправильно припаян (приклеен) тач.

Как это правильнее лечить?
IceDiver
2016-10-06 21:08
@KblCb:Присоединяюсь к вопросу. Точно такакая же проблема, один в один. Как это можно поправить? И еще у меня не получается в самый угол попасть - сенсор не очень точный. А так конечно респект все заработало с первого раза  в отличии от  AdaFruit.
Pavell V
2016-11-19 20:00
@KblCb:пробовал поправить по моему коменту от 2016-06-29 22:36 ?

Комментарий:

Copyright © RobOM.ru 2020 г. Все права защищены