Tastaturabfrage für Robotersteuerung
Verfasst: Sonntag 25. März 2018, 15:03
Hallo,
ich fange gerade an meinen Roboter über einen PI3 zu steuern. Zuerst sollte die Steuerung über eine Tastatur (Cursortasten) möglich sein. Sie funktioniert eigentlich soweit. Wenn eine Taste gerückt wird werden die entsprechende GPIOs angesteuert und das Kettenfahrzeug bewegt (2 Elektronikmotoren, die jeweils über eine H-Brücke angesteuert werden) sich entsprechend. Lasse ich die Taste los bleibt er sofort stehen (alles GPIOs aus).
Jetzt zum Problem- wenn ich z.B. die Cursor_Up Taste drücke und anschließend die Cursor_Down (gleichzeitig), fährt der Roboter erst vorwärts und dann rückwärts (wie es auch sein sollte), lasse ich dann die Cursor_Down Taste wieder los bleibt er jedoch stehen, obwohl noch die Cursor_Up Taste gedrückt ist.
Zusammenfassung:
Der Zustand der ersten Taste wird nicht mehr abgefragt, nachdem eine Zweite zwischenzeitlich kurz betätigt wurde.
Wie kann man das hinbekommen, das immer der Befehl der letzten gedrückten Taste ausgeführt wird, bis letzendlich diese losgelassen wird?
Hier der Teil des Codes:
try:
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
GPIO.output(7,False)
GPIO.output(11,True)
GPIO.output(13,False)
GPIO.output(15,True)
if event.key == pygame.K_DOWN:
GPIO.output(7,True)
GPIO.output(11,False)
GPIO.output(13,True)
GPIO.output(15,False)
if event.key == pygame.K_RIGHT:
GPIO.output(7,True)
GPIO.output(11,False)
GPIO.output(13,False)
GPIO.output(15,True)
if event.key == pygame.K_LEFT:
GPIO.output(7,False)
GPIO.output(11,True)
GPIO.output(13,True)
GPIO.output(15,False)
if event.key == pygame.K_ESCAPE or event.unicode == 'q':
pygame.quit()
sys.exit()
if event.type == pygame.KEYUP:
GPIO.output(7,False)
GPIO.output(11,False)
GPIO.output(13,False)
GPIO.output(15,False)
Ich hoffe es gibt ein Möglichkeit...
Grüsse
Tobi
ich fange gerade an meinen Roboter über einen PI3 zu steuern. Zuerst sollte die Steuerung über eine Tastatur (Cursortasten) möglich sein. Sie funktioniert eigentlich soweit. Wenn eine Taste gerückt wird werden die entsprechende GPIOs angesteuert und das Kettenfahrzeug bewegt (2 Elektronikmotoren, die jeweils über eine H-Brücke angesteuert werden) sich entsprechend. Lasse ich die Taste los bleibt er sofort stehen (alles GPIOs aus).
Jetzt zum Problem- wenn ich z.B. die Cursor_Up Taste drücke und anschließend die Cursor_Down (gleichzeitig), fährt der Roboter erst vorwärts und dann rückwärts (wie es auch sein sollte), lasse ich dann die Cursor_Down Taste wieder los bleibt er jedoch stehen, obwohl noch die Cursor_Up Taste gedrückt ist.
Zusammenfassung:
Der Zustand der ersten Taste wird nicht mehr abgefragt, nachdem eine Zweite zwischenzeitlich kurz betätigt wurde.
Wie kann man das hinbekommen, das immer der Befehl der letzten gedrückten Taste ausgeführt wird, bis letzendlich diese losgelassen wird?
Hier der Teil des Codes:
try:
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
GPIO.output(7,False)
GPIO.output(11,True)
GPIO.output(13,False)
GPIO.output(15,True)
if event.key == pygame.K_DOWN:
GPIO.output(7,True)
GPIO.output(11,False)
GPIO.output(13,True)
GPIO.output(15,False)
if event.key == pygame.K_RIGHT:
GPIO.output(7,True)
GPIO.output(11,False)
GPIO.output(13,False)
GPIO.output(15,True)
if event.key == pygame.K_LEFT:
GPIO.output(7,False)
GPIO.output(11,True)
GPIO.output(13,True)
GPIO.output(15,False)
if event.key == pygame.K_ESCAPE or event.unicode == 'q':
pygame.quit()
sys.exit()
if event.type == pygame.KEYUP:
GPIO.output(7,False)
GPIO.output(11,False)
GPIO.output(13,False)
GPIO.output(15,False)
Ich hoffe es gibt ein Möglichkeit...
Grüsse
Tobi