Проблемы с выводом значений на lcd320*480

Тема в разделе "Arduino & Shields", создана пользователем D_REC, 7 янв 2022.

  1. D_REC

    D_REC Нерд

    При выводе переменной на дисплей, значение не переписывается, а как бы накладывается сверху. И получается каша. Если стирать весь экран полностью, то это занимает секунды две. Как быть в таком случае?

    Дисплей lcd shield 3.5 320*480
    Driver ili9488.
    Использую библиотеку UTFTGLUE.h
    Вывожу с помощью myGLCD.print()
     
  2. a1000

    a1000 Гуру

    Это графический дисплей, так оно и работает. Я когда-то делал так - поверх старого значения рисовал прямоугольник с цветом фона, а потом выводил новое значение. Это гораздо быстрее, чем оцищать весь экран.
     
    Ariadna-on-Line нравится это.
  3. D_REC

    D_REC Нерд

    Вроде нашел выход с положения. Применил printNuml. В ней можно задавать количество выводимых цифр, а недостающие заменять символами, например пробелом.
    Это проще чем рисовать прямоугольники. И без них программа на несколько страниц растянулась.
     
  4. parovoZZ

    parovoZZ Гуру

    Очищается та область экрана, которую необходимо переписать. Как правило, в дисплеях есть команда, которая делает это очень быстро.
     
  5. D_REC

    D_REC Нерд

    Это тоже самое, что нарисовать закрашенный прямоугольник?

    Дело в том, что для этого нужно помнить какой цвет фона. Все параметры надписи. То есть куча головника, и нагрузка на процессор. Да и к тому же страница кода.
     
  6. DetSimen

    DetSimen Гуру

    1 переменная + 1 строчка кода. (ну, это если биб-ка нормальная). Если лень разбираться, можно сначала предыдущую надпись вывести цветом фона, стирая ее, а потом новую, нормальным цветом.
     
    SergeiL нравится это.
  7. D_REC

    D_REC Нерд

    У меня много переменных выводятся. При этом они меняются от срабатывания датчиков. Пока что попробую пользоваться так, как описал выше. Вроде работает.

    Но возникла новая проблема, не выводится кириллица.
     
  8. User248

    User248 Гик

    Не может быть, чтобы так долго. Что-то у вас не впорядке.
     
  9. parovoZZ

    parovoZZ Гуру

    Ну да. Для этого создаётся экранный буфер.
     
  10. D_REC

    D_REC Нерд

    Возможно. Поскольку пробую вывести 20 окружностей и это занимает секунды три четыре. Хотя никаких задержек нет. Должны выводится мгновенно.

    В чем может быть причина?
     
  11. b707

    b707 Гуру

    кривой код, очевидно
     
  12. D_REC

    D_REC Нерд

    #include <UTFTGLUE.h>
    UTFTGLUE myGLCD(0,A2,A1,A3,A4,A0);

    void setup() {
    myGLCD.InitLCD();
    myGLCD.clrScr();
    }

    void loop() {

    }

    Подскажите если знаете, где здесь ошибка которая приводит к медленной работе дисплея.
     
  13. b707

    b707 Гуру

    а где тут вообще какой-то код? Например вывод 40 окружностей, как вы писали выше?
     
  14. D_REC

    D_REC Нерд

    Специально удалил все лишнее, что бы не было повода указывать что именно я накосячил в коде. Оставил только стандартное стирание экрана. О котором я выше говорил, что длится не менее 2х секунд. Дайте ответ хоть на этот вопрос.
     
  15. User248

    User248 Гик

    Вообще, рисование окружностей может тормозить. Там же синусы/косинусы считает. Если расположение окружностей не меняется, лучше сделать из этого картинку и загружать её по быстрому.
    И если процедура стирания длится две секунды, это тоже много. Какой-то баг библиотеки для дисплея, может быть.
     
    Последнее редактирование: 9 янв 2022
  16. parovoZZ

    parovoZZ Гуру

    Нет там никаких синусов и косинусов. Правильно написанные процедуры расчета исполняются МК довольно быстро.
     
  17. parovoZZ

    parovoZZ Гуру

    Вот здесь:
     
  18. D_REC

    D_REC Нерд

    А как должно быть?
     
  19. b707

    b707 Гуру

    контроллер ардуино какой?
     
  20. D_REC

    D_REC Нерд

    Mega2560