Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Исходники » LCD дисплеи Nextion ?


LCD дисплеи Nextion ?

Сообщений 1 страница 30 из 58

1

Приветствую всех.
Приобрел дисплейчик тут http://devicter.ru/catalog/elementy-tft , заинтересовали простым управлением по UART, и простым редактором графинтерфейса.
Разбираюсь потихоньку.
Может есть у кого нибудь уже наработки ?

0

2

Телепатов здесь нет.

0

3

Ну раз телепатов здесь нет, то сам поковырялся на досуге.
Вот выкладываю исходник в Bascome, шрифты и проект Nextion , у меня в железе работает.
Может кому нибудь поможет разобраться.
Использовал для работы с датчиками исходники sasha_1973, с этого сайта, за что ему огромное спасибо.
Используемое железо:
Arduino Uno R3, часы DS3231, два датчика температуры DS18b20, датчик давления BMP180, датчик влажности DHT22, ну и LCD дисплей Nextion 320*240.
В планах датчики подключить через nrf24L01+.
Дисплей понравился, работать с ним легко и быстро, графический интерфейс в редакторе можно накрутить очень красивый, я по быстрому накидал простой пока.
Вот ссылки на Wiki
http://wiki.iteadstudio.com/Nextion_Edi … Guide#Text
http://wiki.iteadstudio.com/Nextion_HMI … uction_Set
http://wiki.iteadstudio.com/Nextion_Ins … #print_att

Ну и ссылка на мой проект
https://drive.google.com/open?id=0B7j7d … FhQOWZKaTg

Всем успехов.

+3

4

А какие фоты нужны?
В ссылке на мой проект есть все исходники.
1. Запускаем Nextion Editor,
2. Подключаем сам LCD через переходник USB-COM к компу,
3. В Nextion Editor открываем файл "LCD-Nextion-Meteo2.HMI", затем кнопка Compile, затем Upload, выбираем COM порт к которому подключился LCD, скорость ставим 115200,  затем кнопка GO, должна начаться запись в дисплей, на самом LCD видно бегут проценты и т.д.
4. После прошивки на LCD сразу запускается наш интерфейс. Можно в Nextion Editor запустить Debug в меню "Send command to:" выбираем "Simulator and Nextion device" ,  жмём "Connect" и тыкая в симуляторе мышкой по нашим кнопкам и тыкая  пальцем по нашим кнопкам на LCD, смотрим что в симуляторе и с LCD Nextion передаются команды. Страницы нашего интерфейса переключаем печатая команды "Page 0", "Page 1" и т.д. в симуляторе.
5.Прошиваем Arduino, подключаем LCD к интерфейсу USART Ардуины и всё. Выводим данные на LCD командой Print.

0

5

Он даже видео крутить не умеет, какая там 3Д анимация. :D

Кстати, а никто не встречал дисплеи подобного плана, но с аналоговым входом, чтобы можно было в свою GUI вставлять видео поток? Пытался на эту тему смотреть в инете, можно максимум прикрутить что-то типа OSD, но оно с грубой графикой и B/W. :(

0

6

Всем привет! А примерчика случаем нет ни у кого? как температуру перегнать на Nextion, что то неполучается у меня принять на экран.

0

7

qewin написал(а):

Всем привет! А примерчика случаем нет ни у кого? как температуру перегнать на Nextion, что то неполучается у меня принять на экран.

Для начала в нужном месте требуется сформировать "приемник" для данных...
Выполняется посылка по UART:
Print "page2.j2.val=";temp11;fin
Где:
- page2        - нужная страница в наборе
- j2.val         - числовое значение объекта (графическое отображение термометра)
- temp11      - передаваемое значение из программы МК
- fin             - строковая константа, содержащая 3 символа Chr(255)

Nextion прост, как кипяченая вода... ;)

0

8

Да вот для тестов все есть и графический интерфейс и температура и часы а вот с UARTом не когда дело неимел  :no:

http://s8.uploads.ru/t/7QvMq.jpg

0

9

qewin написал(а):

Да вот для тестов все есть и графический интерфейс и температура и часы а вот с UARTом не когда дело неимел

Так у Nextion это единственный путь для работы с внешним миром... ;)
Не думаю, что открою вам глаза: https://www.itead.cc/wiki/Nextion_Instruction_Set

0

10

Я там был, может и туплю но мне бы сам код ну допустим с атмеги 8 по этому УАРту.

Вот так будет не правильно   Print "page0.tem.txt=";23;Chr(255);Chr(255);Chr(255) ?  tem - это пока типа текстовая на температуру, ставлю число, но, всеровно на экране нигугу.

http://s4.uploads.ru/t/IQqkd.jpg

Отредактировано qewin (2018-04-16 23:36:34)

0

11

qewin написал(а):

Вот так будет не правильно   Print "page0.tem.txt=";23;Chr(255);Chr(255);Chr(255) ?
tem - это пока типа текстовая на температуру, ставлю число, но, всеровно на экране нигугу.

Для начала сверить скорость UART.
Nextion по умолчанию работает на 9600.

tem.txt и tem - это свойство объекта и переменная, указывающая его значение соответственно.
Могут иметь одинаковые написания.
tem (переменная) для отправки в данном случае должна быть строковой, т.е. "23".
Числовые значения надо отправлять в HEX виде.
Соответственно и готовить ее нужно соответственно, преобразовывать в текст (или в HEX) перед отправкой.

Строку для отправки тоже лучше сформировать заранее.
Отправлять уже готовое, а не гирлянду, как выше...
stroka = "page0.tem.txt=" & tem & Chr(255) & Chr(255) & Chr(255)
Print stroka
Объяснения не искал, но глюков меньше.

Отредактировано Nord (2018-04-17 10:21:03)

0

12

Nord спасибо что откликнулся. Я восновном живу примерами, пример изучил - еду дальше а пока не пойму в терминал все уходит как просит Nextion  а результата нет. Ладно спасибо еще раз , буду искать!

0

13

qewin написал(а):

а пока не пойму в терминал все уходит как просит Nextion  а результата нет.

А терминал отправки из дисплея видит, обратная связь есть ?
Можно к какому-нибудь объекту в событии Touch Press Event вписать строчку
printh 41 42 43 44
В терминал должны прилететь ABCD

Отредактировано Nord (2018-04-17 18:49:21)

0

14

Теперь я спокоен что есть свять, так вот работает     printbin &H74;&H65;&H6D;&H2E;&H74;&H78;&H74;&H3D;&H22;&H33;&H31;&H22;&Hff;&Hff;&Hff    ( через заднее место но сработало) ! Теперь  Nord буду складывать  прогу по короче  :mybb:

Отредактировано qewin (2018-04-17 19:08:24)

0

15

Что-то сайт сегодня лежит пол дня, с Телеграм не связано?

Нашел в сети единственный пример где немного расписывается . Будем изучать.

We use macro, because we find a lot of common small parts as the 0xFF, oxFF, oxFF in Bascom &HFF, &HFF, &HFF because the instruction is end with three bytes "0xff 0xff 0xff"
Nextion dialogue uses a mix of number sent with printbin and string sent with print
all of following are in sub_macro_nextion.inc

Macro
'---------------macro---------------------------------------------------
Macro Nexend       'to end a tx sequence--------------------------
        Printbin &HFF ; &HFF ; &HFF
End Macro
‘-------------------------------------------------------------------------
Macro Nexq       ' to send quote before or after a string sentence---------
     Printbin &H22
End Macro

we add also a macro “Ret_init “ which reset the serial buffer and the array of byte received from the Nextion display.
where Printbin is use to send data in binary format, here we use hexadecimal value
to send more than one value we use “;” between each.

Вот из этого нужно взять что надо.

Код:
' inc file for nextion*******************************************************
'JP Duval 19-05-2017
' usable with Basic Bascom without any warranty
'****************************************************************************
$nocompile

'---------------macro--------------------------------------------------------

Macro Nexend       'to end a tx sequence--------------------------
     Printbin &HFF ; &HFF ; &HFF
End Macro

Macro Nexq       ' to send quote before or after a sentence---------
     Printbin &H22
End Macro

Macro Comma       'to send a , after a numeric value-----     '
     Printbin &H2C
End Macro

Macro Nex_init       'to init the nextion display
     Print "rest";
     Nexend
End Macro

Macro Ret_init 'to init the return from nextion
     For Jbyte = 1 To 12
          Tabreturn(jbyte) = 0
     Next
     Clear Serialin       'clear the buffer
     Cls
End Macro


'*******************************************************************************
' get a value from a tool sending a simple value in 1 byte
'*******************************************************************************
Function Nex_onevalue(byval Text_id As String) As Byte
     Local Area As String * 10
     Area = "get " + Text_id + ".val"       'Request The Actual Value
        '  Locate 3 , 10 : Lcd Area
     Print Area;
     Nexend       'macro which send &hFF,&hFF,&hFF
     Call Nex_return()
     Call Follow()
     Nex_onevalue = Tabreturn(2)
End Function

'*******************************************************************************
' use an  on/off button : Letter_id,  bt_color, font_color, modif
'*******************************************************************************

Sub Nex_onoff(byval Letter_id As String , Byval Bt As Byte ) As Byte
     Local Area As String * 10

     If Bt = 1 Then

          Area = Letter_id + ".txt="       ' send the text
          Print Area;
          Nexq       'to send quote
          Print "OFF";
          nexq
          Nexend       'to send "end char ff ff ff"
          'Locate 2 , 20 : Lcd "bt off:" ; Bt : Wait 2
     Elseif Bt = 0 Then
          Area = Letter_id + ".txt="       ' send the text
          Print Area;
          Nexq 'to send quote
          Print "ON";
          Nexq
          Nexend       'to send "end char ff ff ff"
         ' Locate 2 , 20 : Lcd "bt on: " ; Bt : Wait 2
     End If

End Sub

 '*******************************************************************************
' config slider  Letter_id,Cursor Width, Cursor Height, maxval, minval  cursor_color, back_color
'*******************************************************************************
Sub Nex_configslider(byval Letter_id As String , Byval Cursor_wid As Byte , Byval Cursor_hig As Byte , Byval Maxval As Byte , Byval Minval As Byte , Byval Pt_color As Word , Byval Back_color As Word) As Byte
     Local Area As String * 10       ' 0 , 2 , 30 , 100 , 0 , Red , Gold

     Area = Letter_id + ".bco="       'change the Back color
     Print Area ; ; Back_color;
     Nexend

     Area = Letter_id + ".pco="       'change the cursor color
     Print Area ; Pt_color;
     Nexend

     Area = Letter_id + ".wid="       'change the cursor thicness
     Print Area ; Cursor_wid;
     Nexend

     Area = Letter_id + ".hig="       'change the cursor size
     Print Area ; Cursor_hig;
     Nexend

     Area = Letter_id + ".maxval="       'change the maximum value
     Print Area ; Maxval;
     Nexend

     Area = Letter_id + ".minval="       'change the minnimum value
     Print Area ; minval;
     Nexend

End Sub



 '*******************************************************************************
' use a gauge    val_id, number, width of neddle(1-5) ,needle color, back color
' val must be 0 to 360 in degre
' if you use an image you must
'*******************************************************************************
Sub Nex_gauge(byval Text_id As String , Byval Degre As Word , Byval Wid As Byte , Byval Pt_color As Word , Byval Back_color As Word )
     Local Area As String * 10

     Area = Text_id + ".bco="
     Print Area ; ; Back_color;       'change the Back color
     Nexend

     Area = Text_id + ".pco="       'change the neddle color
     Print Area ; Pt_color;
     Nexend

     Area = Text_id + ".wid="       'change the neddle thicness
     Print Area ; Wid;
     Nexend

     Area = Text_id + ".val="       ' send the text
     Print Area;
     Print Degre;
     Nexend    'to send "end char ff ff ff"
End Sub

 '*******************************************************************************
' use a progress bar    val_id, number, val color, back color
' val must be 0 to 100
'*******************************************************************************
Sub Nex_bar(byval Text_id As String , Byval Bar As Byte , Byval Txt_color As Word , Byval Back_color As Word )

     Local Area As String * 10

     Area = Text_id + ".bco="       'change the Back color
     Print Area ; ; Back_color;
     Nexend

     Area = Text_id + ".pco="       'change the val color
     Print Area ; Txt_color;
     Nexend
     :
     Area = Text_id + ".val="       ' send the text
     Print Area;
     Print Bar;
     Nexend    'to send "end char ff ff ff"
End Sub
 '*******************************************************************************
' write number in a number area    val_id, number, val color, back color, font
' val for nextion can be only  whole number, you must use the Basic Bascom format or using instruction
'*******************************************************************************
Sub Nex_val(byval Text_id As String , Byval Number As Long , Byval Txt_color As Word , Byval Back_color As Word , Byval Font As Byte)
     Local Area As String * 10

     Area = Text_id + ".bco="
     Print Area ; ; Back_color;       'change the Back color
     Nexend

     Area = Text_id + ".pco="       'change the val color
     Print Area ; Txt_color;
     Nexend

     Area = Text_id + ".font="       'change the font
     Print Area ; Font;
     Nexend

     Area = Text_id + ".val="       ' send the text
     Print Area;
     Print Number;
     Nexend    'to send "end char ff ff ff"

End Sub

'*******************************************************************************
' change button attributes    val_id, text, text color, back color, font
'*******************************************************************************
Sub Nex_button(byval Text_id As String , Byval Sentence As String , Byval Txt_color As Word , Byval Back_color As Word , Byval Font As Byte)
     Local Area As String * 10

     Area = Text_id + ".bco="       'change the Back color
     Print Area ; ; Back_color;
     Nexend

     Area = Text_id + ".pco="       'change the text color
     Print Area ; Txt_color;
     Nexend

     Area = Text_id + ".font="       'change the font
     Print Area ; Font;
     Nexend

     Area = Text_id + ".txt="       ' send the text
     Print Area;
     Nexq 'to send quote
     Print Sentence;
     nexq
     Nexend    'to send "end char ff ff ff"
End Sub

'*******************************************************************************
' write text in a text area    val_id, text, text color, back color, font
'*******************************************************************************
Sub Nex_text(byval Text_id As String , Byval Sentence As String , Byval Txt_color As Word , Byval Back_color As Word , Byval Font As Byte)
     Local Area As String * 10


     Area = Text_id + ".bco="       'change the Back color
     Print Area ; Back_color;
     Nexend

     Area = Text_id + ".pco="       'change the text color
     Print Area ; Txt_color;
     Nexend


     Area = Text_id + ".font="       'change the font
     Print Area ; Font;
     Nexend

     Area = Text_id + ".txt="       ' send the text
     Print Area;
     Nexq 'to send quote
     Print Sentence;
     Nexq
     Nexend       'to send "end char ff ff ff"
End Sub

'*******************************************************************************
' write a scrolling text in a text area    text_id, text, text color, back color, font
'*******************************************************************************
Sub Nex_scrollingtext(byval Text_id As String , Byval Sentence As String , Byval Txt_color As Word , Byval Back_color As Word , Byval Font As Byte)
     Local Area As String * 10

     Area = Text_id + ".bco="
     Print Area ; ; Back_color;       'change the Back color
     Nexend

     Area = Text_id + ".pco="       'change the text color
     Print Area ; Txt_color;
     Nexend

     Area = Text_id + ".font="       'change the font
     Print Area ; Font;
     Nexend

     'Area = "ref " + Text_id       'refresh the attribute of the text area not needed with the last version of nextion
     'Print Area;
     'Nexend

     Area = Text_id + ".txt="       ' send the text
     Print Area;
     Nexq 'to send quote
     Print Sentence;
     nexq
     Nexend    'to send "end char ff ff ff"
End Sub
'*******************************************************************************
' draw Line   Xstart - Ystart Xend -Yend - Color
'*******************************************************************************
Sub Nex_line(byval X1 As Word , Byval Y1 As Word , Byval X2 As Word , Byval Y2 As Word , Byval Color As Word)
     Print "line ";
     Print X1;
     Comma
     Print Y1;
     comma
     Print X2;
     comma
     Print Y2;
     Comma
     Print Color;
     Nexend
End Sub
'*******************************************************************************
 ' draw a  dot, a dot is a line with Xend=xstart, Yend=Ystart +color
'*******************************************************************************

Sub Nex_dot(byval X1 As Word , Byval Y1 As Word , Byval Color As Word)

     Print "line ";
     Print X1;
     comma
     Print Y1;
     comma
     Print X1;
     comma
     Print Y1;
     comma
     Print Color;
     nexend
End Sub

'*******************************************************************************
' draw Circle  X - Y Center - Radius - Color
'*******************************************************************************

Sub Nex_circle(byval X1 As Word , Byval Y1 As Word , Byval Radius As Word , Byval Color As Word)

     Print "cir ";
     Print X1;
     Comma
     Print Y1;
     Comma
     Print Radius;
     Comma
     Print Color;
     nexend
End Sub

'******************************************************************************
' draw a fill circle   X - Y Center - Radius - Color
'******************************************************************************

Sub Nex_circlesolid(byval X1 As Word , Byval Y1 As Word , Byval Radius As Word , Byval Color As Word)
     Print "cirs ";
     Print X1;
     Comma
     Print Y1;
     Comma
     Print Radius;
     Comma
     Print Color;
     nexend
End Sub

'******************************************************************************
' draw a box  Xstart - Ystart Xend -Yend  - Color
'******************************************************************************
Sub Nex_box(byval X1 As Word , Byval Y1 As Word , Byval X2 As Word , Byval Y2 As Word , Byval Color As Word)

     Print "draw ";
     Print X1;
     comma
     Print Y1;
     comma
     Print X2;
     comma
     Print Y2;
     comma
     Print Color;
     Nexend
End Sub

'******************************************************************************
' draw a fill box  Xstart - Ystart- Width- height - Color
'******************************************************************************
Sub Nex_boxsolid(byval X1 As Word , Byval Y1 As Word , Byval X2 As Word , Byval Y2 As Word , Byval Color As Word)

     Print "fill ";
     Print X1;
     comma
     Print Y1;
     comma
     Print X2;
     comma
     Print Y2;
     comma
     Print Color;
     Nexend
End Sub
'----------------------------------------------------------------------------------------------------------------------
'---------------------------------sub and function to adjust the screen or the components------------------------------
  '******************************************************************************
' change the page
'******************************************************************************
Sub Nex_page(byval Xbyte As Byte)
     Print "page ";
     Print Xbyte;
     Nexend
End Sub
'******************************************************************************
' clear a screen with a color
'******************************************************************************
Sub Nex_cls(byval Color As Word)
     Print "cls ";
     Print Color;
     Nexend
End Sub
 '******************************************************************************
' change the backlight of the screen    0= none 100= full
'******************************************************************************
Sub Nex_light(byval Xbyte As Byte)
     Print "dim=";
     Print Xbyte;
     Nexend
End Sub
 '******************************************************************************----3----

'****************************************************************************** ----1----
' to know the reply from nextion
' this version use a 4 lines lcd display to visualize so you have to remark
'the lcd lines
'******************************************************************************
Sub Nex_return()
     Local Dummy As Byte
     Nbyte = 0
     Do
          If Ischarwaiting() = 1 Then       'we fill an array of byte received---
               Jbyte = Inkey()
               Incr Nbyte
               Tabreturn(nbyte) = Jbyte
               If Jbyte = 255 Then       'we count the "end char"
                    Flagcar = Flagcar + 1
               End If
               If Flagcar > 3 Then Flagcar = 3
          Elseif Ischarwaiting() = 0 And Flagcar = 3 Then       'We are waiting for the end of the reception  nbyte>0
               If Flagcar = 3 Then
                    Flagcar = 0
               End If
             '  For Dummy = 1 To Nbyte       'remarque these 3 lines if you dont use LCD display
             '       Lcd Tabreturn(dummy) ;
             '  Next
               Nbyte = 0
               Exit Do
          End If
     Loop

End Sub


'******************************************************************************
'sub to do something following the return

Sub Follow()


     Select Case Tabreturn(1)

          Case 101
               Screen_id = Tabreturn(2)
               Device_id = Tabreturn(3)
               State_id = Tabreturn(4)
            '   Locate 4 , 1 : Lcd Spc(20)
            '   Locate 4 , 1 : Lcd "Scr:" ; Screen_id ; " Dev:" ; Device_id ; " Sta:" ; State_id
          Case 113
            '   Locate 4 , 1 : Lcd Spc(20)
            '   Locate 4 , 1 : Lcd "S1:" ; Tabreturn(2) ; " S2:" ; Tabreturn(3) ; " S3:" ; Tabreturn(4) ; " S4:" ; Tabreturn(5)
          Case 112
          Case 103
          Case 104
'                    Case 136
'                         Cls
'                         Locate 1 , 1 : Lcd "Init ok"
'                         Waitms 300
'                         Cls
'                    Case 1 To 34
'                         Cls
'                         Locate 1 , 1 : Lcd "ERREUR: " ; Tabreturn(1)
'                         Locate 3 , 1 : Lcd Spc(20)
'                         Locate 4 , 1 : Lcd Spc(20)
'                         Locate 3 , 1 : Lcd "Scr:" ; Tabreturn(1) ; " Dev:" ; Tabreturn(2) ; " STa:" ; Tabreturn(3)
'                         Wait 3
'                         Cls
'                    Case Else
'                         Locate 3 , 1 : Lcd Spc(20)
'                         Locate 4 , 1 : Lcd Spc(20)
'                         Locate 3 , 1 : Lcd "T1:" ; Tabreturn(1) ; " T2:" ; Tabreturn(2) ; " T3:" ; Tabreturn(3)
'                         Locate 4 , 1 : Lcd "T4:" ; Tabreturn(4) ; " T5:" ; Tabreturn(5) ; " T6:" ; Tabreturn(6)
'                         Locate 1 , 1 : Lcd "info: " ; Tabreturn(1)
'                         Waitms 300
'                         Cls
     End Select


End Sub
'******************************************************************************-----2----

Отредактировано qewin (2018-04-17 20:08:38)

0

16

qewin написал(а):

Теперь я спокоен что есть связь, так вот работает     printbin

Как связь организована физически ?
Я использую переходник USB-UART, соединение - только RXD, TXD и GND.
Васиковый Print работает нормально.

Редактор Nextion не умеет работать с терминалами !
Ни с какими...

qewin написал(а):

Нашел в сети единственный пример где немного расписывается . Будем изучать.

Это - для любителей библиотек и пр. подключаемого извне кода. ;)
Удобно с одной стороны, но я привык делать "все в одном флаконе". ;)

Отредактировано Nord (2018-04-17 20:25:16)

0

17

qewin написал(а):

Теперь  Nord буду складывать  прогу по короче

Что творим, если не секрет ?
У меня Nextion используется в качестве интерфейса для головного Мега32 в т.н. "умном доме".
Пока еще проект, но частично уже оформлен в железе.

0

18

Планируется основная морда что выше ( это пока набросок) Температура в доме на улице, давление , влажность, радио фм ,время, календарь. Пока это осилю там видно будет. Обычно "муза" после апреля уходит до глубокой осени , а потом приходиться опять все вспоминать!!! Поэтому и сохраняю примеры и наработки так как в голове не держится.  :huh:

Отредактировано qewin (2018-04-17 20:52:28)

0

19

qewin написал(а):

Планируется основная морда что выше ( это пока набросок)

А что за четыре сиськи b0...b3 ? :)

qewin написал(а):

Температура в доме на улице, давление , влажность, радио фм ,время, календарь.

Короче, цели примерно одинаковые... ;)
У меня еще будет управление девайсами и контроль их состояния (положения).

Отредактировано Nord (2018-04-17 21:08:40)

0

20

Эти "сиськи "  :rofl:  отображают кнопки при нажатии они подсвечиваются, я их еще не доделал ими планируется делать переход к другим страницам и функциям.

Отредактировано qewin (2018-04-17 21:16:37)

0

21

qewin написал(а):

Эти "сиськи "    отображают кнопки при нажатии они подсвечиваются

Я кнопки по-другому нарисовал.
Завтра скрин скину.

PS. Хотя...  Может на такие "кнопки" давить приятнее... :)  Подумаем... ;)

0

22

Ну надо же как то выпендрица а то все квадратные и прямоугольные. Эт яйца дрозда :crazyfun:  Блин Nord  ну правда не мучай дай кусочек как ты отправляешь через PRINT.

0

23

qewin написал(а):

Nord  ну правда не мучай дай кусочек как ты отправляешь через PRINT.

Я сейчас не дома, потому навскидку:

Формируем строку:
stroka = page + "." + dev + "=" + perem + fin
Обязательно выполнить:
stroka = Trim(stroka)
Отправляем:
Print stroka

где:
page    - идентификатор страницы:  page0, page2...
dev      - идентификатор объекта:    tem.txt...
perem  - значение для свойств объекта
             для текстовых значений формируется через Str(...)
             для числовых - Chr(...), при величине более 255 использую текстовые значения, но это только в одном случае - передача давления от BME280
             делается так потому, что Print при любом раскладе отправляет символ
fin        - константа, определяемая в самом начале:  &HFF &HFF &HFF ("яяя" в ASCII)
Не забываем про необходимые разделители (".", "=" и пр.)

В результате получаем цепочку байт, содержащую "page0.tem.txt=temяяя", которую и выплевываем в UART.

Фишка еще в том, что Print автоматом завершает строку символом Chr(13), а Printbin оправляет без него.
Производители Nextion не сообщают об обновляшках, не считают нужным, поэтому в дисплеях "до" и "после" может оказаться, что команды обрабатываются по-разному.
Молнии от пользователей уже не раз летали на форумах по этому поводу. ;)
У меня NX8048K070_011R, понимает Print нормально...

Отредактировано Nord (2018-04-17 22:05:16)

0

24

Вообщем заработала !  :flag:  Пока так

Dim Stroka As String * 20

Stroka = "tem.txt="+chr(34)+text+chr(34)         ' Text (STR)  переменная приходит с датчика Темп.

Print Stroka;
Printbin &HFF ; &HFF ; &HFF

Не уходила в монитор потому что ставить кавычки   ( открывается  "  переменная " закрывается  ну и   &HFF ; &HFF ; &HFF )

Nord Спасибо за наводку и помощь и терпение.

0

25

qewin написал(а):

Stroka = "tem.txt="+chr(34)+text+chr(34)

Не увидел Trim(Stroka)
Желательно не игнорировать, т.к. под переменную зарезервировано 20 символов, а в собраной строке их может оказаться меньше.
В результате при выполнении Print в UART улетят лишние байты, которые дисплей попытается куда-то приткнуть, ведь "яяя" он же еще не получил...

И еще. А если вместо этого

qewin написал(а):

Print Stroka;
Printbin &HFF ; &HFF ; &HFF

Написать

Print Stroka; "яяя"

Работает ?

Отредактировано Nord (2018-04-18 02:15:04)

0

26

qewin написал(а):

дай кусочек как ты отправляешь через PRINT.

Вот физический "кусочек".
Переменные температуры - Single, т.к. при отправке/приеме числовых значений Nextion пуляет по 4 байта.

В блоке объявления переменных

Код:
Dim fin As String * 3                                 ' Конец посылки FF+FF+FF
fin = Chr(255) + Chr(255) + Chr(255)
.....
Dim temp21 As Single                               ' Значение температуры для передачи
Dim temp31 As Single                               ' Значение температуры для передачи
Dim hund As Integer                                  ' Значение влажности для передачи
Dim hunds As String * 3                            ' Текстовое значение влажности
Dim presst As String * 4                            ' Текстовое значение давления
.....

В теле программы, где ведется отправка

Код:
If флаг_ошибок.10 = 1 Then hund = 0
If флаг_ошибок.10 = 1 Then presst = "0"
hunds = Str(hund)
hunds = Trim(hunds)
Print "page0.hund.txt=";hunds;fin                             ' Значение влажности для передачи
Print "page0.davl.txt=";presst;fin                              ' Значение давления для передачи

If флаг_ошибок.0 = 1 Then temp11 = 99
Print "page2.j2.val=";temp11;fin                               ' Значение температуры для передачи
If флаг_ошибок.1 = 1 Then temp12 = 99
Print "page1.j2.val=";temp12;fin                               ' Значение температуры для передачи
If флаг_ошибок.2 = 1 Then temp13 = 99
Print "page1.j0.val=";temp13;fin                               ' Значение температуры для передачи
If флаг_ошибок.3 = 1 Then temp14 = 99
Print "page7.j2.val=";temp14;fin                               ' Значение температуры для передачи
If флаг_ошибок.4 = 1 Then temp21 = 99
Print "page6.j2.val=";temp21;fin                               ' Значение температуры для передачи
If флаг_ошибок.10 = 1 Then temp31 = 99
Print "page5.j2.val=";temp31;fin                               ' Значение температуры для передачи
If флаг_ошибок.5 = 1 Then temp32 = 99
Print "page3.j2.val=";temp32;fin                               ' Значение температуры для передачи
If флаг_ошибок.6 = 1 Then temp33 = 99
Print "page3.j0.val=";temp33;fin                               ' Значение температуры для передачи
If флаг_ошибок.7 = 1 Then temp41 = 99
Print "page8.j2.val=";temp41;fin                               ' Значение температуры для передачи
If флаг_ошибок.8 = 1 Then temp42 = 99
Print "page9.j2.val=";temp42;fin                               ' Значение температуры для передачи
If флаг_ошибок.9 = 1 Then temp43 = 99
Print "page9.j0.val=";temp43;fin                               ' Значение температуры для передачи

+1

27

Всем привет! Nord спасибо за дополнение.
Так по твоим дополнениям и вопросам.

1. Чтобы все дошло в Nextion монитор  ( на моем примере и ЛСД)    tem.txt="27.1"яяя    =    74 65 6D 2E 74 78 74 3D 22 32 37 2E 31 22 FF FF FF

Так не работает  Print Area;"яяя"  добавляется в конце (видно в терминале)    0D 0A                tem.txt="27.3"яяя    =    74 65 6D 2E 74 78 74 3D 22 32 37 2E 33 22 FF FF FF 0D 0A

http://s5.uploads.ru/t/hifGU.jpg

Отредактировано qewin (2018-04-18 18:18:54)

0

28

Все что идет одной строкой в PRINT -е что бы я не писал всегда добавляется  0D 0A   :dontknow:  и поэтому у меня не работало и еще пока только таким способом у меня получилось поставить кавычки     chr(34)+text+chr(34)  =  "Text" без них тоже неработает.

fin - тоже неработает(в терминале видет (FF FF FF)  но к ним сразу прилепляется в конце  0D 0A  ставил и твоим примером и своим нефига

У меня пока такой код на Температуру, Влажность и давление , позже отцеплю  лсд Nokia еще убавиться код.

Код:
Do
   Gosub Bme280_read

   Text = Fusing(temperature , "#.#")' + " °C"

   Lcdat 2 , 1,"T= "; Text


 Area = "tem.txt="+chr(34)+text+chr(34)


 Print Area;
Printbin &HFF ; &HFF ; &HFF


   Text =Fusing(pressure , "#.#")' + " mm"


   Lcdat 4 , 1,"Ä= "; Text

   Area = "pre.txt="+chr(34)+text+chr(34)

 Print Area;
Printbin &HFF ; &HFF ; &HFF



   Text = str(humidity)+ "%" 'Fusing(humidity , "#.#") + "%"


   Lcdat 6 , 1,"B= "; Text

  Area = "hum.txt="+chr(34)+text+chr(34)

 Print Area;
Printbin &HFF ; &HFF ; &HFF



   Wait 1
Loop

Отредактировано qewin (2018-04-18 18:38:41)

0

29

qewin написал(а):

Так не работает  Print Area;"яяя"  добавляется в конце (видно в терминале)    0D 0A

Возможно, включены "галочки"  +CR  и  CR=CR+LF ?

0

30

Nord написал(а):

Так не работает  Print Area;"яяя"  добавляется в конце (видно в терминале)    0D 0A

Возможно, включены "галочки"  +CR  и  CR=CR+LF ?

Все пробовал никак не влияет , ну и термина это лишь окно по которому можно посмотреть что прилетело !?

0


Вы здесь » Программирование ATMEL в BASCOM. » Исходники » LCD дисплеи Nextion ?