Данные дисплеи выпускаются производителем с различными контроллерами, поэтому возможны различные варианты их запуска:
Вариант 1:
Контроллер дисплея: ILI9341 (SPFD5408)
http://www.instructables.com/id/How-to-use-24-inch-TFT-LCD-SPFD5408-with-Arduino-U/?ALLSTEPS
Наша статья: Пример работы Arduino Uno R3 с данным дисплеем и библиотекой от Adafruit >>
Вариант 2:
Контроллер дисплея: ILI9325
Пример скетча:
#include <SD.h> #include "TFTLCD.h" //подключение дисплея #define LCD_CS A3 #define LCD_CD A2 #define LCD_WR A1 #define LCD_RD A0 #define LCD_RESET A4 //подключение карты SD #define SD_CS 10 //цвета #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF #define GRIDCOLOR 0x8778 #define GRAPHCOLOR 0xFFE0 //такой файл будем искать на карте #define LOG_NAME "LOG.CSV" //настройки экрана #define TITLE_STRING "arduino.shopium.ua logger" //25 символов максимум, верхний колонтитул #define MIN_X 0 #define MAX_X 320 //размер экрана X #define MIN_Y 0 #define MAX_Y 240 //размер экрана Y #define GRIDSTEP 20 //шаг сетки #define MIN_VALUE -100 //мин. значение на графике #define MAX_VALUE 100 //макс. значение на графике File ini_file; TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); //определяем область графика - по оси X от 0 до максимума (ширины экрана), по оси Y - с отступами по 20 пкс uint16_t gr_x = MIN_X; uint16_t gr_min_x = MIN_X; uint16_t gr_max_x = MAX_X; uint16_t gr_y = MIN_Y; uint16_t gr_min_y = MIN_Y+20; uint16_t gr_max_y = MAX_Y-20; long Vcc = 0; void setup() { Serial.begin(115200); tft.reset(); tft.initDisplay(); tft.setRotation(3);//Uno R3: разъём USB слева pinMode(10, OUTPUT);//CS SD-карты if (!SD.begin(10)) { Serial.println("SD failed"); } Serial.println("SD init"); } void loop() { Serial.println("draw_graph_bg();"); draw_graph_bg(); Serial.println("dump_csv_as_text();"); dump_csv_as_text(); Serial.println("dump_csv_as_graph();"); dump_csv_as_graph(); Serial.println("read_and_draw_Vcc();"); read_and_draw_Vcc(); Serial.println("while(1)"); while(1); } void dump_csv_as_graph() { for (int i = MIN_X; i < MAX_X; i++) { int val = analogRead(A5); int val_tft = map(val, 0, 1024, gr_max_y, gr_min_y); tft.drawPixel(i, val_tft, YELLOW); } } void dump_csv_as_text() { // return; ini_file = SD.open(LOG_NAME); tft.setCursor(200, MAX_Y-14); tft.setTextColor(RED); if (!ini_file) { tft.println("No log file"); Serial.println("No log file"); while(1); } else { tft.println("Log found"); Serial.println("Log found"); } ini_file.seek(0); String csv1; char character; while (ini_file.available()) { while (character != '\n') {//read 1 line character = ini_file.read(); if (character != ';') {//read 1-st value in line csv1.concat(character); } else { tft.println(csv1); Serial.println(csv1); } } } ini_file.close(); } void draw_graph_bg() { tft.fillScreen(BLACK); tft.fillRect(0, 0, MAX_X, 20, BLUE); tft.fillRect(0, MAX_Y-20, MAX_X, 20, BLUE); tft.setCursor(10, 2); tft.setTextColor(YELLOW); tft.setTextSize(2); tft.println(TITLE_STRING); tft.setTextSize(1); uint16_t h_center = (MAX_Y-MIN_Y)/2;//координаты Y поиск нулевой линии tft.drawHorizontalLine(gr_min_x, h_center, gr_max_x, RED);//нулевая линия tft.setCursor(0, 123); int h_center_val = (MAX_VALUE+MIN_VALUE)/2; if (h_center_val < 10){ tft.print(" ");//2 отступа если у нас одна цифра } else { if (h_center_val < 100) { tft.print(" ");//1 отступ если у нас две цифры } } tft.println(h_center_val);//подпись оси Y - нулевое значение for (uint16_t i = h_center+GRIDSTEP; i < gr_max_y; i += GRIDSTEP) {//подписи оси Y вниз int podp = map (i, h_center, gr_max_y, 0, MIN_VALUE); tft.drawHorizontalLine(gr_min_x, i, gr_max_x, GRIDCOLOR); tft.setCursor(0, i+3); tft.println(podp); } for (uint16_t i = h_center-GRIDSTEP; i > gr_min_y; i -= GRIDSTEP) {//подписи оси Y вверх int podp = map (i, h_center, gr_min_y, 0, MAX_VALUE); tft.drawHorizontalLine(gr_min_x, i, gr_max_x, GRIDCOLOR); tft.setCursor(0, i+3); tft.print("+"); tft.println(podp); } for (uint16_t i = gr_min_x+GRIDSTEP; i <= gr_max_x; i += GRIDSTEP) {tft.drawVerticalLine(i, gr_min_y, gr_max_y-20, GRIDCOLOR);} } void read_and_draw_Vcc() { long result; ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); delay(2); ADCSRA |= _BV(ADSC); while (bit_is_set(ADCSRA, ADSC)); result = ADCL; result |= ADCH << 8; result = 1126400L / result; char buffer[10]; float fresult = result; fresult = fresult / 1000; ftoa(buffer, fresult, 3); // tft.fillRect(0, MAX_Y-12, 50, MAX_Y-2, BLUE); tft.setCursor(10, MAX_Y-14); tft.print("Vcc: "); tft.println(buffer); } char *ftoa(char *a, double f, int precision) { long p[] = {0,10,100,1000,10000,100000,1000000,10000000,100000000}; char *ret = a; long heiltal = (long)f; itoa(heiltal, a, 10); while (*a != '\0') a++; *a++ = '.'; long decimal = abs((long)((f - heiltal) * p[precision])); itoa(decimal, a, 10); return ret; }
Вариант 3:
Контроллер дисплея: 0х0154
https://forum.arduino.cc/index.php?topic=366304.0
Здесь следует
- Загрузить библиотеку Adafruit_GFX.h из GitHub (можно скачать с нашего сервера: adafruit-gfx-library-master)
- Загрузить приложенную к топикук библиотеку MCUFRIEND_kbv.zip (можно скачать с нашего сервера: mcufriend_kbv_2-90)
- Запустить тестовый скетч GLUE_Demo_320x240 или testcard_kbv
Проверено с Arduino IDE 1.6.12