Microbit als Gamecontroller

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
JanRock
User
Beiträge: 2
Registriert: Montag 6. Januar 2020, 11:38

Hallo zusammen,

ich möchte gerne den Microbit als Gamecontroller für ein Spiel nutzen, das ich mit Pygame Zero programmiert habe. Ich konnte den MicroBit mithilfe des Pyserials-Modul in das Programm einbauen. Beim Start hängt sich das Spiel manchmal auf, da nicht alle Daten vom Microbit übertragen wurden. So deute ich Fehlermeldung.
x, y = s.readline().decode("ascii").split()
ValueError: not enough value to unpack (expected 2, got 1)

Wie könnte ich prüfen, dass auch alle notwendigen Daten übertragen wurden?

Ich bedanke mich für euere Hilfe.

Viele Grüße
Jan
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bei serieller Kommunikation ist es nicht immer moeglich sicherzustellen, dass man vollstaendige Datagramme bekommt - du oeffnest den Port ja zu einem beliebigen Zeitpunkt mittem im Strom.

In einem so simplen Fall wie deinem wuerde ich einfach ein try/except ValueError drumrum packen, und so tun als ob nix gewesen waere. Gerade weil's ja nur am Anfang des Programms passiert.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@__deets__: auch wenns klappt, heißt das ja nicht, dass die Daten vollständig sind. Daher würde ich einfach die erste Zeile generell verwerfen.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

@Sirius3: je nach Abfrageintervall kann das auch zwischendurch passieren. Ich würde es also immer machen.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@__deets__: Dann braucht man ein Start-of-Text neben einem End-of-Text bzw. Newline-Zeichen.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nach nochmal drueber nachdenken: ja, ist wirklich besser einfach am Anfang einmal eine Zeile wegzuwerfen.
JanRock
User
Beiträge: 2
Registriert: Montag 6. Januar 2020, 11:38

Hallo _deets_ und Sirius3,

danke für euere Hilfe. Ich habe die Variante try/ except ValueError genommen.
Das Spiel läuft jetzt ohne Probleme.

Viele Grüße
Jan
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@JanRock: und wenn Du meine Beiträge gelesen hast, dann ist genau das die Variante, die nicht funktioniert.
Antworten