LCD Дисплей Nextion и Bascom
|
|
vlad-sf | Дата: Вторник, 13.10.2015, 19:35 | Сообщение # 1 |
Группа: Пользователи
Сообщений: 4
Статус: Offline
| Добрый день. Прикупил вот такой дисплей: http://ru.aliexpress.com/item....2.html. Общается с контроллером по UART. Программирование на Bascom осваиваю потихоньку, но здесь попал в ступор. Дисплей выдает данные в UART при нажатии на кнопки на нем и заканчивает отсылку такой последовательностью: 0XFF 0XFF 0XFF (пример, код нажатия клавиши на сенсорном экране: 0X65 0X00 0X02 0X01 0XFF 0XFF 0XFF). А Bascom "ждет" в завершении команды код возврата каретки и поэтому программа дальше не выполняется. Как "заставить" Bascom понять нужную последовательность (0XFF 0XFF 0XFF) без ожидания "Enter" ?
|
|
| |
vlad-sf | Дата: Среда, 14.10.2015, 20:46 | Сообщение # 2 |
Группа: Пользователи
Сообщений: 4
Статус: Offline
| Да, действительно, использовал INPUT. Попробовал Inkey() и Waitkey() - работает! Читает сразу и не ждет ВК. За подсказку спасибо! Вот только эти операторы читают в ASCII. А передача от ЖК дисплея в HEX. Пробую преобразовывать - часть кода теряется...
Сообщение отредактировал vlad-sf - Среда, 14.10.2015, 21:53 |
|
| |
kip96 | Дата: Четверг, 15.10.2015, 11:23 | Сообщение # 3 |
Группа: Свой человек
Сообщений: 170
Статус: Offline
| Цитата vlad-sf ( ) Вот только эти операторы читают в ASCII. А передача от ЖК дисплея в HEX. Пробую преобразовывать - часть кода теряется... Что есть ASCII ? разве это не 0110101101 ? Принимайте не в строковую переменную а байтовую. ну или другую какую.
Код Sel = Ischarwaiting() If Sel = 1 Then Sel = Waitkey() Print Sel end if Обзовите sel байтом, включите терминал и клацайте по клавиатуре
|
|
| |
vlad-sf | Дата: Четверг, 15.10.2015, 21:27 | Сообщение # 4 |
Группа: Пользователи
Сообщений: 4
Статус: Offline
| А до этого я уже дошел. Спасибо кстати за ответ. Вот где не понятно: TFT дисплей (а точнее его редактор, в котором есть симулятор) отсылает такую команду (копирую с окна симулятора) : 0x65 0x00 0x04 0x01 0xff 0xff 0xff А получаю вот : 65 00 ff (к контроллеру подключен 4-х строчный дисплей, на нем и вижу это) Причем стабильно. Где же все остальное? Может конечно симулятор косячит...
|
|
| |
vlad-sf | Дата: Вторник, 20.10.2015, 21:01 | Сообщение # 5 |
Группа: Пользователи
Сообщений: 4
Статус: Offline
| Разобрался. Надо было данные в буфер кидать. Config Serialin = Buffered
Спасибо за первоначальные подсказки.
|
|
| |
Sanich2908 | Дата: Среда, 25.11.2015, 18:58 | Сообщение # 6 |
Группа: Пользователи
Сообщений: 1
Статус: Offline
| Прветствую. Тоже приобрёл дисплейчик Nextin, пытаюсь разобраться с ним, не силён в Bascome. Как у вас успехи? И хотелось бы поглазеть в качестве примера на вашу програмку,, как обмен данными организован.
|
|
| |
qewin | Дата: Воскресенье, 15.04.2018, 21:17 | Сообщение # 7 |
Группа: Пользователи
Сообщений: 51
Статус: Offline
| Все привет! Интересная тема, аппарат лежит давно но пока ничего непонятно как с ним работать. Есть ли у кого кусочек кода как отправить и принять переменную ну или буковку :-))).
|
|
| |
Magicanin | Дата: Суббота, 21.12.2019, 12:19 | Сообщение # 8 |
Группа: Пользователи
Сообщений: 3
Статус: Offline
| Привет интересующимся! На самом деле дисплей прост в использовании, но и камней в начале освоения на пути много встречается. Боролся с ним и победил для своего проекта акваконтроллера в силу того, что было жаль потраченных денег на его приобретение, изначально ради интереса))) теперь души в нем не чаю) Так вот, мой вариант таков: Чтобы отправить данные от дисплея в контроллер использую оператор "print", чтобы не заморачиваться с получением кода конца передачи, что отправил- то и получил: Код buf.txt="140000000000" print buf.txt ... или ... if(v.val==8) { buf.txt="338100000"+t1.txt } print buf.txt
Тут я использовал текстовую переменную для составления кода из последовательности 12и знаков для передачи , можно и прямо отправить: Почему именно 12и знаков? Для моего проекта этого было достаточно, чтобы в них зашифровать любую передаваемую на контроллер информацию. Кому как угодно, при приеме и расшифровке учитывайте свою последовательность:
Код On Urxc Getchar Enable Interrupts Enable Urxc .......
'------------------------- обработчик UART Nextion hmi ------------------------- Getchar: Disable Urxc Nextin = "" A = 0 Do Varbyte = Inkey() 'берем символ из буфера в формате ASCII Waitus 80 '80 - 57600 16 000 000 MHz Select Case Varbyte Case 0 : Incr A : If A > 5 Then Exit Do 'если дальше буфер пуст за 5 проверок - выходим из цикла Case Else : If Varbyte >= 47 And Varbyte <= 58 Then 'берем только цифры и символы согласно таблицы ASCI A = 0 Nextin = Nextin + Chr(varbyte) 'составляем строку End If End Select Loop If Len(nextin) = 12 Then Gosub Nextion 'если получили не больше не меньше того что отправили переходим к расшифровке Enable Urxc Return
Данный метод приема для меня оказался прост, помехоусточив и исключал большинство ошибок и потерь передачи Заметьте, работаем по прерыванию UART - без задержек на реакцию нажатия Далее остается только расшифровать код и использовать по назначению, расчленив код на составляющие и при необходимости оцифровав: Код '-------------------------- обработчик комманд от Nextion ----------------------- Nextion: Nextpagein = Left(nextin , 1) '1-ый символ посылки - номер отправной страницы Nextpageout = Mid(nextin , 2 , 1) '2-ый символ посылки - номер получаемой страницы Nextpage = Val(nextpageout) Nextcom = Mid(nextin , 3 , 1) Nextcomin = Val(nextcom) '3-ий символ посылки - номер комманды Nextarg = Mid(nextin , 4 , 9) '4-ый и последующие символы посылки - получаемые параметры
...
Del_buffer 'очищаем буфер приема после всех манипуляций от мусора и помех Return
Очистка приемного буфера: Код '-------------------------очистка входящего буфера UART ----------------------------- Sub Del_buffer() Do Waitms 1 Varbyte = Inkey() 'кладем в переменную "В" данные из буфера Loop Until Varbyte = 0 'выходим из цикла когда в переменную попадет 0 (буфер пуст) Nextin = "" End Sub
Чтобы отправить данные от контроллера в дисплей используем следующие методы, просто вот так: Код Print "rest" ; : Printbin 255 ; 255 ; 255 ' сброс дисплея Print "z1.val=" ; Timer2 ; : Printbin 255 ; 255 ; 255 'стрелочный прибор Print "p0.pic=" ; Varbyte ; : Printbin 255 ; 255 ; 255 'смена картинки Print "time.txt=" ; : Printbin 34 ; : Print Time$ ; : Printbin 34 ; 255 ; 255 ; 255 'время в текстовую переменную Print "q0.picc=" ; 11 ; : Printbin 255 ; 255 ; 255 'картинка Print "h" ; Str(a) ; ".pco=" ; Rgb_next ; : Printbin 255 ; 255 ; 255 'цвет выбираемого слайдера Print "h" ; Str(a) ; ".val=" ; Rgb_next ; : Printbin 255 ; 255 ; 255 'уровень выбираемого слайдера Print "dim=" ; Dim_ ; : Printbin 255 ; 255 ; 255 'яркость подсветки дисплея Print "b" ; Str(varbyte) ; ".txt=" ; : Printbin 34 ; : Print Format(txt , "00") ; ":" ; Format(txt1 , "00") ; : Printbin 34 ; 255 ; 255 ; 255 'можно даже так извратиться, баском все пережует
Главный принцип- любую передачу заканчиваем "Printbin 255 ; 255 ; 255 " Цифровые данные отправляем без кавычек: Print "z1.val=" ; цифровая переменная; : Printbin 255 ; 255 ; 255 Текстовые данные отправляем в кавычках: Print "time.txt=" ; : Printbin 34 ; : "текст" ; : Printbin 34 ; 255 ; 255 ; 255
Так что не отчаивайтесь, все можно запустить и задействовать Успехов!
|
|
| |