Для 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 кОм.
- Использовать микросхему CD4050B non-inverting hex buffers,logiclevel conversion, собственно что я и выбрал.
- Vss = питание минус.
- Vcc = +3.3В питание логики.
Когда на вход A подается +5 вольт, на выходе G будет +3.3 В. Думаю принцип работы понятен.
Соединение дисплея с Arduino Nano:
SCK —— pin D8 ( через делитель ).
SDI (MOSI) —— pin D9 ( через делитель ).
D/C —— pin D10 ( через делитель ).
RESET —— pinD 11 ( через делитель ).
CS —— pin D12 ( через делитель ).
VCC —— +5v (+5 вольт,ВНИМАНИЕ ваш дисплей может питаться 3.3В)
GND —— GND (земля).
LED —— +3.3v (подсветка дисплея).
Кодинг :
Для работы с дисплеем есть много разных библиотек. Я использую библиотеку UTFT которую скачаем с GitHab или с нашего сайта. Загрузим готовый скетч из примеров с нашим разрешение :
// библиотека для работы с дисплеем #include <UTFT.h> // создаём объект класса UTFT // и передаём идентификатор модели дисплея и номера пинов // к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS // UTFT myGLCD(TFT01_22SP, SDI (MOSI),SCK ,CS ,RESET , D/C); UTFT myGLCD(TFT01_22SP, 9, 8, 12, 11, 10); // объявления встроенных шрифтов extern uint8_t SmallFont[]; extern uint8_t BigFont[]; extern uint8_t SevenSegNumFont[]; void setup() { } void loop() { // инициализируем дисплей с вертикальной ориентацией myGLCD.InitLCD(0); // очищаем экран myGLCD.clrScr(); // выбираем большой шрифт myGLCD.setFont(BigFont); // печатаем строку в центре верхней строки дисплея myGLCD.print("TFT01_22SP", CENTER, 0); // выбираем большой шрифт myGLCD.setFont(SmallFont); // печатаем строку в указанной строке позиции myGLCD.print("Hello from Amperka!", CENTER, 50); // выбираем сесисегментный шрифт myGLCD.setFont(SevenSegNumFont); // печатаем строку в указанной строке позиции myGLCD.print("12345", CENTER, 100); // ждём 1 секунду delay(10000); // инициализируем дисплей с горизонтальной ориентацией myGLCD.InitLCD(1); // очищаем экран myGLCD.clrScr(); // выбираем большой шрифт myGLCD.setFont(BigFont); // печатаем строку в центре верхней строки дисплея myGLCD.print("Hello, user!", CENTER, 0); // выбираем большой шрифт myGLCD.setFont(SmallFont); // печатаем строку в указанной строке позиции myGLCD.print("The screen is 2.2 diagonal", CENTER, 50); // выбираем сесисегментный шрифт myGLCD.setFont(SevenSegNumFont); // печатаем строку в указанной строке позиции myGLCD.print("67890", CENTER, 100); // ждём 1 секунду delay(10000); }
Этот пример поможет вам с конвертацией типа float в string:
Arduino-FloatToString #include<stdlib.h> // included for floatToString function String floatToString(float x, byte precision = 2) { char tmp[50]; dtostrf(x, 0, precision, tmp); return String(tmp); } void setup() { float f = -17.06f; // some float number String str = floatToString(f); // conversion call // print over serial Serial.begin(9600); Serial.println(str); } void loop() { }
Вот собственно и все . Дальше все ограничено только вашей фантазией.
Делители там ненужны). Логика там 3.3v и 5v. На плате есть джампер «J1» в разомкнутом 3.3v в замкнутом 5v.
Буду знать, жаль что он не припаян (((
Это неверно. Джампер не имеет отношения к логическим уровням, а лишь позволяет выбрать напряжение питания модуля. Если разомкнут (по умолчанию) — 5v, если замкнут — 3.3v (в обход встроенного стабилизатора). Логические уровни должны быть 3.3v