Einfache Schleife

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Wetterstation
User
Beiträge: 2
Registriert: Dienstag 10. Dezember 2019, 13:06

Hallo zusammen,
da ich Anfänger bin, ist meine Frage wahrscheinlich kein großes Problem für die meisten hier. Da ich allerdings schon viel probiert habe und kein geeignetes Ergebnis bekommen habe, wende ich mich an euch.
Ich schreibe ein Programm, um die Daten eines Temperatursensors auszulesen.
Die gemessene Temperatur soll geprüft werden. Der Wert soll eine Schleife z.B. 10mal durchlaufen, bis ein realistischer Wert (-20 bis 50 Grad) gemessen wurde, da ab und zu ein fehlerhafter Wert ausgegeben wird. Falls in diesen 10 Durchläufen kein einziger realistischer Wert gemessen wurde soll als Wert "-999" ausgegeben werden.



Code: Alles auswählen

 
 
 
 def temperature():
        # Daten auslesen
        humidity, temperature = Adafruit_DHT.read(sensorTemp, gpioTemp)
        time.sleep(1)
        # Ausgabe
        return '{0:0.1f}'.format(temperature,humidity)

def main():
        
        now = datetime.datetime.now()
        
        temp = temperature()
                        
                       
             
        
                          
                        
        #print on console
        print(now)
        print('Temperatur: ' + temp)
 
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du machst zu viel und das falsche in temperature. Das sollte nur die Temperatur bestimmen und zurueck geben. Nicht lesen, warten und formatieren. In einer Funktion darum herum kannst du dann die Abfrage in einer Schleife machen, und wenn diese nach 10 durchlaeufen NICHT von selbst abgebrochen ist (weil die Temperatur gueltig war), dann setzt du deine Temperatur auf einen Wert der signalisiert, dass die nicht gueltig ist. Der Standard dafuer ist None. Und dann wird erst bei der Ausgabe entschieden, wie das wirklich dargestellt wird (-999 ist eher doof finde ich, n/a zB ist besser).

Etwa so:

Code: Alles auswählen

def temperature_and_humidity():
    ....
    return temperature, humidity

def check_temperature(repetitions=10, pause=0.1):
    for _ in range(repetitions):
        temperature, _humidity = temperature_and_humidity()
        if -20 <= temperature <= 50:
            break
        time.sleep(pause)
    else:
        temperature = None
    return temperature

def main():
    temperature = check_temperature()
    print(temperature if temperature is not None else "n/a")
Wetterstation
User
Beiträge: 2
Registriert: Dienstag 10. Dezember 2019, 13:06

Vielen Dank funktioniert, -999 muss sein, da es so vom deutschen Wetterdienst vorgegeben ist.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Achso. Na kannst du ja dann trotzdem machen.
Antworten