Seite 1 von 1

Variablen indizieren

Verfasst: Dienstag 26. Dezember 2017, 19:31
von bogo10
Hallo,
vorweg - ich bin Anfänger, hab ein paar Grundkenntnisse in Programmierung allgemein und sehr wenig in Python.
Ich hab ein LCD- Board mit 5 Tastern am Pi Zero W hängen und möchte prinzipiell folgendes machen:

Code: Alles auswählen

for i in (11, 12, 13, 14, 15):
    Tast(i) = pca.digitalRead(i)
    time.sleep(3)


Soll heißen: die 5 Taster (an den Pins 11-15) werden nacheinander abgefragt und das Ergebnis in den Variablen Tast11- Tast15 gespeichert.
Das geht so natürlich nicht. Aber irgendwie sollte das doch möglich sein? Ich ahne schreckliches von wegen Array oder so.
Für einen kräftigen Schubs in die richtige Richtung wäre ich dankbar.

Re: Variablen indizieren

Verfasst: Dienstag 26. Dezember 2017, 19:47
von Sirius3
@bogo10: Du kannst die Werte entweder in einer Liste oder einem Wörterbuch speichern:

Code: Alles auswählen

tasten = {}
for i in (11, 12, 13, 14, 15):
    tasten[i] = pca.digitalRead(i)

Re: Variablen indizieren

Verfasst: Mittwoch 27. Dezember 2017, 07:34
von snafu
bogo10 hat geschrieben:Ich ahne schreckliches von wegen Array oder so.
Ja, genau. Eine Liste oder ein Wörterbuch sind die üblichen Datentypen, die man hierfür benutzt. Wegen deiner "Horrorvorstellung" solltest du dir einfach im Klaren sein, dass irgendwann sozusagen der Schraubendreher nicht mehr ausreicht und man sich dann eben mal mit der Bohrmaschine vertraut machen muss... ;)

Re: Variablen indizieren

Verfasst: Mittwoch 27. Dezember 2017, 11:52
von bogo10
Danke. Da werd ich mir wohl oder übel mal eine Bohrmaschine kaufen müssen :? bzw. mich mal durch die Doku wühlen.

Re: Variablen indizieren

Verfasst: Mittwoch 27. Dezember 2017, 13:43
von snafu
Hier kann ich immer wieder die deutsche Übersetzung des offiziellen Python-Tutorials empfehlen, welches gut die benötigten Grundlagen vermittelt. In Kapitel 5.5 kommen Wörterbücher (Dictionaries) zur Sprache.

Re: Variablen indizieren

Verfasst: Mittwoch 27. Dezember 2017, 14:03
von bogo10
So, jetzt scheint es zu funktionieren:

Code: Alles auswählen

while True:
    Taster = []
    Zustand = []
    for i in (11, 12, 13, 14, 15):
        Taster.append("Taster" + str(i-10))
        tast = pca.digitalRead(i)
        Zustand.append(tast)
    Ergebnis = zip(Taster, Zustand)
    print(Ergebnis)
    Ergebnis_dict = dict(Ergebnis)
    if not (Ergebnis_dict["Taster1"]): # Taster ist betätigt -> 0
        print("Handsteuerung")
    time.sleep(3)
Aber gefallen tuts mir nicht. Ich hab da bestimmt ein paar Pirouetten gedreht. Verbesserungsvorschläge?

Re: Variablen indizieren

Verfasst: Mittwoch 27. Dezember 2017, 15:16
von kbr
So wie ich Deinen Code lese, wird der Text "Handsteuerung" immer dann ausgegeben, wenn der Aufruf von 'pca.digitalRead(i)' mit i = 11 etwas zurück gibt, das im boolschen Kontext False ergibt. Ja, das geht auch einfacher.

Re: Variablen indizieren

Verfasst: Mittwoch 27. Dezember 2017, 16:10
von Sirius3
@bogo10: wenn Listen gar nicht Dein gewünschtes Format sind, dann erzeug doch gleich das, was Du haben möchtest:

Code: Alles auswählen

TASTER_PINS = {
    "Taster 1": 11,
    "oben links": 12,
    "Alarmknopf": 13,
    "noch ein Schalter": 14,
    "der letzte": 15,
}

while True:
    zustand = {
        name: pca.digitalRead(pin)
        for name, pin in TASTER_PINS.items()
    }
    print(zustand)
    if not zustand["Taster 1"]:
        print("Handsteuerung")
    time.sleep(3)

Re: Variablen indizieren

Verfasst: Mittwoch 27. Dezember 2017, 16:42
von bogo10
@kbr Das ist nur ein Beispiel, danach kommen noch paar Zeilen .... Und ja, so wars gedacht.

@Sirius3 Danke, das sieht doch schon viel aufgeräumter und strukturierter aus als bei mir. Ich hatte nur den Umweg über die Listen vor den Augen. Da muß ich wohl noch bischen üben.

@snafu Ja das ist ständig offen. Aber Erfahrung und viel Programmierpraxis ist unbezahlbar :(

Allen danke, das ihr eure Zeit geopfert habt.