След доста ровене из google по темата, и ескперименти на базата опита на какви ли не хора, най-накрая успяхме да подкараме въпросното TFT-дисплейче да работи. "Ключът за палатката" се оказа level-shifter-а CD4050BE. Преди това с резисторни делители опитите бяха безуспешни. Втория проблем, както с повечето проекти и модули за Ардуино беше подходящата и работоспособна библиотека. Трябваше да се съобразява и размера на паметта на Nano, тъй като тя за разликата от да речем Mega е доста по-малка. Първоначалната библиотека, с която успяхме да накараме дисплеят да работи, въпреки претърпяно редуциране заемаше над 70% от паметта. В крайна сметка се спрях на библиотека, която към момента използвайки приложение за графичен тест + двете библиотеки нужни за него - паметта заета в Nano се сведе до 50%.
Дисплеят с който разполагахме е следният:


Означение на пиновете:
Пин | Значение -------------- (1) - Vcc (2) - Gnd (3) - CS (4) - RESET (5) - D/C (6) - MOSI (7) - SCK (8) - LED (9) - MISO
TFT-то като повечето подобни дисплеи работи на 3.3v - както като захранване, така и логическите му сигнали. За целта бе необходим някакъв level-shifting тъй като както Nano, така и Uno, и MEGA работят на 5v. Eдинствения вариант с който имахме успех бе с CD4050BE.
Ето и цялостната схема на свързване на дисплея към Arduino Nano посредством CD4050BE, както и управлението на LED подстветката. За улеснение ще го наричаме tft-driver:


Свързване на Arduino Nano към tft-driver-а:
пин | Значение (пинове на tft-driver, конектор SV2/PLC) ------------------------- 3.3v - (1) Vcc GND - (2) Gnd D10 - (3) CS D4 - (4) RST (RESET) D11 - (5) MOSI D7 - (6) LED D13 - (7) SCK D9 - (8) DC D12 - (9) MISO
Важно е да се помни, че MOSI, MISO и SCK са фиксирани като пинове, за да имаме hardware-но SPI, те не могат да бъдат променени. Останалите (RST, LED, DC, CS) могат да бъде поставени и на други пинове от горе-показаните, но промяната трябва да бъде отразена в програмния код.
Начин за използване на библиотеката в използвана от нас схема на свързване:
#include < SPI.h >
#include < Adafruit_GFX.h >
#include < Adafruit_ILI9341.h >
// TFT дисплеят и слотът за SD карти поделят хардуерният SPI интерфейс.
// Хардуерните SPI-пинове са специфични за всеки модел Arduino и не могат
// да бъдат променяни с алтернативни.
// За Uno, Nano, Duemilanove и т.н. :
// пин 11 = MOSI, пин 12 = MISO, пин 13 = SCK.
// За MEGA:
// пин 51 = MOSI, пин 50 = MISO, пин 52 = SCK.
#define TFT_RST 4
#define TFT_LED 7
#define TFT_DC 9
#define TFT_CS 10
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
void setup() {
//следващите два реда са за включване на осветлението на екрана
pinMode(TFT_LED,OUTPUT);
digitalWrite(TFT_LED,HIGH);
tft.begin();
}
void loop(void) {
for(uint8_t rotation=0; rotation<4; rotation++) {
tft.setRotation(rotation);
tft.fillScreen(ILI9341_BLACK);
tft.setCursor(0, 0);
tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
tft.println("Hello World!");
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2);
tft.println(9999.99);
tft.setTextColor(ILI9341_RED); tft.setTextSize(3);
tft.println(0xDEADBEEF, HEX);
tft.println();
tft.setTextColor(ILI9341_GREEN);
tft.setTextSize(5);
tft.println("Test 1");
tft.setTextSize(2);
tft.println("Test 2");
tft.setTextSize(1);
tft.println("Test 3");
tft.println("Test 4");
tft.println("Test text line 5");
delay(1000);
}
}
Ето ги и двете библиотеки за изтегляне: ILI9341.zip
Линк към видео демо: https://youtu.be/xMLieysoa3c?si=W1qnoyaa-xkL8Cxt