Работа с дисплеем Nextion

Boroda22

★✩✩✩✩✩✩
23 Фев 2022
261
41
Ребята, приветствую! Подскажите пожалуйста с таким вопросом. Заказал себе дисплей Nextion NX3224F028 для одного проекта. Пока посылка в пути, решил набросать тестовый интерфейс. Добавил пару кнопок и пару экранов. В обработчике кнопки я прописал отображение другого экрана. И вот прикол, в debug-е почему то экран "блокируется" после нажатия на кнопку (т.е. другие элементы не жмакаются). Это спцефика отладчика, или что-то нужно еще сделать ?
 

Zuker

★✩✩✩✩✩✩
10 Янв 2024
75
17
Вставляйте сюда весь код Nextion Editor, чтобы было более понятно. У меня при переходе по экранам все нормально.
 

Boroda22

★✩✩✩✩✩✩
23 Фев 2022
261
41
@Zuker, вот в обработчике кнопки при нажатии такой код
page Outside
 

Zuker

★✩✩✩✩✩✩
10 Янв 2024
75
17
Когда создавали проект, правильную версию экрана подобрали? У меня в дебаге все выглядит вот так, и при переходе по экранам проблем нет (версия 1.65.1):
 

Вложения

Boroda22

★✩✩✩✩✩✩
23 Фев 2022
261
41
@Zuker, так я все-равно же в дебаге пока, как там версия может влиять ?

1753367921200.png
 

Boroda22

★✩✩✩✩✩✩
23 Фев 2022
261
41
Вот мой пример. Т.е. я хочу сделать навигацию по страницам
 

Вложения

Zuker

★✩✩✩✩✩✩
10 Янв 2024
75
17
Вот мой пример. Т.е. я хочу сделать навигацию по страницам
Потыкал. Получается, ошибки у вас нет. Если на странице "Home" выставить атрибут sta: solid color (по-умолчанию: no background) и перейти туда по нажатию кнопки "Дом", то станет очевидно, что вы переходите на новую, чистую страницу, где есть свои кнопки и их нельзя тыкать из других страниц. Сейчас у вас при переходе на новую страницу остается фон старой страницы, просто картинка. Обыграйте это. Сделайте похожую кнопку на новой странице в том же месте, с переходом на страницу "Start".
 

Boroda22

★✩✩✩✩✩✩
23 Фев 2022
261
41
@Zuker,а для чего тогда у кнопок глобальная видимость ?
 

Boroda22

★✩✩✩✩✩✩
23 Фев 2022
261
41
Ну ок, понял, придется 100500 кнопок городить ((((
 

Zuker

★✩✩✩✩✩✩
10 Янв 2024
75
17
Более того. У дисплея ограничение в памяти. Чем дороже\лучше дисплей (модель), тем больше памяти. Изучайте цифры при компиляции. Очень легко упереться в потолок размера проекта, когда еще до конца не понял, устраивает ли текущий интерфейс\проект.
 

Boroda22

★✩✩✩✩✩✩
23 Фев 2022
261
41
Возник еще один вопрос по работе с дисплеем. Отправляю в дисплей данные на кириллице, а на экране какая-то фигня получается ((((. Если отправляю латиницу, то всё корректно отображается. Причем, если я отправляю в порт монитора, кириллица нормально отображается.
 

bort707

★★★★★★✩
21 Сен 2020
3,250
948
Большинство графических библиотек ардуино не имеют поддержки кириллицы, не обрабатывают двух байтную кодировку и не содержат кириллических фонтов.
Это скорее норма, что кириллица не показывается. Каждую библиотеку приходится настраивать отдельно.
 

Boroda22

★✩✩✩✩✩✩
23 Фев 2022
261
41
@bort707, Причем тут графические библиотеки ?? я шлю данные по UART в дисплей, а он не корректно обрабатывает входящие данные. Походу я не один такой, вот тут как раз схожую проблему жевали https://vk.com/wall-76241493_55894
 

bort707

★★★★★★✩
21 Сен 2020
3,250
948
я шлю данные по UART в дисплей, а он не корректно обрабатывает входящие данные.
Судя по вашему ответу, вы не в курсе, что способов представления кириллицы не один и не два. И в каком именно виде ваш дисплей понимает кириллицу (если вообще понимает) - нужно еще выяснить.
вы уверены, что шлете данные в правильной кодировке?
 

Boroda22

★✩✩✩✩✩✩
23 Фев 2022
261
41
вы уверены, что шлете данные в правильной кодировке?
А хз в какой там кодировке. В монитор порта корректно выводится. Данные получаю с помощью GSON, и отправляю на дисплей

В отладчике Nextion шлю такую же команду, и нормально кириллицей выводится
 

Zuker

★✩✩✩✩✩✩
10 Янв 2024
75
17
Применение из кода Arduino: nextion_serialRusConvert(F("Понедельник"));
C++:
//конвертация русских символов (код взят на просторах)
String nextion_serialRusConvert(String text) {

  String out;
  const char* in = text.c_str();
  if (in == NULL)
    return out;

  uint32_t codepoint = 0;
  while (*in != 0)
  {
    uint8_t ch = (uint8_t) (*in);
    if (ch <= 0x7f)
      codepoint = ch;
    else if (ch <= 0xbf)
      codepoint = (codepoint << 6) | (ch & 0x3f);
    else if (ch <= 0xdf)
      codepoint = ch & 0x1f;
    else if (ch <= 0xef)
      codepoint = ch & 0x0f;
    else
      codepoint = ch & 0x07;
    ++in;
    if (((*in & 0xc0) != 0x80) && (codepoint <= 0x10ffff))
    {
      if (codepoint <= 255)
      {
        out += (char) codepoint;
      }
      else
      {
        if (codepoint > 0x400)
          out += (char) (codepoint - 0x360);
      }
    }
  }
  return out;
}
 
  • Лойс +1
Реакции: Boroda22