Endlosschleife durch andere Funktion beenden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
µC-noob
User
Beiträge: 12
Registriert: Mittwoch 2. Januar 2008, 10:10

Ich denke die Frage gehört hier rein:

Ok,
ich habe einen µC mit dem ich über den PC kommunizieren möchte.
Hab dazu ein Protokoll geschrieben, um diesen zu steuern.
Der controller sendet immer folgenden Befehlssatz:

!PIN:ZEIT(ms):RE/FE (RE/FE --> Rising/Falling Edge)
BSP:
"!2:12346:RE\r\n"
"!5:45678:FE\r\n"


Nun kommt es vor, dass ich ständig Daten vom Controller empfangen möchte (also der Comport solange offengehalten wird)
Aber wenn ich einen Abbruchbefehl eingebe / bzw. die Abbruchfunktion aufrufe, ich diesen wieder schließe.

In Python bin ich jetzt nicht so ganz der Bringer (soll heißen Anfänger).

Ich hab das so gelöst:

Code: Alles auswählen

def permanentControll():
    ser = serial.Serial(5, 38400, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=1, xonxoff=0, rtscts=0)     
    holdWhile = True
    while holdWhile:
        #checkRX = ser.read(1)
        if ser.read(1) != ' ':
            time.sleep(0.2) 
            rxBox = ser.read(300) 
            print rxBox
Aber ich glaube ihr seht schon,...
Eine Endlosschleife, einmal gestartet,... :shock:
Wie kann ich das so aufbauen, dass diese schleife durch ein anderes Modul wieder beendet werden kann und vor allem, dass man die Möglichkeit bekommt diesen Abbruchbefehl ausführen zu lassen??

vlt über eine weitere Funktion

Code: Alles auswählen

def stopPermanentControll():
        ser.close()
Danke
Gruß
Sry???
blutiger Python-Anfänger!
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Damit du diese Endlosschleife von außen unterbrechen kannst muss erstmal diese Methode in einem eigenen Thread ausgeführt werden.
Nun kannst du, wie du schon überlegt hast, eine weitere Methode Schreiben welche nichts anderes macht als ein Flag so zu setzen das dieses für deine Schleife die Abbruchbedingung darstellt.

Ich würde das ganze innerhalb einer Klasse realisieren damit du zB das Flag als Attribut deiner Klasse funktionsübergreifend setzen und abfragen kannst.
µC-noob
User
Beiträge: 12
Registriert: Mittwoch 2. Januar 2008, 10:10

Danke,
ich werd mich dan mal ransetzen und deinen Vorschlag
versuchen zu realisieren.

chiao
Gruß
Sry???
blutiger Python-Anfänger!
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo µC-noob!

Ich habe da ein Programm, das ich gerade für jemanden schreibe, der Schiedsrichter-Bewertungen, die von der Seriellen Schnittstelle (von einem ATmega16) kommen, auf eine Anzeigentafel (Bildschirm) ausgeben möchte.

Es handelt sich hier um ein noch nicht ganz fertiges Programm. Aber die Basis funktioniert bereits.

Das Programm ist auf drei Zeilen und 14 Zeichen je Zeile eingestellt. Möchte man direkt in eine vorgegebene Zeile schreiben, dann gibt man beim ``print`` am Anfang die Zeilennummer mit an. Das sieht im Bascom z.B. so aus:

Code: Alles auswählen

Print "<L2>Ich bin Text"
``<L2>`` steht hier für die zweite Zeile.

Und hier der Link zum Quellcode: http://paste.pocoo.org/show/20643/
(wx.gizmoz braucht man nicht -- habe ich zu löschen vergessen)

Und hier der Code den ich zum Testen im Bascom habe:
http://paste.pocoo.org/show/20644/

Vielleicht kannst du daraus etwas brauchen.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo!

Neue Version: http://paste.pocoo.org/show/20746/
Besseres Bascom-Beispiel: http://paste.pocoo.org/show/20701/

Bilder und Erklärungen: http://www.transistornet.de/viewtopic.php?p=30919#30919

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten