#include "SevSeg.h" //Die vorher hinzugefügte Library laden
SevSeg sevseg; //Ein sieben Segment Objekt initialisieren
int sensorPin = A0; //Der Sensor soll am analogen Pin A0 angeschlossen werden. Wir nennen den Pin ab jetzt "TMP36"
int sensorValue;
int temperature = 0; //Unter der Variablen "temperatur" wird später der Temperaturwert abgespeichert.
int wait=1000; // So viele Millisekunden wird zwischen zwei Messungen gewartet
unsigned long startTime= 0; // Hier merken wir uns nach jedemr Messung die Zeit in Millisekunden (seit dem Start des Arduino)
void setup()
{
byte numDigits = 4; //Hier wird die Anzahl der Ziffern angegeben
byte digitPins[] = {2, 3, 4, 5}; //Die Pins zu den Ziffern werden festgelegt
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; //Die Pins zu den //Segmenten werden festgelegt
sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins);
sevseg.setBrightness(10);
updateTemperature();
}
void loop()
{
// Die 7-Segment-Anzeige mit SevSeg funktioniert nicht mit blockierenden Befehlen wie z.B. delay(), der den Arduino
// für eine ganze Sekunden anhält. Wir nehmen stattdessen eine nicht-blockierende Variante.
// Hier schauen wir bei jedem Durchlauf von loop(), ob die neue Zeit (in ms seit dem Arduino Start) größer als
// die zuletzt gemessene Zeit + 1000ms ist.
// Wenn ja, dann machen wir eine neue Messung und setzen das Display auf den neuen Wert
if(millis() > (startTime + wait)){
startTime = millis();
updateTemperature();
}
// Wenn nein, dann wird nur das Display refreshed
sevseg.refreshDisplay();
// Ergebnis: Die Funktin loop() wird ohne Pause ganz oft durchlaufen, dadurch wird das Display oft refreshed
// und nichts flackert. Die Messung selbst wird aber nur alle 1000ms im if() durchgeführt.
}
void updateTemperature() {
sensorValue = analogRead(sensorPin); //Auslesen des Sensorwertes.
temperature = map(sensorValue, 0, 410, -50, 150); //Umwandeln des Sensorwertes mit Hilfe des "map" Befehls.
sevseg.setNumber(temperature);
}