Ok, hab vielleicht zu wenig Infos gebracht.
Code: Alles auswählen
import RPi.GPIO as GPIO
import time
import sys
import termios
import tty
inkey_buffer = 1
def inkey():
fd=sys.stdin.fileno()
remember_attributes=termios.tcgetattr(fd)
tty.setraw(sys.stdin.fileno())
character=sys.stdin.read(inkey_buffer)
termios.tcsetattr(fd,termios.TCSADRAIN, remember_attributes)
return character
#GPIO Modus (BOARD / BCM)
GPIO.setmode(GPIO.BCM)
#Warnungen ausschalten
GPIO.setwarnings(True)
#GPIO Pin Belegung
ROT = 17
GELB = 27
GRUEN = 22
Hupe = 13
AB = 5
CD = 6
LED = 4
#LED-Leuchte init
l = False
#Richtung der GPIO-Pins
GPIO.setup(ROT, GPIO.OUT) #rot
GPIO.setup(GELB, GPIO.OUT) #gelb
GPIO.setup(GRUEN, GPIO.OUT) #gruen
GPIO.setup(Hupe, GPIO.OUT) #Hupe
GPIO.setup(AB, GPIO.OUT) #AB
GPIO.setup(CD, GPIO.OUT) #CD
GPIO.setup(LED, GPIO.OUT) #LED-Strahler
def notfall():
sys.stdin.flush()
GPIO.output(ROT, True)
GPIO.output(GELB, False)
GPIO.output(GRUEN, False)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(0.5)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(0.5)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
GPIO.output(AB, False)
GPIO.output(CD, False)
time.sleep(10)
def Trefferaufnahme():
key = inkey()
if key == 't' :
sys.stdin.flush()
else:
time.sleep(0.2)
Trefferaufnahme()
def Lichtan():
GPIO.output(LED, True)
def Lichtaus():
GPIO.output(LED, False)
def ende():
GPIO.output(ROT, False)
GPIO.output(GELB, False)
GPIO.output(GRUEN, False)
GPIO.output(AB, False)
GPIO.output(CD, False)
GPIO.output(Hupe, False)
GPIO.cleanup()
exit()
def umschalten2():
print("Start2")
GPIO.output(ROT, True)
GPIO.output(GELB, False)
GPIO.output(GRUEN, False)
GPIO.output(AB, True)
GPIO.output(CD, False)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(0.5)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(10)
GPIO.output(ROT, False)
GPIO.output(GELB, False)
GPIO.output(GRUEN, True)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
print ("for g schleife")
for g in range(90):
sys.stdin.flush()
key = inkey()
if key == 's' :
break
elif key == 'e' :
notfall()
ende()
else:
time.sleep(0.1)
print ("Next")
GPIO.output(GRUEN, False)
GPIO.output(ROT, False)
GPIO.output(GELB, True)
for g in range(300):
key = inkey()
if key == 's' :
sys.stdin.flush()
break
elif key == 'e' :
sys.stdin.flush()
notfall()
ende()
else:
time.sleep(0.1)
GPIO.output(ROT, True)
GPIO.output(GELB, False)
GPIO.output(GRUEN, False)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(0.5)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
GPIO.output(AB, False)
GPIO.output(CD, True)
time.sleep(20)
GPIO.output(ROT, False)
GPIO.output(GELB, False)
GPIO.output(GRUEN, True)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
for g in range(900):
key = inkey()
if key == 's' :
sys.stdin.flush()
break
elif key == 'e' :
sys.stdin.flush()
notfall()
ende()
else:
time.sleep(0.1)
GPIO.output(GRUEN, False)
GPIO.output(ROT, False)
GPIO.output(GELB, True)
for g in range(300):
key = inkey()
if key == 's' :
sys.stdin.flush()
break
elif key == 'e' :
sys.stdin.flush()
notfall()
ende()
else:
time.sleep(0.1)
GPIO.output(ROT, True)
GPIO.output(GELB, False)
GPIO.output(GRUEN, False)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(0.5)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(0.5)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
Trefferaufnahme()
GPIO.output(ROT, True)
GPIO.output(GELB, False)
GPIO.output(GRUEN, False)
GPIO.output(AB, False)
GPIO.output(CD, True)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(0.5)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(10)
GPIO.output(ROT, False)
GPIO.output(GELB, False)
GPIO.output(GRUEN, True)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
for g in range(900):
key = inkey()
if key == 's' :
sys.stdin.flush()
break
elif key == 'e' :
sys.stdin.flush()
notfall()
ende()
else:
time.sleep(0.1)
GPIO.output(GRUEN, False)
GPIO.output(ROT, False)
GPIO.output(GELB, True)
for g in range(300):
key = inkey()
if key == 's' :
sys.stdin.flush()
break
elif key == 'e' :
sys.stdin.flush()
notfall()
ende()
else:
time.sleep(0.1)
GPIO.output(ROT, True)
GPIO.output(GELB, False)
GPIO.output(GRUEN, False)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(0.5)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
GPIO.output(AB, True)
GPIO.output(CD, False)
time.sleep(20)
GPIO.output(ROT, False)
GPIO.output(GELB, False)
GPIO.output(GRUEN, True)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
for g in range(900):
key = inkey()
if key == 's' :
sys.stdin.flush()
break
elif key == 'e' :
sys.stdin.flush()
notfall()
ende()
else:
time.sleep(0.1)
GPIO.output(GRUEN, False)
GPIO.output(ROT, False)
GPIO.output(GELB, True)
for g in range(300):
key = inkey()
if key == 's' :
sys.stdin.flush()
break
elif key == 'e' :
sys.stdin.flush()
notfall()
ende()
else:
time.sleep(0.1)
GPIO.output(ROT, True)
GPIO.output(GELB, False)
GPIO.output(GRUEN, False)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(0.5)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(0.5)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
Trefferaufnahme()
def umschalten4():
GPIO.output(ROT, True)
GPIO.output(GELB, False)
GPIO.output(GRUEN, False)
GPIO.output(AB, True)
GPIO.output(CD, False)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(0.5)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(10)
GPIO.output(ROT, False)
GPIO.output(GELB, False)
GPIO.output(GRUEN, True)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
for g in range(2100):
key = inkey()
if key == 's' :
sys.stdin.flush()
break
elif key == 'e' :
sys.stdin.flush()
notfall()
ende()
else:
time.sleep(0.1)
GPIO.output(GRUEN, False)
GPIO.output(ROT, False)
GPIO.output(GELB, True)
for g in range(300):
key = inkey()
if key == 's' :
sys.stdin.flush()
break
elif key == 'e' :
sys.stdin.flush()
notfall()
ende()
else:
time.sleep(0.1)
GPIO.output(ROT, True)
GPIO.output(GELB, False)
GPIO.output(GRUEN, False)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(0.5)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
GPIO.output(AB, False)
GPIO.output(CD, True)
time.sleep(20)
GPIO.output(ROT, False)
GPIO.output(GELB, False)
GPIO.output(GRUEN, True)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
for g in range(2100):
key = inkey()
if key == 's' :
sys.stdin.flush()
break
elif key == 'e' :
sys.stdin.flush()
notfall()
ende()
else:
time.sleep(0.1)
GPIO.output(GRUEN, False)
GPIO.output(ROT, False)
GPIO.output(GELB, True)
for g in range(300):
key = inkey()
if key == 's' :
sys.stdin.flush()
break
elif key == 'e' :
sys.stdin.flush()
notfall()
ende()
else:
time.sleep(0.1)
GPIO.output(ROT, True)
GPIO.output(GELB, False)
GPIO.output(GRUEN, False)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(0.5)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(0.5)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
Trefferaufnahme()
GPIO.output(ROT, True)
GPIO.output(GELB, False)
GPIO.output(GRUEN, False)
GPIO.output(AB, False)
GPIO.output(CD, True)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(0.5)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(10)
GPIO.output(ROT, False)
GPIO.output(GELB, False)
GPIO.output(GRUEN, True)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
for g in range(2100):
key = inkey()
if key == 's' :
sys.stdin.flush()
break
elif key == 'e' :
sys.stdin.flush()
notfall()
ende()
else:
time.sleep(0.1)
GPIO.output(GRUEN, False)
GPIO.output(ROT, False)
GPIO.output(GELB, True)
for g in range(300):
key = inkey()
if key == 's' :
sys.stdin.flush()
break
elif key == 'e' :
sys.stdin.flush()
notfall()
ende()
else:
time.sleep(0.1)
GPIO.output(ROT, True)
GPIO.output(GELB, False)
GPIO.output(GRUEN, False)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(0.5)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
GPIO.output(AB, True)
GPIO.output(CD, False)
time.sleep(20)
GPIO.output(ROT, False)
GPIO.output(GELB, False)
GPIO.output(GRUEN, True)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
for g in range(2100):
key = inkey()
if key == 's' :
sys.stdin.flush()
break
elif key == 'e' :
sys.stdin.flush()
notfall()
ende()
else:
time.sleep(0.1)
GPIO.output(GRUEN, False)
GPIO.output(ROT, False)
GPIO.output(GELB, True)
for g in range(300):
key = inkey()
if key == 's' :
sys.stdin.flush()
break
elif key == 'e' :
sys.stdin.flush()
notfall()
ende()
else:
time.sleep(0.1)
GPIO.output(ROT, True)
GPIO.output(GELB, False)
GPIO.output(GRUEN, False)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(0.5)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
time.sleep(0.5)
GPIO.output(Hupe, True)
time.sleep(0.5)
GPIO.output(Hupe, False)
Trefferaufnahme()
def start2():
for d in range(6):
umschalten2()
def start4():
for d in range(6):
umschalten4()
#Startabfrage (Menu)
print ("2 = 2 Minuten \n")
print ("4 = 4 Minuten \n")
print ("e = Notfall \n")
print ("s = Schuetzen fertig \n")
print ("t = Trefferaufnahme fertig \n")
print ("l = Lichtschalter \n")
while 1:
key = inkey()
if key in ['2','4','e','l']:
if key == '2':
sys.stdin.flush()
start2()
elif key == '4':
sys.stdin.flush()
start4()
elif key == 'e':
sys.stdin.flush()
notfall()
ende()
elif key == 'l':
sys.stdin.flush()
if l == False:
l = True
Lichtan()
else:
sys.stdin.flush()
l = False
Lichtaus()
else:
time.sleep(0.2)
Hiermit kann mit e der Notfallmodus ausgelöst werden und das Programm sauber beendet werden, während sie Ampel grün oder gelb ist.
Mein Problem ist im Moment nur das in der ersten umschalten2() -> in range Schleife nicht automatisch auf den else Zweig gesprungen wird, ohne das eine Taste gedrückt wird.
Ursprünglich war mein gedanke, das bei nichtdrücken einer Taste nur 0.1 Sec. gewartet wird bis der Counter der in range Schleife weiter zählt.
Meine Frage also: Wie bekomm ich ein weiterzählen, ohne TAstendruck nach 0.1 Sekunden hin?