Definitionenfile

Wir basteln ein Definitionenfile für unser gesamtes Haus.

Definitionfile

Bisher haben wir unsere Objekte (Lichter / Rollläden etc.) direkt im Arduino Sketch definiert. Der Übersichtlichkeit halber legen wir jetzt ein File für Objektdefinitionen an. Dieses speichert man am besten innerhalb der Library ab, wodurch man es auch in verschiedenen Sketches verwenden kann. Bei diversen Basteleien wird man sicherlich mal verschiedene Sketches aufbauen, die ganzen GA sind aber damit jedem Sketch bekannt.

In der Library findet man ein File namens KNXObjectDefinitions.h. Dieses beinhaltet bereits einige Definitionen, leider aber von mir, also kannst du sie nur als Vorlage verwenden. Füg deine eigenen Lichter ein und setze die richtigen GA. Nimm einfach mal einige deiner Lichter, von denen du annimmst, dass du sie verwenden willst. Später wirst du es ohnhin laufend erweitern und ändern.

Die Objekte werden global ausserhalb jeder Funktion angelegt. Damit sind sie überall im Sketch verfügbar. Im File findet man dann noch eine Funktion namens objectSettings(), in der verschiedene Initialisierungen durchgeführt werden müssen. Auch wenn diese leer ist muss sie vorhanden sein!

Im Sketch selber fügt man oben folgende Zeile

#include "KNXObjectDefinitions.h"

ein. Somit kennt der Sketch dein Haus und dessen Gruppenadressen.

ObjectSettings

In der "Setup"-Funktion des Sektches wird dann noch die Funktion objectSettings ausgeführt. Hier werden verschiedene Einstellungen an den Objekten vorgenommen. Später werden hier noch allerlei Dinge eingefügt. Du kannst einstweilen die Funktion völlig leer lassen.

Test

Adaptiere nun deinen Sketch aus dem letzten Tutorial (switch) so, dass dein Licht im Definitionenfile festgelegt wird. Dann baust du den Sketch so um, dass die Definitionen aus diesem File eingelesen werden. In den Sketches direkt brauchst du damit ab sofort keine KNXObjekte mehr anzulegen.

#include <Arduino.h>
#include "KNXObject.h"
#include "KNXObjectDefinitions.h"

void setup() {
  Serial.begin(9600);
  Serial.println("Ready ! ");
  objectSettings();
}

void loop() {
}

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 == '2') eg_diele.off();
  if (ch == '3') eg_diele.on();
  if (ch == '4') eg_diele.toggle();
  if (ch == '5') eg_diele.print();
} // end keyboardInput