Ich hab mal nen größeres Problem....Es geht darum das ich einerseits einen servo um 80° drehen will wenn ich einen Button drückeUnd andererseits wenn ich an einem keypad den richtigen Code eingebe(8614).So jz. Habe ich schon einen code für die abfrage des keypads es hat auch alles funktioniert bis ich den Button zum öffnen einfügen wollte. Später soll noch ein Button dazu kommen der den Servo nach seiner ersten Drehung aufhält bis der Button einmal losgelassen wurde und dann wieder gerückt wurde. Es geht um eine Türversperrung ;D.
Hier der chaos-code :
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(14, GPIO.OUT) ## rote led
GPIO.setup(15, GPIO.OUT) ## gruene led
GPIO.setup(17, GPIO.IN) ## innerer oeffnungs button
GPIO.setup(9,GPIO.IN) ## Button der detektiert das die tuer geoeffnet wurde
eingabe_button = 0 ## eingabe die durch druecken des buttons erfolgt
schluessel = [8,6,1,4] ## code fuer das keypad
eingabe = [0,0,0,0] ## eingabe die durch druecken der ziffern auf dem keypad erfolgt
y= 0
def keypad(eingabe, GPIO): ## Definition der Eingabe des Keypads
##eingabe = [0,0,0,0]
[i,j,k] = [0,0,0]
MATRIX = [ [1,2,3], ##Aufbau des Keypads
[4,5,6],
[7,8,9],
['*',0,'#'] ]
ROW = [11,7,8,25] ##Definieren der Zeilenpins am GPIO
COL = [22,24,18] ##Definieren der Spaltenpins am GPIO
ev = 1
for j in range(3):
GPIO.setup(COL[j], GPIO.OUT) ##setup der Spaltenpins als output
GPIO.output(COL[j], 1) ##Output setzten auf 1 = HIGH = True = 3.3v
for i in range(4):
GPIO.setup(ROW, GPIO.IN, pull_up_down = GPIO.PUD_UP) ##setup der Zeilenpins
while(ev == 1):
for j in range(3):
GPIO.output(COL[j],0)
for i in range(4):
if k <= 3:
if GPIO.input(ROW) == 0:
eingabe[k] = MATRIX[j]
print (MATRIX[j])
print ('Eingabefeld: ', eingabe)
print ("k : ", k)
k = k+1
while(GPIO.input(ROW) == 0):
pass
time.sleep(0.2)
else:
ev = 0
## else:
## while(GPIO.input(ROW) == 0):
## pass
## k = 0
GPIO.output(COL[j],1)
return eingabe ##hier weitermachen
def openbutton(eingabe_button, GPIO): ## Definition der Eingabe des openbuttons
obutton = GPIO.input(17)
if obutton == False:
print('button zum oeffnen wurde gedrueckt')
eingabe_button = 1
print("eingabe_button", eingabe_button)
while obutton == False:
obutton = GPIO.input(17)
pass
return eingabe_button
def tuer_oeffnen(GPIO):
GPIO.setup(4,GPIO.OUT)
p = GPIO.PWM(4,50)
p.stop()
b = 1
GPIO.setup(4,GPIO.OUT)
p = GPIO.PWM(4,50)
if b == 1:
p.start(2.5)
p.ChangeDutyCycle(2.5)
time.sleep(1)
p.stop()
##time.sleep(10)
taufzu = GPIO.input(9)
while obutton == False:
print('Tuer zu')
# while obutton == True:
# obutton = GPIO.input(9)
# print('Tuer auf')
# pass
try:
while(True):
eingabe = keypad(eingabe, GPIO) ##rueckgabe der variablen aus function keypad
print ("eingabe : ", eingabe)
eingabe_button = openbutton(eingabe_button, GPIO)
print ("eingabe_button : ", eingabe_button)
if eingabe == schluessel:
print ("eingabe", eingabe)
print ("schluessel", schluessel)
print ("hurra")
eingabe = [0,0,0,0]
tuer_oeffnen(GPIO)
elif eingabe != schluessel:
print ("scheisse")
##eingabe = [0,0,0,0]
print ("eingabe", eingabe)
elif eingabe_button == 1:
eingabe_button = 0
print ("eingabe_button : ", eingabe_button)
except KeyboardInterrupt:
#p.stop()
GPIO.cleanup() #stellt alle pins auf standard