Serialin und Nextion Display

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Serialin und Nextion Display

      Neu

      Hallo,
      versuche aktuell leider erfolglos seriell Daten von einem Nextion Display zu empfangen.

      Sollte ja eigentlich recht einfach sein, da das Nextion ja jeder Nachricht ein dreimaliges $FF ans Ende anfügt.

      Wie muss ich Serialin2 (Bytematch) konfigurieren damit Serial2charmatch() nach diesem dreimaligen $FF ausgeführt wird?

      Hier mal mein bisheriger Code. Die Daten sollen an RX2 (Arduino Mega) empfangen werden und dann via USB zum PC-Terminal gesendet werden.


      BASCOM-Quellcode

      1. $regfile = "m2560def.dat"
      2. $crystal = 16000000
      3. $hwstack = 100
      4. $swstack = 100
      5. $framesize = 100
      6. Declare Sub Serial2charmatch()
      7. Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
      8. Config Com3 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
      9. Enable Interrupts
      10. Config Serialin2 = Buffered , Size = 100 , Bytematch = ?????
      11. Open "COM1:" For Binary As #1
      12. Open "COM3:" For Binary as #3
      13. 'Hauptschleife
      14. Do
      15. wait 2
      16. Loop
      17. End
      18. Sub Serial2charmatch()
      19. Local FromNextion As String * 30
      20. 'Buffer auslesen
      21. Input #3, FromNextion Noecho
      22. 'Daten zum Terminal Com1 senden
      23. Print #1, FromNextion
      24. Print #1, "Serial2charmatch wurde ausgeführt"
      25. clear serialin2
      26. End Sub
      Alles anzeigen
      Grüße
      MichaelS
    • Neu

      Ich würde in dem Fall kein Charmatch verwenden, denn die ISR würde dann bei allen $FF aufgerufen.
      Möglicherweise fallen auch Daten an, die den Wert $FF enthalten.
      Dann wird es mühselig das auseinander zu wurschteln.

      Ein einfacherer Weg wäre das Bytematch zu verwenden. D. h. bei jedem Byteempfang wird die ISR aufgerufen.

      In dieser schreibst du einfach das Byte in ein Array und prüft dann, ob die letzten 3 Byte FF sind.
      Das ist einfacher und sicherer als Charmatch.

      Oder zu zählst die FF-Werte, kommt ein anderer Wert als FF, wird Zähler=0 gesetzt. Erreicht der Zähler den Wert 3, wäre das Datenframe komplett.
      Kaum macht man es richtig - und schon geht's!
    • Neu

      Bytematch oder Charmatch passt hier schlecht, weil das ja immer nur ein Byte prüft (matcht) Du könntest beim Bytematch $HFF in die Routine springen und schauen, ob der String leer ist. Wenn ja, deinen String per Input einlesen (sofern CR am Ende kommt) und bei nein dann mitzählen, wie oft der Bytematch schon kam. Beim 3.$HFF kopierst du den String um, damit er für das nächste mal leer ist.
    • Neu

      Ich habe mich für eine variante entschieden die funktioniert und meinem Anfänger Level entspricht.

      Mein Beispiel:
      Das Nextion soll den AVR informieren ob sich der User in den Setting befindet oder nicht.

      Der Nextion Code:

      Quellcode

      1. get "settings:visit"
      2. print 13

      Quellcode

      1. get "settings:leave"
      2. print 13
      Der Bascom Code:

      BASCOM-Quellcode

      1. $regfile = "m2560def.dat"
      2. $crystal = 16000000
      3. $hwstack = 100
      4. $swstack = 100
      5. $framesize = 100
      6. Declare Sub Serial2charmatch()
      7. dim FromNextion As string*30
      8. dim Nextion_End as string*3
      9. dim Kennung as string*3
      10. Nextion_End = Nextion_End + chr(255) + chr(255) + chr(255)
      11. const Settings_visit = "psettings:visit" + chr(255) + chr(255) + chr(255)
      12. const Settings_leave = "psettings:leave" + chr(255) + chr(255) + chr(255)
      13. Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
      14. Config Com3 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
      15. Enable Interrupts
      16. Config Serialin2 = Buffered , Size = 30 , Bytematch = 13
      17. Open "COM1:" For Binary As #1
      18. Open "COM3:" For Binary as #3
      19. 'Hauptschleife
      20. Do
      21. wait 1
      22. Loop
      23. End
      24. Sub Serial2charmatch()
      25. Inputhex #3, FromNextion Noecho
      26. Kennung = right(FromNextion, 3)
      27. if Kennung = Nextion_End then
      28. Select case FromNextion
      29. case Settings_visit
      30. print #1, "Settings besucht"
      31. case Settings_leave
      32. print #1, "Settings verlassen"
      33. end select
      34. endif
      35. clear serialin2
      36. End Sub
      Alles anzeigen