wie im anderen Thread zum TX-Pi schon geschrieben, versuche ich mich gerade in Python einzuarbeiten und habe mein Setup etwas umgestellt.
Ich habe ein WallE mit TXT und ftduino hier stehen und versuche ihm über ftrobopy und ftduino_direct mit Python leben einzuhauchen.
Nach einigen Abenden klappt es mittlerweile Inputs und Outputs von beiden Controllern auszulesen bzw. anzusteuern. An ein paar Punkten beiße ich mir aber gerade die Zähne aus.
1. ftrobopy - update_interval Option - Verständnisfrage
Mir ist nicht ganz klar wie diese Option wirkt und genutzt werden kann. In den meisten Beispielen wird die Option gar nicht separat aufgerufen.
Ich vermute, das es einen Standardwert gibt, und das in dem Intervall I/Os gefeuert werden (also Geräteebene). Für die "kontinuierliche" Auswertung in Python auf Softwarebene benötige ich noch eine Schleife oder eine Timer-Funktion, wie sie in den Beispielen im ftc Tutorial verwendet wird. Passt die Interpretation oder laufen hier jetzt zwei Timer parallel?
Code: Alles auswählen
self.txt = ftrobopy.ftrobopy("localhost", 65000, update_interval=0.01) #TXT über ftrobopy Bibliothek verbinden
...
self.timer = QTimer(self) # create a timer
self.timer.timeout.connect(self.on_timer) # connect timer to on_timer slot
self.timer.start(100); # fire timer every 100ms (10 hz)
Diese hängen am ftduino und sie laufen die nötigen Schritte wenn ich danach eine ausreichende sleep-Pause setze. Ich suche nach einer Codevorlage, die im engen Takt den Status de Motors abfragt, um möglichst nahtlos die nächsten Befehle auszuführen. Am TXT könnte man die Funktion motorX.finished() nutzen. Meine Versuche führen aber nicht zum Ziel. Der erste Schritt wird vorzeitig abgebrochen:
Code: Alles auswählen
def on_button5_clicked(self):
myftd.comm("motor_counter M2 left 512 200") #kurze Vorwärtsfahrt
myftd.comm("motor_counter M3 right 512 200")
time.sleep(0.2) #Wartezeit um counter_state auslesen zu können
while myftd.comm('counter_get_state C2') == 1: #warte bis Vorwärtsfahrt beendet
#self.txt.updateWait()
time.sleep(0.01)
myftd.comm("motor_counter M2 left 512 230") #viertel Drehung
myftd.comm("motor_counter M3 left 512 230")
Danke und LG
Uwe