четверг, 2 июня 2016 г.

LCD дисплей для Arduino, 2.4", с тач-скрином и кардридером.

У дядюшки Ляо можно купить отличный шилд для Arduino Uno, и его аналогов. Шилд продается с припаянными штырьками, так что, достаточно его установить на плату, и можно пользоваться. Давайте рассмотрим его по-подробнее.




Кроме самого дисплея диагональю 2.4" и разрешением 240х320 точек, на борту присутствует кардридер для карт памяти Micro-SD, и  резистивный тач-скрин, реагирующий как на стилус, так и на пальцы. Устройство использует почти все пины ардуины, кроме А4, А5, D0 и D1. Так же свободным остается пин D10, если не требуется пользоваться кардридером. Дополнительное питание дисплею не требуется - он питается от 5В ардуино через встроенный регулятор напряжения.

На алиэкспрессе много подобных шилдов, одинаковых снаружи, но собранных на разных контроллерах. Я выбрал экземпляр с контроллером spfd5408, т.к. для него есть хорошая библиотека с поддержкой графических функций и тач-скрина.

Скачиваем библиотеку с сайта разработчика, распаковываем архив и переименовываем извлеченную папку в "SPFD5408". Теперь эту папку надо скопировать в директорию с библиотеками Arduino IDE (по умолчанию находится по адресу C:\Program Files (x86)\Arduino\libraries), после этого IDE надо перезапустить. Если все сделано правильно, то в меню с примерами появится подменю с названием "SPFD5408".
Теперь открываем пример под названием "spfd5408_graphicstest", и заливаем его в ардуино. С выводом изображения проблем возникнуть не должно, однако, если экран после загрузки остается белым, или на нем присутствуют лишь разноцветные точки, то надо проверить соответствие пинов "LCD_RD", "LCD_WR", "LCD_RS" ("LCD_CD") и "LCD_CS" на шилде, и одноименных пинов, указанных в примере. Если есть несоответствия, то их надо устранить.

С изображением разобрались, перейдем к тач-скрину. Тут уже стоит заготовить небольшой бубен, в него наверняка придется постучать! Заливаем пример "spfd5408_calibrate". Если тач вообще никак не реагирует на нажатия, то в скетче надо поэкспериментировать с этой секцией:
//These are the pins for the shield!
#define YP A1
#define XM A2
#define YM 7 
#define XP 6
В моем случае пришлось сделать следующую замену: А1-A3, 7-9, 6-8.

Когда тач начал откликаться на нажатия, надо его откалибровать. Для этого достаточно аккуратно нажать сначала на одну белую точку в углу экрана, а потом - на другую. Если в первую точку попасть получилось, а  во вторую - нет, то надо отредактировать файл "spfd5408_TouchScreen.cpp" (по умолчанию он находится по адресу C:\Program Files (x86)\Arduino\libraries\spfd5408). Открыв его любым текстовым редактором, находим строчку "return TSPoint(x, 1023 - y, z);" и заменяем ее на "return TSPoint(1023 - x, 1023 - y, z);". После этого заново заливаем скетч, и завершаем калибровку. Результатом будет ряд значений, на подобии этого:
minx=171
miny=120

maxx=963
maxy=867
Значения надо куда-нибудь записать, и в дальнейшем использовать их при инициализации тача. Теперь можно загрузить скетч "spfd5408_tftpaint", и немножко порисовать.

Ну и напоследок проверим кардридер. Здесь все просто - берем пример ReadWrite из категории SD, меняем строку "if (!SD.begin(4))" на "if (!SD.begin(10))", здесь "10" - номер пина CD_CS на шилде. Заливаем скетч, и открываем монитор последовательного порта. Если все прошло хорошо, увидим такую картину:

Следует обратить внимание, что флешка должна быть отформатирована в FAT32, с NTFS эта библиотека работать не умеет!




2 комментария: