Paralele Abfrage zweier Buttons (GPIO)

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • 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




Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!