Seite 1 von 2

Reihenfolge der Abfrag sicherstellen.

Verfasst: Montag 27. Mai 2013, 16:42
von Jakob
Ich bitte um Hilfe.

Es geht um die GPIO Pins des RaspberryPis.

Code: Alles auswählen

import RPi.GPIO as GPIO
from time import sleep

IN = 21
OUT = 23

GPIO.setmode(GPIO.BOARD)
GPIO.setup(OUT, GPIO.OUT)
GPIO.setup(IN, GPIO.IN)

GPIO.output(OUT, True)

try:
    while True: 
        
        if (GPIO.output(OUT) == True) and (GPIO.input(IN) == True):
            (GPIO.output(OUT), False) 
                
        elif (GPIO.output(OUT), == False) and (GPIO.input(IN) == True):
            (GPIO.output(OUT), True)
            
except KeyboardInterrupt:
    pass
GPIO.cleanup()
Es sollte die ganze Zeit die zwei Ifs abgefragt werden. Und zwar ABABAB und nicht AABBABABB
Das wird aber nicht gemacht sonder eigentlich garnichts.

Re: Python Anfänger^^.

Verfasst: Montag 27. Mai 2013, 16:55
von BlackJack
@Jakob: Du solltest als erstes mal das ``try``/``except`` entfernen was verhindert, dass Du irgendeine Fehlermeldung siehst, wenn da etwas im ``try``-Block eine Ausnahme auslöst.

Re: Python Anfänger^^.

Verfasst: Montag 27. Mai 2013, 16:58
von Jakob
Danke für die Rückmeldung.

Naja das war eigentlich so gedacht das wenn ich das Programm mit Strg+C abbreche alle Pins wieder auf standart gesetzs werden.

Re: Python Anfänger^^.

Verfasst: Montag 27. Mai 2013, 17:05
von cofi
Dann solltest du das blanke ``except`` in ``except KeyboardInterrupt`` aendern, und im Koerper dieses ``except``s dann alles auf Standard setzen.

Endlosschleifen bekommt man mit ``while True`` uebrigens einfacher hin.

Re: Python Anfänger^^.

Verfasst: Montag 27. Mai 2013, 17:08
von Jakob
Ahh, Stimmt das klingt aufjedenfall Sinnvoller.

Wie ist das mit dem ´s´ im körper ( was ist damit gemeint? ) ´except´ gemacht ??

Re: Python Anfängercode.

Verfasst: Montag 27. Mai 2013, 17:53
von Jakob
Gibt es eigentlich einen Befehl mit dem ich im code an eine Stelle weiter oben springen kann? Sowas ähnliches wie Goto im microcontroller bereich.

Re: Anfänger hätte gerne Hilfe. Keine Hausaufgaben!

Verfasst: Montag 27. Mai 2013, 18:30
von BlackJack
@Jakob: Das will man nicht. Wenn man etwas wiederholen möchte, dann gibt es Schleifen.

Re: Anfänger hätte gerne Hilfe. Keine Hausaufgaben!

Verfasst: Montag 27. Mai 2013, 18:34
von Jakob
@BlackJack Ok dann steig ich da einfach grad nich durch ^^. Ich würde gerne einmal Abfrage A und darauf Aufgabe A ablaufen lassen und dann Abfrage B und Aufgabe B ablaufenlasse. Und das natürlich endlos. Wie wäre sowas möglich. Was spricht gegen Goto befehle ?

Re: Anfänger hätte gerne Hilfe. Keine Hausaufgaben!

Verfasst: Montag 27. Mai 2013, 18:37
von webspider

Code: Alles auswählen

while True:
    if A:
        doA()
    elif B:
        doB()

Re: Anfänger hätte gerne Hilfe. Keine Hausaufgaben!

Verfasst: Montag 27. Mai 2013, 18:39
von Jakob
@webspider so hab ichs eigentlich aufgebaut oder ?

Re: Anfänger hätte gerne Hilfe. Keine Hausaufgaben!

Verfasst: Montag 27. Mai 2013, 18:50
von BlackJack
@Jakob: Goto führt zu undurchsichtigem Code bei dem man den Programmfluss irgendwann nur noch sehr schwer nachvollziehen kann.

Wenn Dein Code so aufgebaut ist, wo ist dann das Problem was Du denkst mit Goto lösen zu können?

Re: Anfänger hätte gerne Hilfe. Keine Hausaufgaben!

Verfasst: Montag 27. Mai 2013, 18:54
von Jakob
@BlackJack

Dann könnt ich sicherstellen das die Reihenfolge immer A B A B A B ist und zB. nicht A BB AA B A

Re: Reihenfolge der Abfrag sicherstellen.

Verfasst: Montag 27. Mai 2013, 19:05
von Jakob
ich checks einfach nich :)

wenn ich einen taster betätige soll aufgabe a ausgeführt werden

wenn ich den taster ein zweitesmal betätige soll aufgabe b ausgeführt werden (und nicht aufgabe a)

das problem ist wenn ich den taster gedrückt halte werden beide aufgaben "blinkend" im wechsel ausgeführt was nicht so gut ist.

Re: Reihenfolge der Abfrag sicherstellen.

Verfasst: Montag 27. Mai 2013, 19:14
von Jakob
TypeError: function takes exactly 2 arguments (1 given)

also tut mir leid aber heut check ich irgwie garnix was sagt mir den bitte dieser fehler?

Re: Reihenfolge der Abfrag sicherstellen.

Verfasst: Montag 27. Mai 2013, 19:35
von Jakob
Danke für alle die sich das mal angeschaut haben.
Bin heut anscheinend nicht ganz auf der Höhe meine Lösung:

Code: Alles auswählen

import RPi.GPIO as GPIO
from time import sleep

IN = 21
OUT = 23

GPIO.setmode(GPIO.BOARD)
GPIO.setup(OUT, GPIO.OUT)
GPIO.setup(IN, GPIO.IN)

GPIO.output(OUT, True)

try:
    while True: 
        if(GPIO.input(IN) == True):
            if(GPIO.output(OUT) == True):
                GPIO.output(OUT, False)
                sleep(0.2)
            else:
                GPIO.output(OUT, True)
                sleep(0.2)
            
except KeyboardInterrupt:
    pass
GPIO.cleanup() 

Re: Reihenfolge der Abfrag sicherstellen.

Verfasst: Montag 27. Mai 2013, 19:38
von BlackJack
@Jakob: Jetzt könntest Du noch die unnötigen Klammern um die Bedingungen bei den ``if``\s weglassen und aufhören explizit mit den literalen Wahrheitswerten, also hier mit `True` zu vergleichen.

Edit: Und das innere ``if``/``else`` kann man auch noch los werden:

Code: Alles auswählen

import RPi.GPIO as GPIO
from time import sleep

IN = 21
OUT = 23


def main():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(OUT, GPIO.OUT)
    GPIO.setup(IN, GPIO.IN)
    try:
        GPIO.output(OUT, True)
        while True: 
            if GPIO.input(IN):
                GPIO.output(OUT, not GPIO.input(OUT))
                sleep(0.2)
    except KeyboardInterrupt:
        pass
    finally:
        GPIO.cleanup()


if __name__ == '__main__':
    main()

Re: Reihenfolge der Abfrag sicherstellen.

Verfasst: Montag 27. Mai 2013, 19:54
von Jakob
wow klass DANKE :P

Re: Reihenfolge der Abfrag sicherstellen.

Verfasst: Montag 27. Mai 2013, 19:55
von Jakob
aber was ist wenn der GPIO OUT pin auf false steht??
und was bedeuten die letzten beiden zeilen??

Re: Reihenfolge der Abfrag sicherstellen.

Verfasst: Montag 27. Mai 2013, 20:00
von Jakob
also wenn ich das abfrage frage ich ja schon ob es True ist doer ? das meintest du mit den vielen True?

Re: Reihenfolge der Abfrag sicherstellen.

Verfasst: Montag 27. Mai 2013, 20:19
von Jakob
achso er setzt es immer auf das auf das er nicht ist, oder?