Dimmen

Wir lernen Bytewerte kennen und dimmen damit Lichter.

Dimmen wie geht das ?

KNX ermöglicht die Helligkeitssteuerung von Lichtern mit Hilfe von Dimmaktoren. Dabei stellen die Programme von Dimmaktoren meist recht viele Möglichkeiten der Konfiguration zur Verfügung, durch die man sich in der ETS mal durcharbeiten kann.

Hier soll es aber um KNiXuino und die Steuerung von Dimmaktoren gehen. KNiXuino verwendet die Basisdimmfunktionen, die jeder Dimmaktor gleich realisiert hat. Dies sind:

  • Eine Gruppenadresse (Bit Objekt) zum Ein- und Ausschalten sowie zugehöriger Status
  • Eine Gruppenadresse (Byte Objekt) zum Einstellen der Helligkeit als Absolutwert (0-255) sowie zugehöriger Status.
  • Eine Gruppenadresse (3Bit Objekt) zum relativen Dimmen (heller/dunkler).

Man braucht nur die GAs verwenden, die für die jeweilige Anwendung Sinn machen bzw. wie der Aktor konfiguriert ist.

Im Definitonenfile lege ich folgendes dimmbares Licht an:

KNXObject  eg_diele               (ga(1,2,80), ga(1,2,81));
KNXObject  eg_diele_dim           (ga(1,2,84), ga(1,2,84), 1);
KNXObject  eg_diele_reldim        (ga(1,2,83));

Neu ist hier die "1" beim Anlegen des Dim-Objektes. Man kann nach GA und Status-GA auch noch die Länge des Objektes angeben. Hier wird also eine 1 für 1-Byte gesetzt. Lässt man den Wert aus, dann geht der KNiXuino von einem Bit-Wert aus. Streng genommen ist es aber egal ob ein Objekt einen Bitwert, 3 Bit (heller/dunkler) oder ein Byte verwaltet, weil im Arduino immer mindestens ein Byte belegt wird. Relevant wird das somit eigentlich erst ab 2 Byte. Solche Werte kommen erst später.

Dann lernen wir noch ein Problem kennen. Versucht man direkt Zahlen an ein Objekt zu senden. (z.B. diele_dim.set(120);) so kann der Arduino Compiler nicht eindeutig feststellen von welchem Typ diese Zahl ist. Man muss das nicht verstehen, aber man muss dem Compiler sagen, dass es sich um einen Bytewert handelt. Dazu schreibt man (byte) vor die Zahl, dann ist auch dem Compiler alles klar.

#include <Arduino.h>
#include "KNXConnection.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_diele.print();
  if (ch == 'd') eg_diele_dim.print();
  if (ch == '0') eg_diele.off();
  if (ch == '1') eg_diele.on();
  if (ch == '2') eg_diele_dim.set(0);
  if (ch == '3') eg_diele_dim.set(19);
  if (ch == '4') eg_diele_dim.set(254);
  if (ch == 'y') eg_diele_dim.print();
  if (ch == '+') eg_diele_reldim.set(12);
  if (ch == '-') eg_diele_reldim.set(4);
  if (ch == 'l') Serial.println("-----------------------------------");

} // end keyboardInput


Erklärung

Im Sketch selber werden eigentlich nur Tastatureingaben verarbeitet. Mit diesen siehst du die Möglichkeiten einen Dimmer zu bedienen. Es gibt ein eigenes Bitobjekt, mit dem man ein- und ausschalten kann, ein Objekt mit dem man direkt Helligkeitswerte senden/empfangen kann und ein Objekt, das relatives Dimmen ermöglicht. Einige Verhaltensweisen sind von der ETS Programmierung anhängig. (z.B. Lässt sich das Licht mit Helligkeitswert auch einschalten, werden Helligkeitsstatuswerte zurückgegeben und wann, mit welcher Helligkeit schaltet sich das Licht ein usw. usw.