#include "knx_facade.h" #if MEDIUM_TYPE == 5 #include "knx/bau57B0.h" #elif MEDIUM_TYPE == 2 #include "knx/bau27B0.h" #else #error Only MEDIUM_TYPE IP and RF supported #endif #include "knx/group_object_table_object.h" #include "knx/bits.h" #include #include #include #if MEDIUM_TYPE == 5 KnxFacade knx; #elif MEDIUM_TYPE == 2 KnxFacade knx; #else #error Only MEDIUM_TYPE IP and RF supported #endif long lastsend = 0; #define CURR knx.getGroupObject(1) #define MAX knx.getGroupObject(2) #define MIN knx.getGroupObject(3) #define RESET knx.getGroupObject(4) void measureTemp() { long now = millis(); if ((now - lastsend) < 10000) return; lastsend = now; int r = rand(); double currentValue = (r * 1.0) / (RAND_MAX * 1.0); currentValue *= 100; currentValue -= 50; // currentValue *= (670433.28 + 273); // currentValue -= 273; println(currentValue); CURR.value(currentValue); double max = MAX.value(); if (currentValue > max) MAX.value(currentValue); double min = MIN.value(); if (currentValue < (double)MIN.value()) MIN.value(currentValue); } void resetCallback(GroupObject& go) { if (go.value()) { MAX.valueNoSend(-273.0); MIN.valueNoSend(670433.28); } } void appLoop() { if (!knx.configured()) return; measureTemp(); } void setup() { srand((unsigned int)time(NULL)); knx.readMemory(); if (knx.induvidualAddress() == 0) knx.progMode(true); if (knx.configured()) { CURR.dataPointType(Dpt(9, 1)); MIN.dataPointType(Dpt(9, 1)); MIN.value(670433.28); MAX.dataPointType(Dpt(9, 1)); MAX.valueNoSend(-273.0); RESET.dataPointType(Dpt(1, 15)); RESET.callback(resetCallback); printf("Timeout: %d\n", knx.paramWord(0)); printf("Zykl. senden: %d\n", knx.paramByte(2)); printf("Min/Max senden: %d\n", knx.paramByte(3)); printf("Aenderung senden: %d\n", knx.paramByte(4)); printf("Abgleich %d\n", knx.paramByte(5)); } knx.start(); } int main(int argc, char **argv) { knx.platform().cmdLineArgs(argc, argv); setup(); while (1) { knx.loop(); if(knx.configured()) appLoop(); delayMicroseconds(100); } }