Die Temperatur soll mittels eines OneWire Sensors DS18B20 der Firma Dallas gemessen werden. Bei dem Sensor handelt es sich um einen Sensor in einem TO92 Gehäuse, der mit sehr geringem Aufwand ausgelesen werden kann. Es können außerdem mehrere Sensoren an einem Bus zusammen geschaltet und ausgewertet werden. Jeser Sensor wird vom Hersteller mit einer eindeutigen Seriennummer ausgestattet.
In unserem zweiten Beispiel wollen wir die Temperatur über eine LEDs Ampel ausgeben.
Im folgenden findet man eine tabellarische Darstellung der Temperaturen und der dazugehörigen LEDs Farbe:
Programmiersprachen bieten die Möglichkeiten Variablen zu definieren. Dies haben wir in den anderen Programmen bereits gemacht. Hier verwenden wir die Variablen Pin_ROT,Pin_GELB und Pin_GRUEN und weisen diesen Variablen die Ports unseres Mikrocontrollers zu, an die wir die LEDs angeschlossen haben
Wie im ersten Beispiel müssen wir erstmal den OneWire Bus initialisieren. Danach scannen wir nach den angeschlossenen Sensoren.
Nachdem wir die Sensoren kennen starten wir eine while-Schleife, die niemals endet. Anschließend starten wir den Vorgang zum Auslesen der Sensoren, warten kurz, bis alle Sensoren den Befehl erhalten haben und werten die Ergebnisse pro Sensor aus.
In der for-Schleife durchlaufen wir die Schleife so lange, wie wir Einträge in der Liste (Variablen) onewire_devices haben und schreiben das Ergebnis jedes Elementes der Liste in die Variable onewire_device.
Danach lesen wir die Temperatur von jedem Sensor mit der ID des Elements, welches wir in der for-Schleife in die Variable onewire_device geschrieben haben.
Anschließend beginnt die Auswertung des Temperaturwerte, welche wir im nächsten Schritt uns näher anschauen. Nach der Auswertung schreiben wir die aktuelle Temperatur (für uns zur Kontrolle) auf die Konsole und halten das Programm für 5 Sekunden an.
Wie in der Tabelle zu Beginn des Kapitels definiert wurde, sollen bei bestimmten Temperaturen die rote, gelbe und grüne LED leuchten.
Unser Sensor liefert uns einen Integriert, den wir mit einer “Wenn-Dann” Abfrage auswerten können. Im englischen heisst diese Abfrage if-Abfrage. Man könnte also in deutschen sagen:
Wenn die Temperatur unter 18°C beträgt, dann lasse die rote LED leuchten. Und genau das machen wir mit der if-Abfrage.
Allerdings gibt es in der Art der Beschaltung unserer LED eine Besonderheit. Die LED hängt mit ihrer Anode an +3,3V. Damit muss die Kathode gegen Masse gschaltet werden, damit die LED leuchtet. Außerdem wollen wir ja nur die rote LED leuchten lassen und Geld unf grün sollen aus bleiben. Daher setzen wir den Port der roten LED auf false, was elektrisch der Masse entspricht. die beiden anderen Ports setzen wir auf true, was elektrisch +3,3V entspricht. Somit leuchten die gelbe und grüne LED nicht.
soweit, so gut. Bisher haben wir nur die erste Reihe der Tabelle abgearbeitet. Als nächstes müssen wir auswerten, ob die Temperatur zwischen 18 und 20°C beträgt. Dies könnte mit einer weiteren if-Abfrage gelöst werden. Allerdings wollen wir sicher stellen, dass nur dann die nächste if-Abfrage ausgeführt wird, wenn die erste nicht gültig war. Also: wenn die Temperatur nicht kleiner als 18°C soll die nächste Abfrage ausgeführt werden aber nicht, wenn die Abfrage gültig ist.
Dazu gibt es die Möglichkeit eine if-Abfrage mittels else zu erweitern - also quasi aus dem “wenn-dann” ein “wenn-dann-sonst” zu machen. Dazu öffnet man die Einstellungen durch einen Klick auf das Zahnrad und zieht ein else if hinter das erste if.
Somit wird die nächste if-Abfrage also nur aufgerufen, wenn die erste nicht gültig ist. Jede if-Abfrage macht also eine Überprüfung eines Ergebnisses oder eines Zustandes.
In der zweiten und den nachfolgenden if-Abfrage müssen 2 Ergebnisse erfüllt sein, damit die if-Abfrage gültig wird. In diesem Fall wird der Ausdruck gültig, wenn die gemessene Temperatur größer oder gleich 18 und kleiner 20°C beträgt. Ist die Abfrage gültig, wird der Port von Pin_GELB auf false (low) gesetzt, sodass die LED leuchten kann. Alle anderen Ports werden auf true (high) gesetzt und leuchten dann nicht.
Diese if-Abfragen wiederholen sich für die weiteren Temperaturwerte.
Die letzte Abfrage ist eigentlich keine Abfrage mehr, sondern ist für alle gemessenen Temperaturwerte über 26°C gültig.