TFT LCD 3.95"

Тема в разделе "Arduino & Shields", создана пользователем Salk, 9 май 2017.

  1. Salk

    Salk Гик

    Добрый день, возник вопрос про данный дисплейчик, валяется без дела, решил обуздать. TFT LCD дисплей 3.95" на ILI9488 (ID = 0x9488).
    Более менее разобрался в базовых командах, библиотеки:
    Код (C++):
    #include <Adafruit_GFX.h> // Hardware-specific library
    #include <MCUFRIEND_kbv.h>
    Но возник вопрос, как обновлять экран частично, а не перезаливать целиком весь экран
    Код (C++):
    tft.fillScreen(RED);
    Т.е. в конкретном месте вывожу какую то информацию:
    Код (C++):
      tft.setTextSize(4);
      tft.setCursor(30, 0);
      tft.print("23");
    и если потом в то же место запишу другую:
    Код (C++):
      tft.setTextSize(4);
      tft.setCursor(30, 0);
      tft.print("24");
    То произойдет наложение, как мне обновить экран только в этом месте, где это необходимо?
    Каждый раз перезаливать экран или сбрасывать ( tft.reset(); ), это долго и некрасиво. Должен же быть какой-то выход :) Кто-то сталкивался? Спасибо.
     
  2. DetSimen

    DetSimen Guest

    нууу, можно стирать/заливать только тот прямоугольник, куда будет выводиться текст
     
  3. sslobodyan

    sslobodyan Гик

    Если вам надо очищать знакоместо, то посмотрите внимательно как работает графическая библиотека. Там есть возможность указать только цвет следующих символов, а также цвет и фон. Вот при указании цвета и фона будут выводиться не только засвеченные пиксели шрифта, а полностью знакоместо с фоновыми пикселями, затирая предыдущее изображение.
     
    Salk нравится это.
  4. DetSimen

    DetSimen Guest

    Иногда, если выводимая строка меньше уже имеющейся, например выводим "OK" в строку, где раньше был "ERROR", я сначала очищаю всю строку, потом вывожу, моргает меньше. IMHO.
     
    Salk нравится это.
  5. sslobodyan

    sslobodyan Гик

    Естественно, если надо очистить строку, то проще сделать это один раз путем рисования прямоугольника цвета фона. Еще для ускорения полезно использовать вывод быстрыми горизонтальными или вертикальными линиями в зависимости от организации видеобуфера в вашем экране.
     
  6. Salk

    Salk Гик

    О, огромное спасибо, я уж думал экранчик бяка и собирался отложить его в сторону, а оказывается все только начинается :)
    Быстродействие данного кода для текста меня вполне устраивает, а заливку прямоугольника можно использовать, если нужно быстро затереть какие-то графические элементы.
    Код (C++):
    tft.setCursor(50, 50);
    // Цвет текста и его фон
      tft.setTextColor(WHITE, BLACK);
      tft.setTextSize(3);
      tft.println("Hello World!       ");
      delay(1000);
      tft.setCursor(50, 50);
      tft.setTextColor(WHITE, BLACK);
      tft.setTextSize(3);
      tft.println("Hello, my freinds!");
      delay(1000);
    Еще раз спасибо!
    Вы имеете ввиду эти функции ?
    Код (C++):
    // Быстро рисуемые линии (x, y, длина), по оси y
        tft.drawFastVLine(15, 150, 50, BLUE2);
    // по оси x
        tft.drawFastHLine(20, 50, 10, MAGENTA);
    Тем самым заполнить ими какой-то участок?
     
  7. sslobodyan

    sslobodyan Гик

    Именно. Проверьте какая из них быстрее работает именно с вашим экраном.