Time

Der nächste Datentyp ist die Zeit. Zeiten werden in KNX mit 3 Byte verwaltet. Für unsere Implementierung verwenden wir eine externe Library, die als Standard im Arduino Bereich bezeichnet werden kann. Mit dieser Library hat man nicht nur jede Menge super Funktionen zur Verfügung, sondern auch gleich eine Hardwar Anbindung an diverse Uhr-Module, GPS-Uhren usw. Auf der Library Seite findet man genauere Infos.

KNXTime eine Tochterklasse von KNXObject macht nichst anderes, als die von der externen Library mit dem KNX abzugelichen. Wenn also über das KNX eine Zeit empfanegn wird (über welches Gerät auch immer), dann wird die Zeit im Arduino danach gesetzt. Wenn man die Zeit des KNXTime Objects setzt (mit er Methode setT), dann wird einerseits die interne Uhr des Arduino gesetzt, andererseits wird die Zeit ins KNX gesendet. Achtung dies wird normalerweise alle Uhrzeiten der KNX Geräte umstellen. (Falls man so etwas hat)


#include <Arduino.h>


// ************** KNiXuino - KNX Bus and Arduino ****************
// for further info check http://www.knixuino.com
// Version info - _readme.txt
// Copyright info - _licence.txt
// Do not remove this headerinfo !!!!

#include "KNXConnection.h"
#include "KNXObjectDefinitions.h"
#include "KNXTime.h"
#include 


KNXTime time(ga(4,3,1));


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

void loop() {
  digitalClockDisplay();
  delay(5000);
}

void serialEvent()
{
  char ch = Serial.read();

  if (ch == 'r') time.readRequest(); // c9 33 07
  if (ch == 's') time.setT(16, 15, 00); // c9 33 07
  if (ch == 'p') time.print();
  if (ch == 'l') Serial.println("----------------------------");
  
} // end keyboardInput  


 void digitalClockDisplay(){
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.print(" ");
  Serial.print(day());
  Serial.print(" ");
  Serial.print(month());
  Serial.print(" ");
  Serial.print(year()); 
  Serial.println(); 
}

void printDigits(int digits){
  // utility function for digital clock display: prints preceding colon and leading 0
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}


  

Im Sketch wird alle 5 Sekunden die Zeit am Serial Monitor ausgegeben. Bei Eingabe von r wird ein readRequest an die Gruppenadresse geschickt. Ich habe ein nettes Touchdisplay, das diesen Read Request mit der aktuell gesetzten Zeit beantwortet. Wenn man so etwas nicht hat, dann kommt natürlich auch kein Wert zurück. Wenn man s eingibt wird die Zeit auf 16:15:00 gesetzt. (Achtung damit wird meist auch die Zeit in den KNX Geräten mit Uhr umgestellt.) Das wars auch schon. Benötigt man für verschiedene Aufgaben Zeitfunktionen, dann wird man bei den zahlreichen Funktionen der externen Library fündig.