Seite 1 von 1

Programm unterbrechen und bei bestimmter Bedingung weiterlaufen lassen.

Verfasst: Montag 6. Juni 2022, 11:32
von Schlangenmensch
Hallo,
ich möchte an einem Ferraris-Stromzähler die Umdrehungen der "Zählerscheibe" mitschreiben. Um ein Permanentes schreiben bei "if MOVE.read_u16() > 3500:" zu vermeiden, würde ich gerne eine Bedingung einbauen, die das Programm erst wieder weiterlaufen lässt, wenn sich "if MOVE.read_u16() > 3500:" ändert.

Mir scheint "break" der falsche Ansatz zu sein und würde mich über eure Tips freuen.

Code: Alles auswählen

from machine import ADC,Pin  #ADC0 an A0 von TCR5000 anschliessen.
from utime import sleep
from ds1302 import DS1302



MOVE = ADC(0)
LED = Pin(25,Pin.OUT)



ds =DS1302(Pin(18),Pin(17),Pin(16))

ds.date_time()



#ds.date_time([2022, 5, 2, 00, 12, 07, 00]) #auskommentieren
i = 0

while True:
    
        
    
        (Y,M,D,day,hr,m,s)=ds.date_time()


    
        if s < 10:
            s = "0" +str(s)

        if m < 10:
            m = "0" +str(m)
        
        if hr < 10:
            hr = "0" +str(hr)
        
        if D < 10:
            D = "0" +str(D)
        
        if M < 10:
            M = "0" +str(M)
        
        if Y < 10:
            Y = "0" +str(Y)
        
        
        

        
            
    
    
    
        if MOVE.read_u16() > 3500: #Freq sollte vorher getestet werden.
            i = i + 1
            print("1")
            LED.value(1)
            
            
        
            
            with open("red.txt", "a") as file:
                file.write(str(Y) + ":" + str(M) + ":" + str(D) +  " ; " )
                file.write(str(hr) + ":" + str(m) + ":" + str(s) + " ::: " + (str(i)) + "\n" )
                file.close()
              
            def pause():
                while True:
                    if Move.read_u16() < 3500:
                        
                        break
          
            
                
             
            sleep(2)
            
   #         if i >= 5:
    #            i = 0
     #           with open("red.txt", "a") as file:
      #              file.write("\n" + "Stillstand" + "\n" + "\n")
       #             file.close()
        #    
         #           sleep(10)
                
            
            
            
       
            
            #if MOVE.read_u16() < 3500: #Freq sollte vorher getestet werden.
             #   i = 0
              #  print("0")
               # LED.value(0)
                
            
            
            #sleep(2)
        

Re: Programm unterbrechen und bei bestimmter Bedingung weiterlaufen lassen.

Verfasst: Montag 6. Juni 2022, 11:41
von __deets__
Meine Guete, woher hast du denn diese Leerzeichenwueste? Das kann man ja kaum entziffern. Und bevor es jetzt wieder losgeht mit dem "wie ich meinen Code schreibe ist meine Sache, warum koennt ihr euch nicht auf die eigentliche Frage fokussiern": wir muessen den Code schon lesen koennen, damit wir ihn verstehen und verbessern koennen. Und letztlich profitierst davon auch du.

Deine Beschreibung ist ziemlich unklar, aber grundsaetzlich ist es schon richtig, mit while auf das eintreten der guewenschten Bedingung zu warten. Welche das genau ist kann ich nicht sagen, wie gesagt: zu unklar. Aber vor allem wuerde man auch gleich

Code: Alles auswählen

while bedingung_nicht_erfuellt():
    pass
schreiben, statt da nochmal ein if reinzuschnoerkeln, welches dann ein break benoetigt.

Das du "pause" nicht aufrufst ist dir klar? Sieht man vielleicht nicht so gut. Siehe oben.

Re: Programm unterbrechen und bei bestimmter Bedingung weiterlaufen lassen.

Verfasst: Montag 6. Juni 2022, 11:54
von Schlangenmensch
Sorry, ich stehe noch ganz am Anfang mit der Programmierung und habe das Tutorial auch noch nicht durchgearbeitet. Ich habe auch schon div. User zur Weißglut gebracht weil ich mich nicht an die Conventionen von Micropython halte. Ich habe leider immer nur wenig Zeit und bin zu ungeduldig um die Codes "ordentlich" zu schreiben. Ich gelobe Besserung.

Kann ich in micropython überhaupt break: verwenden?

Re: Programm unterbrechen und bei bestimmter Bedingung weiterlaufen lassen.

Verfasst: Montag 6. Juni 2022, 11:58
von __deets__
Die Besserung gelobst du ja schon eine ganze Weile...

Natuerlich kann micropython break. Wieso denkst du das koennte es nicht? Hast du verstanden, was ich dir geschrieben haben? Das du dein pause gar nicht benutzt? Wenn man das nicht aufruft, kann es auch nicht break benutzen.

Re: Programm unterbrechen und bei bestimmter Bedingung weiterlaufen lassen.

Verfasst: Montag 6. Juni 2022, 12:00
von Sirius3
Die vielen Leerzeilen machen den Code praktisch unlesbar. Auch Micropython kennt Stringformatierungen, die den Code stark vereinfacht.

Code: Alles auswählen

from machine import ADC, Pin  #ADC0 an A0 von TCR5000 anschliessen.
from utime import sleep
from ds1302 import DS1302

MOVE = ADC(0)
LED = Pin(25, Pin.OUT)

ds =DS1302(Pin(18), Pin(17), Pin(16))
# ds.date_time([2022, 5, 2, 00, 12, 07, 00])
i = 0
while True:
    if MOVE.read_u16() > 3500: #Freq sollte vorher getestet werden.
        i += 1
        print("1")
        LED.value(1)
            
        (Y, M, D, day, hr, m, s) = ds.date_time()
        with open("red.txt", "a") as file:
            file.write(f"{Y:02d}:{M:02d}:{D:02d} ; {hr:02d}:{m:02d}:{s:02d} ::: {i}\n")
        sleep(2)
        while MOVE.read_u16() < 3500:
            pass

Re: Programm unterbrechen und bei bestimmter Bedingung weiterlaufen lassen.

Verfasst: Montag 6. Juni 2022, 12:03
von Schlangenmensch
Das mit break frage ich nur weil micropython ja eingeschränkte Funktionen gegenüber Python hat. Ich hatte da auch mal wegen utime und sleep Probleme. Mir ist klar das ich "pause" definiere, was mir aber nicht ganz klar ist, wo ich "pause" aufrufen kann damit die Bedingung ausgeführt wird.

Re: Programm unterbrechen und bei bestimmter Bedingung weiterlaufen lassen.

Verfasst: Montag 6. Juni 2022, 12:19
von __deets__
Da, wo du das willst, musst du das aufrufen. Wie jede andere Funktion auch.

Re: Programm unterbrechen und bei bestimmter Bedingung weiterlaufen lassen.

Verfasst: Montag 6. Juni 2022, 12:29
von Schlangenmensch
Ok, das Programm läuft mit Eueren Änderungen so wie ich mir das vorgestellt habe. Ich bedanke mich für Euere unendliche Geduld mit mir und wünsche Euch noch einen schönen Feiertag.

Was mich aber noch interessieren würde, woher bekomme ich die Kürzel der Stringformatierung bzw. was bedeutet {Y:02d}.

Re: Programm unterbrechen und bei bestimmter Bedingung weiterlaufen lassen.

Verfasst: Montag 6. Juni 2022, 12:43
von sparrow
Aus der Dokumentation.