| 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 GetcharEnable 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
 
 Так что не отчаивайтесь, все можно запустить и задействовать
 Успехов!
 
 
 |  
 |  |  |  |