Hallo Gemeinde,
ich habe hier ein Python Programm welches nicht so läuft, wie ich es will.
Eine Eisenbahn mit zwei Endschalter und 2 Vorabschalter für die Geschwindigkeitsreduzierung.
GPIO.in(26) ist Endlage hinten
GPIO.in(6) ist Endlage vorne
GPIO.in (5) ist Umschaltung schnell / langsam
Das Programm habe ich irgendwo abgekupfert und auf meine Bedürfnisse angepasst.
Mit den Tasten S (stop), R (run), F (vorwärts), B (Rückwärts), L (langsam) M (mittel) und H (schnell)
funktioniert es. Aber die Abschaltung bzw Umschaltung geht nicht.
Das Programm:
import RPi.GPIO as GPIO
from time import sleep
in1 = 17 #24
in2 = 27 #23
en = 22 #25
SL = 5
Stop_V = 6
Stop_R = 26
temp1=1
GPIO.setmode(GPIO.BCM)
GPIO.setup(in1,GPIO.OUT)
GPIO.setup(in2,GPIO.OUT)
GPIO.setup(en,GPIO.OUT)
GPIO.output(in1,GPIO.LOW)
GPIO.output(in2,GPIO.LOW)
GPIO.setup(6,GPIO.IN)
GPIO.setup(26,GPIO.IN,pull_up_down = GPIO.PUD_DOWN)
GPIO.setup(5,GPIO.IN,pull_up_down = GPIO.PUD_DOWN)
p=GPIO.PWM(en,1000)
p.start(25)
print("\n")
print("The default speed & direction of motor is LOW & Forward.....")
print("r-run s-stop f-forward b-backward l-low m-medium h-high e-exit")
print("\n")
while(1):
x=raw_input()
if x=='r':
print("run")
if(temp1==1):
GPIO.output(in1,GPIO.HIGH)
GPIO.output(in2,GPIO.LOW)
print("forward")
x='z'
else:
GPIO.output(in1,GPIO.LOW)
GPIO.output(in2,GPIO.HIGH)
print("backward")
x='z'
if x=='s' or (GPIO.input(6) == GPIO.HIGH) or (GPIO.input(26) == GPIO.HIGH):
print("stop")
print (GPIO.input(6))
print (GPIO.input(26))
GPIO.output(in1,GPIO.LOW)
GPIO.output(in2,GPIO.LOW)
x='z'
elif x=='f' and GPIO.input(6) == GPIO.LOW:
print("forward")
type (GPIO.input(6))
GPIO.output(in1,GPIO.HIGH)
GPIO.output(in2,GPIO.LOW)
temp1=1
x='z'
elif x=='b' and (GPIO.input(26) == GPIO.LOW):
print("backward")
type (GPIO.input(26))
GPIO.output(in1,GPIO.LOW)
GPIO.output(in2,GPIO.HIGH)
temp1=0
x='z'
elif x=='l' or (GPIO.input(5) == GPIO.HIGH):
print("low")
type (GPIO.input(5))
p.ChangeDutyCycle(18)
x='z'
elif x=='m':
print("medium")
p.ChangeDutyCycle(30)
x='z'
elif x=='h':
print("high")
p.ChangeDutyCycle(50)
x='z'
elif x=='e':
GPIO.cleanup()
break
Die Eingänge werden wohl zum falschen Zeitpunkt oder gar nicht gelesen.
Hardwaremässig habe ich alles in Ordnung.
Zu meinen Magnetschalter habe ich parallel Widerstände von 100M geschaltet.
Wenn ich mit pigs die Eingänge auslese, kommen sie auch.
Was ist falsch am Programm?