Python-Skript für GPIOs parallel laufen lassen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
dirk1312
User
Beiträge: 13
Registriert: Dienstag 1. November 2016, 18:16

Mittwoch 23. Mai 2018, 16:53

Sehr cool, danke! Deine Änderungsvorschläge mit Partials und die Namenskonvention habe ich vorgenommen. Jetzt klappt's auch mit der Fehler-Meldung ohne einen Warning zu erzeugen. So sieht das Skript jetzt aus:

Code: Alles auswählen

#!/usr/bin/python
import RPi.GPIO as gpio
from functools import partial

PINS     = [2, 3, 4, 9, 10]
CONTROLS = """Buchstaben drücken um Aktion auszuführen:
a) Öffnen Mauer-Kreis
b) Öffnen Bohnen-Kreis
c) Öffnen Apfelbaum-Kreis
d) Öffnen Beet-Kreis
e) Öffnen Nussbaum-Kreis

f) Schließen Mauer-Kreis
g) Schließen Bohnen-Kreis
h) Schließen Apfelbaum-Kreis
i) Schließen Beet-Kreis
j) Schließen Nussbaum-Kreis"""

def open(pin):
    gpio.output(pin, gpio.LOW)
    return 'Ventil an Pin ' + str(pin) + ' geöffnet'

def close(pin):
    gpio.output(pin, gpio.HIGH)
    return 'Ventil an Pin ' + str(pin) + ' geschlossen'
    
def help():
    return CONTROLS

def error():
    print ('FEHLER: Keine erlaubte Aktion ausgewählt.\n\n' + CONTROLS)

ACTIONS = {
    'a': partial(open, 2), 
    'b': partial(open, 3), 
    'c': partial(open, 4), 
    'd': partial(open, 9), 
    'e': partial(open, 10), 
    'f': partial(close, 2), 
    'g': partial(close, 3), 
    'h': partial(close, 4), 
    'i': partial(close, 9), 
    'j': partial(close, 10), 
    'help': help
}

print(CONTROLS)

def main(prompt):
    try:
        gpio.setmode(gpio.BCM)
        gpio.setup(PINS, gpio.OUT, initial=gpio.HIGH) 

        while True:
            argument = raw_input(prompt)

            func = ACTIONS.get(argument, error)
            # Execute the function
            print func()
    except KeyboardInterrupt:
        pass
    finally:
        gpio.cleanup()  # this ensures a clean exit
        print('QUIT')

if __name__ == '__main__':
    main('Action? ')
Vielen Dank nochmals und viele Grüße

Dirk
Antworten