serielle Übertragung von Byte oder int, Probleme beim Auslesen

  • Hallo erstmal....

    Ich bin neu hier und mit Raspberry und Python noch ziemlich in den Kinderschuhen.

    Mein Problem ist Folgendes:

    Ich habe einen Raspberry Pi5 per UART mit einem Raspberry Pi pico verbunden.

    Am pico lese ich die digitalen Eingänge ein und wandele sie um in ein byte (alternativ in ein int).

    Dann sende ich das byte (das int) und empfange es mit dem Pi5.

    Das Senden und Empfangen klappt prima, doch das Umwandeln auf dem Pi5 klappt nicht.

    Da das byte (das int) unterschiedlich lang ist, weiss ich nicht, wie ich immer das ganze byte (int) empfangen kann.

    Ich hab schon mehrere Bücher und das web studiert, bin aber noch zu keinem Ergebnis gekommen.


    Kann mir da jemand helfen?

  • serielle Übertragung von Byte oder int, Probleme beim Auslesen? Schau mal ob du hier fündig wirst!

  • `read` liest nur ein Byte wenn du nichts anderes angibst. In dem Fall musst du so lange lesen und dabei kontrollieren, bis dein Stop-Bit kommt.

    Alternativ gibt es `readlines` das liest so lange, bis ein `End-of-line`-Character kommt, also sowas wie `\n`.

    Zur Vorgehensweise würde ich mir mal in einer Schleife das ausgeben lassen, das `read` liefert und mir die Ausgabe anschauen.


    `Serial` würde ich das `stop_bit` auch mit angeben:

    pySerial API — pySerial 3.4 documentation

    Dann kannst du ja mal schauen, ob dein Stopbit in der Liste vorkommt:

    pySerial API — pySerial 3.4 documentation


    Grüße

    Dennis

    🎧 The music, if you can call it that, physically assaults anyone dumb enough to listen 🎧

  • AlexS Am einfachsten wäre es tatsächlich das *Byte* zu übertragen, statt eine ASCII-Darstellung des Binärdarstellung als Text. Wenn als Text, warum dann in Binärdarstellung? Dezimal wäre kürzer. (Hexadezimal oft noch kürzer.)

    Wenn als Text, dann muss man halt entweder eine feste Anzahl von Zeichen pro Wert übertragen, oder ein Abschlusszeichen einbauen an dem man das Ende erkennen kann. Das Zeilenendezeichen bietet sich an.

    Zum Pico-Code: `os` und `machine` werden importiert aber nirgends verwendet.

    Man nummeriert keine Namen. Namen von `a` bis `l` fallen da auch drunter. Da will man eine Liste mit den Pins. Dann muss man auch nicht 12(!) mal den gleichen Code kopieren und leicht anpassen, sondern schreibt da eine Schleife wo der Code nur *einmal* drin steht.

    Das initialisieren von `a1` bis `l1` mit 0 ist sinnlos weil diese 0en nirgends verwendet werden. Das gleiche gilt für `z`. Ebenfalls unsinnig ist das Umwandeln der 0, in einen `int`-Wert, denn das ist bereits ein `int`-Wert.

    Die ganze ``if``/``else`` sind unnötig umständlich. Wenn einer Variablen eine 1 zugewiesen wird wenn `value()` 1 liefert, und 0 wenn `value()` 0 liefert, dann kann man der Variablen gleich das Ergebnis von `value()` zuweisen:

    Python
    if a.value() == 1:
        a1 = 1
    else:
        a1 = 0
    
    # =>
    
    a1 = a.value()

    Ungetestet:

    "He who laughs last thinks slowest"

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!