Guten Morgen,
ich bin von dem Thread "Wie sage ich es in Python ? (Einsteigerfragen)" hierhin gewandert, da der Umfang meiner Frage etwas spezieller in die Materie geht.
Nun zu meinem Problem:
Ich habe ein Python Programm, welches über eine Dual-H-Brücke zwei Motoren ansteuert. Im Moment werden diese über einen "Impuls" angeschalten. D.h. Drücke ich Pfeiltaste nach oben fährt er Vorwärts bis ein anderer Befehl (z.B. rechts) kommt. Normalerweise muss man vor jedem Befehl in Python wenn es mit raw.input() etc. gemacht wird ein ENTER Befehl geben. Dies hab ich dann mit dem Keyevent curses.getch() umgangen und das funktioniert auch wunderbar.
Was ich jetzt gerne hätte ist die Funktion:
SOLANGE die Pfeiltaste oben gedrückt ist soll er fahren. Wird diese losgelassen hält er an.
Ich habe schon einiges herumgeeiert aber irgendwie komm ich nicht so drauf.
Nun zu meinem Programmcode:
import RPi.GPIO as GPIO
import time
import sys, os
import termios, fcntl
import curses
stdscr = curses.initscr()
curses.cbreak()
stdscr.keypad(1)
#A routine to control a pair of pins
def ControlAPairOfPins(FirstPin,FirstState,SecondPin,SecondState):
print "Controlling them pins"
if FirstState == "1":
GPIO.output(int(FirstPin),True)
else:
GPIO.output(int(FirstPin),False)
if SecondState == "1":
GPIO.output(int(SecondPin),True)
else:
GPIO.output(int(SecondPin),False)
#Just return
return
####Main body of code
#Get rid of warnings
GPIO.setwarnings(False)
#Set the GPIO mode
GPIO.setmode(GPIO.BOARD)
#Set the pins to be outputs
GPIO.setup(19,GPIO.OUT)
GPIO.setup(21,GPIO.OUT)
GPIO.setup(23,GPIO.OUT)
GPIO.setup(24,GPIO.OUT)
stdscr.addstr(0,10,"Hit 'q' to quit")
stdscr.refresh()
key = ''
while key != ord('q'):
key = stdscr.getch()
stdscr.addch(20,25,key)
stdscr.refresh()
if stdscr.getch() == curses.KEY_UP:
stdscr.addstr(2, 20, "--Up--")
ControlAPairOfPins("19","1","21","0")
ControlAPairOfPins("23","0","24","1")
if stdscr.getch() == curses.KEY_LEFT:
stdscr.addstr(2, 20, "-Left-")
ControlAPairOfPins("19","0","21","1")
ControlAPairOfPins("23","0","24","1")
if stdscr.getch() == curses.KEY_RIGHT:
stdscr.addstr(2, 20, "-Rght-")
ControlAPairOfPins("19","1","21","0")
ControlAPairOfPins("23","1","24","0")
if stdscr.getch() == curses.KEY_DOWN:
stdscr.addstr(2, 20, "-Back-")
ControlAPairOfPins("19","0","21","1")
ControlAPairOfPins("23","1","24","0")
else:
stdscr.addstr(2, 20, "-Down-")
ControlAPairOfPins("19","0","21","0")
ControlAPairOfPins("23","0","24","0")
curses.endwin()
GPIO.cleanup()
Alles anzeigen
Eventuell sollte man das IF durch ein WHILE ersetzen aber es kommt auf das selbe Ergebnis hinaus.
Liebe Grüße und schonmal vielen Dank
Neolinga