Multi Switch Status

Statusüberwachung mehrerer Schalter

Im Prinzip wurden in den Tutorials bisher schon die wichtigsten Konzepte und Steuerungsmöglichkeiten vorgestellt. Jetzt bist du an der Reihe. Die Möglichkeiten des Arduino sind unendlich. Mit den einfachen Steuerungsbefehlen kannst du jede Funktion des Arduino auch mit dem Bussystem des Hauses verbinden. Wir werden noch weitere Tutorials entwickleln, du kannst aber vielleicht viele Einsatzmöglichkeiten, die du planst schon jetzt realisieren.

Besonders freuen würde uns, wenn du dein fertiges Projekt mailst. Wir sind es echt leid hier viel Zeit in kostenlosen Mailsupport zu investieren und sobald das Teil läuft nie wieder etwas von den Leuten zu hören!!!

Für ein produktives System solltest du aber auf jeden Fall noch einen Watchdog einbauen, dann kannst du loslegen.

Was ist ein Watchdog ?

Der Watchdog in der Elektronik ist eine Systemüberwachung. Der Watchdog läuft im Arduino recht unbeeindruckt von allen anderen Dingen und erwartet in gewissen Zeitabständen, dass der Arduino Sketch ihm mitteilt, dass das System noch läuft. Tut der Sketch das nicht, dann rebootet er den Arduino einfach. Somit wird der Arduino bei einem Softwarecrash neu gestartet und das System ist innerhalb weniger Sekunden wieder einsatzfähig.

Für die Watchdog-Funktionalität muss man die Systemlibray wdt.h inkludieren (wdt = watch dog timer)

#include <avr/wdt.h>

In der Setup Funktion startet man den Watchdog und legt fest in welchen Zeitabständen er eine "Lebensmeldung" des Sketch erwartet.

wdt_enable(WDTO_1S);

In diesem Fall muss jede Sekunde eine Meldung an den Watchdog erfolgen, sonst rebootet er. Es gibt folgende mögliche Zeitparameter:

Zeit Konstante
15 ms WDTO_15MS
30 ms WDTO_30MS
60 ms WDTO_60MS
120 ms WDTO_120MS
250 ms WDTO_250MS
500 ms WDTO_500MS
1 s WDTO_1S
2 s WDTO_2S
4 s WDTO_4S
8 s WDTO_8S

Man wird selten ein System basteln, bei dem ein Ausfall von wenigen Millisekunden kritisch ist. Hier also im Zweifelsfall ruhig grosszügig sein und dem Arduino etwas mehr Zeit gönnen. Ein Reboot des KNiXuino ist insofern wenig wünschenswert, weil sämtliche aktuellen Schaltzustände gelöscht werden. Somit weiß der Sketch nicht mehr ob ein Licht ein- oder ausgeschaltet ist. Normalerweise kein Problem, aber das hängt natürlich auch wieder von der Anwendung ab. Wir hatten Sketches schon monatelang laufen ohne auch nur einen Ausfall. Man muss also nicht damit rechnen, dass ständig reboots vorkommen. Sollte das System aber mal abstürzen ist der Watchdog die geniale Rettung!

Im Loop muss man dann dem Arduino in regelmäßigen Abständen mitteilen, dass das System noch am Leben ist. Dies erfolgt mit der Zeile:

wdt_reset();

Normalerweise reicht das im Loop. Sollte man irgendwelche enorm zeitintensiven Berechnungen durchlaufen, so muss man eventuell auch dort noch mal die wdt_reset Funktion aufrufen, oder die Zeit des Watchdog entsprechend erhöhen.

Im Beispielsketch wurde einfach der Sketch aus dem Tutorial 5 (Switch) um den Watchdog erweitert. Mit Drücken der Taste "p" wird eine 4 sekündige Pause ausgelöst. Damit glaubt der Watchdog nach einer Sekunde, dass der Arduino abgestürzt ist und rebootet.

#include <Arduino.h>
#include <avr/wdt.h>
#include "KNXConnection.h"
KNXConnection knx;  
KNXObject eg_buero ((uint8_t)0xA01, (uint8_t)0xA02);

void setup() {
  wdt_enable(WDTO_1S);
  Serial.begin(9600);
  Serial.println("Neustart des KNiXuino !! Ready ! ");
}

void loop() {
   wdt_reset();
}

void serialEvent()
{
  char ch = Serial.read();
  if (ch == 's') eg_buero.print();
  if (ch == '0') eg_buero.off();
  if (ch == '1') eg_buero.on();
  if (ch == 'p') {Serial.println("4 Sek. Pause ohne wdt_reset !"); delay(4000);}
} // end keyboardInput