Hallo, könnte mir jemand sagen wie python eine sogenannte Dauerschleife durchläuft mit While: True und welche diese unterbricht? Ich sende mit einem Serial Port angeschlossen über USB Kabel ein Analog Signal von einem Arduino zu einem Rasperry (Temperatur Messer). Dies wird alle 10 Sekunden gesendet. Auf dem rasperry hab ich im gleichen loop wie serial input read einen Taster in der Dauerschleife. So typisch erste Gehversuche mit einem Arduino. Wenn nun der serial input gerade ungünstig liegt bis 10 Sekunden vorüber sind, muss ich auch den Taster ewig drücken, bis er mal funktioniert. Oder er sendet sein Signal bis zu 10 Sekunden durchgehend. In einer normalen Schleife ohne den serial input, funktioniert der Taster immer sofort. Ich dachte mir immer, nur ein sleep kann python unterbrechen. Wartet python hier so lange, bis serial abgearbeitet ist und wie kann man das überspringen? In einem try - except steht es schon. Wäre dankbar für ein Schlagwort unter das man dabei suchen soll.
Blocking / Non-Blocking
>>Wäre dankbar für ein Schlagwort
100% übererfüllt ;-)
Norbert schrieb: > Blocking / Non-Blocking > >>>Wäre dankbar für ein Schlagwort > > 100% übererfüllt ;-) Omg, danke!
Unter Windows mache ich sowas mit einem Timer, der alle x Sekunden in eine Subroutine springt und die Schnittstelle ausliest. Gibt es sowas bei Python nicht ?
Eventuell ist die unbekannte Serial Port Funktion blockend, eventuell könnte für dich pyside6 interessant sein, aber am besten postest Du deinen Code mal.
Bernd schrieb: > In einer normalen Schleife ohne den serial input, funktioniert der > Taster immer sofort. > > Ich dachte mir immer, nur ein sleep kann python unterbrechen. Nein je nach Implementierung kann der Serial Read blocking sein. Wenn du PySerial verwendet kannst du im Konstruktor ein timeout=0 definieren, dann kommt der read sofort zurück, wenn keine Daten da sind und dein Programm sollte schneller auf den Taster reagieren. Alternativ könntest du dein Python Programm auch mit asyncio parallel schreiben, dann hättest du zwei unabhängige Routinen, eine für den Serial Port und eine für den Taster, hast dann aber typischen Probleme einer asynchronen Programmierung am Hals.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.