[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
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. Пробую преобразовывать  - часть кода теряется...
biggrin
Что есть ASCII ? разве это не 0110101101 ?
Принимайте не в строковую переменную а байтовую. ну или другую какую.

 
Код
Sel = Ischarwaiting()
                         If Sel = 1 Then
                            Sel = Waitkey()
                            Print Sel
                          end if

Обзовите sel байтом, включите терминал и клацайте по клавиатуре smile


 
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и знаков для передачи , можно и прямо отправить:

Код
print "140015:23: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 - без задержек на реакцию нажатия cool 
Далее остается только расшифровать код и использовать по назначению, расчленив код на составляющие и  при необходимости оцифровав:

Код
'-------------------------- обработчик комманд от 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

Так что не отчаивайтесь, все можно запустить и задействовать
Успехов!
Прикрепления: 6527731.jpg (517.7 Kb) · 3377053.jpg (252.9 Kb)


 
  • Страница 1 из 1
  • 1
Поиск: