Hallo Leute,
ich habe ein kleines Problem und hoffe ihr könnt mir erklären wie dieses Problem zustande kommt bzw wie ich es beseitigen kann.
Unten seht ihr meinen Quellcode (nicht besonders hübsch aber er funktioniert #Anfänger
).
Mein Problem besteht darin, dass die Tasterzustände (Zeile 31 und 34 im Code) unterschiedlich schnell abgefragt werden.
Der Zustand des Geldrückgabetasters (Zeile 82) wird sofort erkannt nachdem ich den Taster drücke. Der Zustand des "JA"Tasters ( Zeile 139 und 188) wird allerdings erst erkannt, sofern ich den Taster gefühlt 1 Sek. gedrückt halte?
Verschaltet sind beide Taster gleich und auch wenn ich die Tasterbelegung gegeneinander tausche wandert das Fehlerbild mit. Meine Vermutung geht dahin, dass der "JA Taster" etwas verschachtelt im Programm auftaucht und deshalb der Tasterstatus verzögert abgerufen wird?
Könnt ihr das irgendwie bestätigen und mir erklären wie ich das umgehen kann?
Vielen Dank im Voraus.
from time import sleep
import lcddriver
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM) # GPIO-Nummern für Variablenliste
GPIO.setwarnings(False)
display = lcddriver.lcd()
###Servo_Geld_in_Tresor
servo_1 = 23
GPIO.setup(servo_1, GPIO.OUT)
servo_1 = GPIO.PWM(servo_1, 50) # GPIO 23 als PWM mit 50Hz
servo_1.start(2.5) # Initialisierung
servo_1.ChangeDutyCycle(0)
###Servo_Geldrückgabe
servo_2 = 24
GPIO.setup(servo_2, GPIO.OUT)
servo_2 = GPIO.PWM(servo_2, 50) # GPIO 24 als PWM mit 50Hz
servo_2.start(2.5) # Initialisierung
servo_2.ChangeDutyCycle(0)
###Servo_Wechselgeld
servo_3 = 4
GPIO.setup(servo_3, GPIO.OUT)
servo_3 = GPIO.PWM(servo_3, 50) # GPIO 4 als PWM mit 50Hz
servo_3.start(2.5) # Initialisierung
servo_3.ChangeDutyCycle(0)
#Taster JA
GPIO.setup(25, GPIO.IN)
#Taster Geldrückgabe/Abbruch
GPIO.setup(8, GPIO.IN)
#variablenliste muenzen
ct10 = 0
ct20 = 1
ct50 = 2
eur1 = 3
Muenzen=[21,20,16,12]
GPIO.setup(Muenzen[ct10], GPIO.IN)
GPIO.setup(Muenzen[ct20], GPIO.IN)
GPIO.setup(Muenzen[ct50], GPIO.IN)
GPIO.setup(Muenzen[eur1], GPIO.IN)
#DC Motor 1_vorne
in1 = 27
in2 = 17
ena = 22
GPIO.setup(in1,GPIO.OUT)
GPIO.setup(in2,GPIO.OUT)
GPIO.setup(ena,GPIO.OUT)
GPIO.output(in1,GPIO.LOW)
GPIO.output(in2,GPIO.LOW)
#DC Motor 2_hinten
in3 = 19
in4 = 13
enb = 26
GPIO.setup(in3,GPIO.OUT)
GPIO.setup(in4,GPIO.OUT)
GPIO.setup(enb,GPIO.OUT)
GPIO.output(in3,GPIO.LOW)
GPIO.output(in4,GPIO.LOW)
zaehler = 0
try:
display.lcd_display_string(f" Bitte Muenzen ", 1)
display.lcd_display_string(f" einwerfen", 2)
while True:
if GPIO.input(8) == True: # Geldrückgabe oder Abbruch
print("Nein gedrückt")
time.sleep(1)
zaehler = zaehler - zaehler
display.lcd_display_string(f" Geldrueckgabe ", 1)
display.lcd_display_string(f" ", 2)
time.sleep(3)
####Servo_Geldrückgabe####
servo_2.ChangeDutyCycle(2.5)
time.sleep(2)
servo_2.ChangeDutyCycle(7.5) # 7.5 =90° /2.5 =0° /12,5 =180°
time.sleep(2)
servo_2.ChangeDutyCycle(2.5)
servo_2.ChangeDutyCycle(0)
display.lcd_display_string(f" Bitte Muenzen ", 1)
display.lcd_display_string(f" einwerfen", 2)
####Münzenzähler######
if GPIO.input(Muenzen[ct10])==True:
time.sleep(1)
zaehler = zaehler + 10
print(f"10ct --> {zaehler}ct")
display.lcd_display_string(f"input: > 10ct <", 1)
display.lcd_display_string(f"credit: {zaehler}ct", 2)
if GPIO.input(Muenzen[ct20])==True:
time.sleep(1)
zaehler = zaehler + 20
print(f"20ct --> {zaehler}ct")
display.lcd_display_string(f"input: > 20ct <", 1)
display.lcd_display_string(f"credit: {zaehler}ct", 2)
if GPIO.input(Muenzen[ct50])==True:
time.sleep(1)
zaehler = zaehler + 50
print(f"50ct --> {zaehler}ct")
display.lcd_display_string(f"input: > 50ct <", 1)
display.lcd_display_string(f"credit: {zaehler}ct", 2)
if GPIO.input(Muenzen[eur1])==True:
time.sleep(1)
zaehler = zaehler + 100
display.lcd_clear()
print(f"1Eur --> {zaehler}ct")
display.lcd_display_string(f"input: > 1Eur <", 1)
display.lcd_display_string(f"credit: {zaehler}ct", 2)
if zaehler == 100:
time.sleep(3)
display.lcd_display_string(f" ausgeben ", 1)
display.lcd_display_string(f"ja? Nein?", 2)
if GPIO.input(25) == True: #JA Flaschen ausgeben
print("Ja gedrückt")
time.sleep(1)
zaehler = zaehler - zaehler
display.lcd_clear()
time.sleep(1)
display.lcd_display_string(f"Flaschenausgabe", 1)
display.lcd_display_string(f"erfolgt", 2)
####Servo_Geld_in_Tresor####
servo_1.ChangeDutyCycle(2.5)
time.sleep(2)
servo_1.ChangeDutyCycle(7.5) # 7.5 =90° /2.5 =0° /12,5 =180°
time.sleep(2)
servo_1.ChangeDutyCycle(2.5)
servo_1.ChangeDutyCycle(0)
###Linearantrieb_vorne####
GPIO.output(ena,GPIO.HIGH)
GPIO.output(in1,GPIO.HIGH)
GPIO.output(in2,GPIO.LOW)
time.sleep(3) #Einfahrdauer Antrieb 1 (vorne)
GPIO.output(in1,GPIO.LOW)
GPIO.output(in2,GPIO.HIGH)
time.sleep(3) #Ausfahrdauer Antrieb 1 (vorne)
GPIO.output(in1,GPIO.LOW)
GPIO.output(in2,GPIO.LOW)
# time.sleep(4)
###Linearantrieb_hinten####
GPIO.output(enb,GPIO.HIGH)
GPIO.output(in3,GPIO.HIGH)
GPIO.output(in4,GPIO.LOW)
time.sleep(3)
GPIO.output(in3,GPIO.LOW)
GPIO.output(in4,GPIO.HIGH)
time.sleep(3)
GPIO.output(in3,GPIO.LOW)
GPIO.output(in4,GPIO.LOW)
display.lcd_clear()
display.lcd_display_string(f" Bitte Muenzen ", 1)
display.lcd_display_string(f" einwerfen", 2)
if zaehler == 110:
time.sleep(3)
display.lcd_display_string(f" ausgeben ", 1)
display.lcd_display_string(f"ja? Nein?", 2)
if GPIO.input(25) == True: #JA Flaschen ausgeben
print("Ja gedrückt")
time.sleep(1)
zaehler = zaehler - zaehler
display.lcd_clear()
time.sleep(1)
display.lcd_display_string(f"Flaschenausgabe", 1)
display.lcd_display_string(f"erfolgt", 2)
####Servo_Geld_in_Tresor####
servo_1.ChangeDutyCycle(2.5)
time.sleep(2)
servo_1.ChangeDutyCycle(7.5) # 7.5 =90° /2.5 =0° /12,5 =180°
time.sleep(2)
servo_1.ChangeDutyCycle(2.5)
servo_1.ChangeDutyCycle(0)
####Servo_Wechselgeld####
servo_3.ChangeDutyCycle(2.5)
time.sleep(2)
servo_3.ChangeDutyCycle(7.5) # 7.5 =90° /2.5 =0° /12,5 =180°
time.sleep(2)
servo_3.ChangeDutyCycle(2.5)
servo_3.ChangeDutyCycle(0)
###Linearantrieb_vorne####
GPIO.output(ena,GPIO.HIGH)
GPIO.output(in1,GPIO.HIGH)
GPIO.output(in2,GPIO.LOW)
time.sleep(3) #Einfahrdauer Antrieb 1 (vorne)
GPIO.output(in1,GPIO.LOW)
GPIO.output(in2,GPIO.HIGH)
time.sleep(3) #Ausfahrdauer Antrieb 1 (vorne)
GPIO.output(in1,GPIO.LOW)
GPIO.output(in2,GPIO.LOW)
###Linearantrieb_hinten####
GPIO.output(enb,GPIO.HIGH)
GPIO.output(in3,GPIO.HIGH)
GPIO.output(in4,GPIO.LOW)
time.sleep(3)
GPIO.output(in3,GPIO.LOW)
GPIO.output(in4,GPIO.HIGH)
time.sleep(3)
GPIO.output(in3,GPIO.LOW)
GPIO.output(in4,GPIO.LOW)
display.lcd_clear()
display.lcd_display_string(f" Bitte Muenzen ", 1)
display.lcd_display_string(f" einwerfen", 2)
except KeyboardInterrupt:
GPIO.cleanup()
display.lcd_clear()
Display More