Нужна помощь в подключении графического TFT-экрана 480×320 / 3,2” с зеркальным отображением

Тема в разделе "Arduino & Shields", создана пользователем Сергей-Ейск, 30 окт 2017.

  1. Есть Цветной графический TFT-экран 480×320 / 3,2”. При заливке демонстрационного скетча получается отображение букв и графики в зеркальном варианте. На одном украинском сайте я нашел:
    Поступила партия дисплеев с зеркальным отображением с драйвером HX8357 для которых требуется такая инициализация:
    tft.init();
    tft.setRotation(3);

    tft.invertDisplay(1);
    А у меня в программе стоит
    myGLCD.InitLCD(0);
    Я не очень понимаю, как правильно прописать в этом случае в программе инициализацию дисплея. Просто копирование вышеуказанного кода приводит к ошибке.
    Прошу подсказать, так как являюсь новичком в этой области.
     
  2. vector99

    vector99 Гик

    https://github.com/Bodmer/TFT_HX8357
    Библиотека графических изображений и шрифтов Arduino IDE для Mega с драйверами для TFT-дисплеев HX8357B, HX8357C, ILI9481 и ILI9486 с 16-разрядным параллельным интерфейсом
     
    Сергей-Ейск нравится это.
  3. Спасибо большое.
    Вечером после работы попробую. Но уже посмотрел в библиотеке - да, похоже инициализация дисплея здесь именно такая, как мне нужно!
    Ещё раз благодарю!)))
     
  4. Ещё раз большое спасибо! Всё получилось, изображение на экране нормальное.
    Теперь вот буду колдовать над русификацией. Понимаю, что наглею, но не встречалась ли Вам русификация этой библиотеки?
    С уважением,
    Сергей
     
  5. vector99

    vector99 Гик

    Сам заморочился этой проблемой. В инете не нашол. Частично сходится с adafruit и u8glib. При наличии свободного времени за 1-2 вечера можно перевести!
     
  6. Нууууу, для меня это пока невыполнимая задача в ближайшее время. Нужно "немного" приобрести сначала знаний в этой области.
     
  7. vector99

    vector99 Гик

    В библиотеке находим файл "TFT_HX8357.ccp" и открываем его в блокноте (я использую Notepad++, там имеетмя подсветка синтаксиса), ищем строки тапа:
    Код (C++):
    /***************************************************************************************
    ** Function name:           drawCircle
    ** Description:             Draw a circle outline
    ***************************************************************************************/
    Вот их и переводим, всё интуитивно понятно. А так как библиотека основана на библиотеке adafruit_gfx, то большая часть описания будет совпадать или будет очень похожа!
     
  8. vector99

    vector99 Гик

    Может пригодится, но надо сравнивать с тем что в нашей библиотеке.
    Adafruit_GFX functions
    • display - отображение на экране. Вызывается после каждого изменения экрана. КАЖДОГО!
    • clearDisplay - очищает экран;
    • fillScreen(color) - закрашиваем весь дисплей в цвет color (константы BLACKили WHITE);
    • drawPixel(x, y, color) - рисует пиксель по координатам x, y с цветом color;
    • drawLine(x, y, x1, y1, color) - рисует линию с началом в координатах x, y и концом в координатах x1, y1 цветомcolor;
    • drawFastVLine(x, y, length, color) - рисует горизонтальную линию с началом в координатах x, y, длинойlength и цветом color (быстрее чем drawLine);
    • drawFastHLine(x, y, length, color) - рисует вертикальную линию с началом в координатах x, y, длиной length и цветом color (быстрее чем drawLine);
    • drawRect(x, y, width, height, color) - рисует прямоугольник с началом в координатах x, y, высотой height, шириной width и цветом color;
    • fillRect(x, y, width, height, color) - рисуетзакрашенный прямоугольник с началом в координатах x, y, высотойheight, шириной width и цветом color;
    • drawCircle(x, y, radius, color) - рисует круг с началом в координатах x, y, радиусом radius и цветом color;
    • fillCircle(x, y, radius, color) - рисуетзакрашенный круг с началом в координатах x, y, радиусом radius и цветом color;
    • drawTriangle(x, y, x1, y1, x2, y2, color) - рисует треугольник с углами в x, y; x1, y1; x2, y2 и цветом color;
    • fillTriangle(x, y, x1, y1, x2, y2, color) - рисует закрашенный треугольник с углами в x, y; x1, y1; x2, y2 и цветомcolor;
    • drawRoundRect(x, y, width, height, radius, color) - рисует прямоугольник с началом в координатах x, y, высотойheight, шириной width, радиусомradius и цветом color;
    • fillRoundRect(x, y, width, height, radius, color) - рисует закрашенныйпрямоугольник с началом в координатах x, y, высотой height, шириной width, радиусом radius и цветом color;
    • drawBitmap - данная функция не такая уж и простая и применяется в нашем коде. Лучше ее изучать на примере (пример смотрите выше);
    • setCursor(x, y) - устанавливает курсор в позицию x, y;
    • setTextColor(color) - устанавливает цвет текста;
    • setTextSize(size) - устанавливает размер текста;
    • write(symbol) - выводит на экран символ symbol
     
  9. Спасибо большое. Но у меня сейчас накрылся загрузчик Arduino Mega 2560 R3, к сожалению. Покопался в инете и обнаружил фантастическую вещь: "Причина оказалась в хитром баге бутлоадера, который при получении через порт трех восклицательных знаков подряд "!!!" переходит в интерактивный режим командной строки прямо в середине процесса заливки софта...". Загрузчик "при этом avrdude на компе уходил в бесконечный цикл и выдавал что-то типа avrdude: stk500_2_ReceiveMessage(): timeout, зависая на многие минуты, так, что помогало только убить его процесс".
    Вот ссылка в инете: https://ru-radio-electr.livejournal.com/1244106.html
    А я когда видоизменял демо-пример, поставил в тексте, который должен был отображаться на экране, три восклицательных знака!!! И из-за этого у меня полностью накрылся загрузчик и плата работает только со старой прошитой программой!!! Новые не прошиваются совсем.
    Короче - как не пытался по различным советам перешивать загрузчик - пока ничего не вышло.
    Это как будто касается только Меги. Уно на такие вещи не реагирует.
    Вот что пишут в инете: "К сожалению, практически все "девственные" платы Arduino Mega 2560 на рынке имеют этот баг, т.к. несмотря на то, что проблема известна с момента начала массовых поставок плат из Китая, поставляемые вместе с Ардуино бутлоадеры до сих пор (а это уже несколько лет, примерно со времен Ардуино 0019) не изменялись..."
    Ладно, буду думать...
     
    Последнее редактирование: 1 ноя 2017
    arkadyf нравится это.
  10. ИгорьК

    ИгорьК Гуру

    Ага. Нарывался на это давно. дня три убивался- искал причину. Но с платой ничего не происходило - просто код не заливался.
     
  11. Да. Пошел сегодня и купил новую Megu. Всё сразу заработало. Теперь буду внимательным, никаких восклицательных знаков.
    Буду думать над русификацией.
     
    Последнее редактирование: 1 ноя 2017
  12. vector99

    vector99 Гик

    Скачиваем и меняем библиотеку.
    Добавить функцию utf8rus() в скетч:
    Код (C++):
    String utf8rus(String source)
    {
      int i,k;
      String target;
      unsigned char n;
      char m[2] = { '0', '\0' };

      k = source.length(); i = 0;

      while (i < k) {
        n = source[i]; i++;

        if (n >= 0xC0) {
          switch (n) {
            case 0xD0: {
              n = source[i]; i++;
              if (n == 0x81) { n = 0xA8; break; }
              if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
              break;
            }
            case 0xD1: {
              n = source[i]; i++;
              if (n == 0x91) { n = 0xB8; break; }
              if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
              break;
            }
          }
        }
        m[0] = n; target = target + String(m);
      }
    return target;
    }
    Применять функцию utf8rus() можно внутри команд печати строк:
    Код (C++):
    tft.println(utf8rus("Тест"));
    Так как эта библиотека основана на Adafruit-GFX русификация для неё аналогична
    http://arduino.ru/forum/programmiro...-bukv-na-displei-v-kodi?page=4#comment-285997
    Результат: меню.jpg
     

    Вложения:

    Последнее редактирование: 1 ноя 2017
  13. Ой, спасибище большое!!! Приду с работы, обязательно попробую!!!
    P.S. У меня уже теперь комплекс по поводу трёх восклицательных знаков!:D:eek::)
     
  14. vector99

    vector99 Гик

    Только есть один ньюанс:
    Код (C++):
    tft.setTextFont(1);
    мой дисплей корректно отображает только: tft.setTextFont(1); именно с индексом 1, или вообще его не объявлять. А размером шрифта управлять через: tft.setTextSize(3); меняя индекс, меняем размер шрифта. почитай ветку про ик паяльную станцию на ардуино, там поскакивал вопрос о зеркальном отображении и его победили в стандартной библиотеке UTFT
     
  15. Обязательно вечером посмотрю. так как я вчера пробовал с русификацией - не получилось. И в скетч всё добавлял - экран просто не отображает шрифт.
     
    Последнее редактирование: 3 ноя 2017
  16. Нашел вариант восстановления загрузчика в плате.
    Вот ссылка:
    http://wiki.amperka.ru/установка-и-настройка-arduino-ide:arduino-restore-bootloader-with-arduino
    Ардуино Мега восстановилась и снова полнофункционально работает.
    Спасибо ребятам за информацию!
     
    arkadyf нравится это.