[gelöst] Temperatur Logger, mit DS18B20

Ich habe mir den fertigen Sketch mal angesehen und mir fallen dabei eingige Dinge auf.

  1. Du verwendest zwei Funktionden Sensor_lesen() und Daten_senden(), das finde ich gut, weil es das Programm übersichtlich macht. Aber warum liest Du im Daten_senden() den Sensor nochmal aus? Damit schickst Du an den Webserver ggf. eine andere Temperatur, als Du über Sensor_lesen() über die serielle Schnittstelle ausgegeben hast.

2). Daten_senden() verschickt die Daten an den Webserver. Im loop() gibt es aber nochmal Code der sich mit dem Webserver verbindet. Der allerdings nichts weiter macht als ein Zeichen aus der Verbindung zu lesen und dann 30 Sekunden bei offener Verbidung zu warten. Das ist nicht nur sinnlos, sondern auch "gemein" gegenüber dem Webserver, da Du eine offene Verbdindung blockierst. In Deinem Fall ist das wurscht, aber kein guter Stil. Stell Dir vor Du baust damit einen öffentlichen Webservice, wo alle Arduinouser dieser Welt Ihre Daten hinloggen dürfen. Und alle würden ihre Verbindung unnötigerweise 30 Sekunden offen halten, dann hast Du einen selbst gebauten Denial of Service Angriff.

  1. Auch die Funktion printTemperature() liest den Sensor nochmal aus. Damit ist das die dritte Stelle im Code, die das macht. Hier würde ich viel mehr aufräumen.
  • Eine Funktion die den Sensor ausliest und die globale Variable temp1 setzt. Gleichzeitig kannst Du eine globale Variable "boolean messenOK" einführen, die von Sensor_lesen() immer gesetzt wird. TRUE wenn das Messen erfolgreich war, und FALSE wenn nicht.

  • printTemperature() gibt den Wert der in temp1 steht nach Serial aus, aber ohne selbst zu messen. Ist "messenOK" gleich FALSE wird eine Fehlermeldung ausgegeben. Gleichzeitig kannst Du z.B. noch eine rote LED einschalten, die dann den Fehler signalisiert.

  • Daten_senden() schreibt die Daten an den Webserver, aber auch wieder ohne selbst zu messen. Auch hier kannst Du z.b. den Fehler mit an den Webserver melden.

Beim Schreiben auf den Webserver kannst Du Dir folgenden Code sparen:

  if (client.available()) 
 {
   char c = client.read();
   Serial.print(c);
 }

Außer Du willst tatsächlich etwas vom Webserver lesen.

In Daten_senden() würde ich auch noch ein client.close() einbauen, das ist besserer Stil (siehe oben - offene Verbindungen).

Ansonsten ist es doch eine runde Lösung geworden.
Mario.