Problem bei If Schleife

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Schlangenmensch
User
Beiträge: 34
Registriert: Freitag 18. Februar 2022, 10:13

Hallo, ich stehe mal wieder etwas auf dem Schlauch.

ich habe folgenden Code erstellt, und will damit erreichen, dass wenn der Sensor 5 mall hintereinander den Wert kleiner als 3000 liest, das Programm für 10 Sekunden pausiert, die Variable auf 0 setzt und dann normal weiterläuft. Das Problem ist, dass ich mit meinen if Anweisungen das Programm aufschaukle und jeder Eingang am Sensor hochgezählt wird und nicht die die direkt aufeinander folgen.

Könnt Ihr mir einen Tip geben?

Code: Alles auswählen

if MOVE.read_u16() < 30000: #Freq sollte vorher getestet werden.
            
            print("1")
            LED.value(1)
            
            
        
            file = open("red.txt", "a")
            file.write(str(hr) + ":" + str(m) + ":" + str(s) + " : "  )
            file.write(str(Y) + ":" + str(M) + ":" + str(D) + " : " + "\n" )
            file.close()
            i = i + 1
            
             
            sleep(1)
            
            if i >= 5:
                i = i - 5
                sleep(10)
                
            
            
            
       
            
               if MOVE.read_u16() > 30000: #Freq sollte vorher getestet werden.
                i = i - 1
                print("0")
                LED.value(0)
                
            
            
                sleep(1)
Schlangenmensch
User
Beiträge: 34
Registriert: Freitag 18. Februar 2022, 10:13

Sorry, hätte selber drauf kommen können. i = 0 :oops:
Schlangenmensch
User
Beiträge: 34
Registriert: Freitag 18. Februar 2022, 10:13

....und an das with Statement hätte ich auch noch denken können.
Sirius3
User
Beiträge: 15984
Registriert: Sonntag 21. Oktober 2012, 17:20

Eingerückt wird immer mit 4 Leerzeichen pro Eben, da stimmt also was bei Dir nicht.
Leerzeilen sollen die Lesbarkeit erhöhen, bei einzelnen Zeilen in großer Leere hindert mich das aber am Lesen.
Dateien öffnet man mit with. Einbuchstabige Variablennamen sind nichts-sagend, hr, m, s, Y,M und D scheinen wohl irgendwas mit einem Datum zu tun haben. Dafür gibt es in Python datetime, das das Datum auch richtig formatiert ausgibt. Irgendwelche Zahlen per : getrennt ist keine Form, wie man ein Datum formatieren sollte.
Variablennamen werden komplett klein geschrieben. GROSS ist für Konstanten reserviert, Du hast aber keine Konstanten.
Wenn Du 5 aufeinanderfolgende Werte < 3000 haben willst, dann mußt Du wohl bei >=3000 i gleich auf 0 setzen und nicht nur um eins verringern.
Wenn man zweimal den Sensor ausliest, dann hat man zwei unabhängige Werte.

Code: Alles auswählen

frequency = MOVE.read_u16()
if frequency < 30000:
    print("1")
    LED.value(1)

    with open("red.txt", "a") as file:
        file.write(f"{some_date:%Y-%m-%d H:%M:%S} : \n")

    i = i + 1
    if i >= 5:
        i = 0
        sleep(9)
elif frequency > 30000:
    print("0")
    LED.value(0)
    i = 0
sleep(1)
Benutzeravatar
ThomasL
User
Beiträge: 1221
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

(anknüpfend an den Post vor Sirius)

....und daran das es keine if-Schleifen gibt. ;-)
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Schlangenmensch
User
Beiträge: 34
Registriert: Freitag 18. Februar 2022, 10:13

Danke Euch für die Antworten und bitte um Verzeihung, das ich nicht auf das Einrücken geachtet habe und mal wieder das with Statement weggelassen habe obwohl ich schon mehrmals darauf hingewiesen worden bin.

Ich hoffe das ich dass bald mal verinnerlicht habe.

Wünsche Euch ein schönes Wochenende.
Antworten