#ifndef _MY_MACROS_H_INCLUDED #define _MY_MACROS_H_INCLUDED #define _DEBUG 1 #define _DEBUG_SENSORS 0 #define _DEBUG_DISPLAY 0 #define _DEBUG_MENU 0 #define _DEBUG_MODBUS 0 #define _MODBUS 1 // Das Ermitteln einer Durchschnittstemperatur braucht (zu) viel RAM und ist wahrscheinlich unnötig #define _MODBUS_AVERAGE_TEMPERATURES 0 #define _REGS_INFRONTOF_EVENTS 6 // Ergibt sich aus 0xFF - 0x06, ev. wird #define _MODBUS_MAX_EVENTS 249 #define _VERSION_MAJOR 0 #define _VERSION_MINOR 0 #define _VERSION_MICRO 1 #define _VERSION_NUMBER _VERSION_MICRO | (_VERSION_MINOR << 6) | (_VERSION_MAJOR << 12) #define _VERSION_STRING "v0.0.1" #define _MODBUS_ADDR_MIN 1 #define _MODBUS_ADDR_MAX 247 // Laut QModMaster letzte Adresse #define _MODBUS_DELAY_MIN 0 // 1/10 Millisekunden #define _MODBUS_DELAY_MAX 250 // 1/10 Millisekunden #define _MODBUS_VALVE_T1_INDEX 0 #define _MODBUS_VALVE_T2_INDEX 1 #define _MODBUS_VALVE_PR_INDEX 2 #define _MODBUS_VALVE_PF_INDEX 3 #define _MODBUS_T1_INDEX 2 #define _MODBUS_T2_INDEX 3 #define _MODBUS_P_INDEX 4 #define _STD_TEMP_SETPOINT 400 // Hundertstel #define _STD_TEMP_HYSTERESIS 10 // Hundertstel #define _STD_P_SETPOINT 100 // Hundertstel #define _STD_P_HYSTERESIS 5 // Hundertstel #define _STD_P_EN_INC 1 #define _STD_P_EN_DEC 1 #define _STD_T_EN 1 #define _STD_C_EN 0 #define _MIN_TEMP_SETPOINT 10 // Hundertstel #define _MAX_TEMP_SETPOINT 3000 // Hundertstel #define _MIN_TEMP_HYSTERESIS 1 // Hundertstel #define _MAX_TEMP_HYSTERESIS 100 // Hundertstel #define _MIN_P_SETPOINT 0 // Hundertstel #define _MAX_P_SETPOINT 300 // Hundertstel #define _MIN_P_HYSTERESIS 1 // Hundertstel #define _MAX_P_HYSTERESIS 50 // Hundertstel #define _P_SENSOR_1_5V_0_5BAR 1 #define _P_SENSOR_0_5V_0_6BAR 2 #define _STD_FAULTS_ACOUSTIC 1 #define _STD_FAULTS_OPTICAL 1 #define _STD_FAULTS_T_ON 1 #define _STD_FAULTS_P_ON 0 #define _STD_FAULTS_T_R_RATE 10 // Hundertstel #define _STD_FAULTS_T_F_RATE 10 // Hundertstel #define _STD_FAULTS_P_RATE 10 // Hundertstel #define _MIN_FAULTS_RATE 0 // Hundertstel #define _MAX_FAULTS_RATE 1000 // Hundertstel // Alarme #define _MAX_FAULTS 30 // #define _CHECK_FAULT_INTERVAL 300000 // 5 Minuten // #define _CHECK_FAULT_INTERVAL 3000 // 3 Sekunden (für Testzwecke) // #define _CHECK_T_FAULT_INTERVAL 3600000 // 1 Stunde // #define _CHECK_P_FAULT_INTERVAL 10000 // 10 Sekunden #define _CHECK_T_FAULT_INTERVAL 3000 // 3 Sekunden (für Testzwecke) #define _CHECK_P_FAULT_INTERVAL 3000 // 3 Sekunden (für Testzwecke) // EEPROM Adressen: #define _EEPROM_OFFSET 0 // Falls sich die Register nicht mehr beschreiben lassen #define _EEPROM_MODBUS_ADDRESS (0 + _EEPROM_OFFSET) // 1 byte #define _EEPROM_MODBUS_BAUDRATE (1 + _EEPROM_OFFSET) // 4 bytes #define _EEPROM_MODBUS_DELAY (5 + _EEPROM_OFFSET) // 1 byte #define _EEPROM_TEMP_SETPOINT (6 + _EEPROM_OFFSET) // 4 bytes #define _EEPROM_TEMP_HYSTERESIS (10 + _EEPROM_OFFSET) // 4 bytes #define _EEPROM_P_SETPOINT (14 + _EEPROM_OFFSET) // 4 bytes #define _EEPROM_P_HYSTERESIS (18 + _EEPROM_OFFSET) // 4 bytes #define _EEPROM_P_EN_INC (22 + _EEPROM_OFFSET) // 1 byte #define _EEPROM_P_EN_DEC (23 + _EEPROM_OFFSET) // 1 byte #define _EEPROM_P_SENSOR (24 + _EEPROM_OFFSET) // 1 byte #define _EEPROM_BG_LIGHT (25 + _EEPROM_OFFSET) // 1 byte #define _EEPROM_T_EN (26 + _EEPROM_OFFSET) // 1 byte #define _EEPROM_CONTROL_EN (27 + _EEPROM_OFFSET) // 1 byte // bisschen Reserveplatz #define _EEPROM_POWERON_COUNT (48 + _EEPROM_OFFSET) // 2 bytes #define _EEPROM_FAULT_SIZE 6 // 6 bytes für 1 Fehler #define _EEPROM_FAULT_SETTINGS (50 + _EEPROM_OFFSET) // 20 bytes (incl. Reserve) #define _EEPROM_FAULT_LAST_ID (70 + _EEPROM_OFFSET) // 2 byte #define _EEPROM_FAULT_COUNT (72 + _EEPROM_OFFSET) // 1 byte /* * Bytes 1, 2: Alarm ID * Bytes 3, 4: Bit 0...11: counterActivated * Bytes 3, 4: Bit 12...15: Alarm-Code * Bytes 5, 6: Bit 0...11: counterDeactivated * Bytes 5, 6: Bit 12...13: active, deactivated * Bytes 5, 6: Bit 14...15: reserviert */ #define _EEPROM_FAULT_1 (73 + _EEPROM_OFFSET) #define _EEPROM_FAULT_2 (_EEPROM_FAULT_1 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_3 (_EEPROM_FAULT_2 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_4 (_EEPROM_FAULT_3 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_5 (_EEPROM_FAULT_4 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_6 (_EEPROM_FAULT_5 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_7 (_EEPROM_FAULT_6 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_8 (_EEPROM_FAULT_7 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_9 (_EEPROM_FAULT_8 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_10 (_EEPROM_FAULT_9 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_11 (_EEPROM_FAULT_10 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_12 (_EEPROM_FAULT_11 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_13 (_EEPROM_FAULT_12 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_14 (_EEPROM_FAULT_13 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_15 (_EEPROM_FAULT_14 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_16 (_EEPROM_FAULT_15 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_17 (_EEPROM_FAULT_16 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_18 (_EEPROM_FAULT_17 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_19 (_EEPROM_FAULT_18 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_20 (_EEPROM_FAULT_19 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_21 (_EEPROM_FAULT_20 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_22 (_EEPROM_FAULT_21 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_23 (_EEPROM_FAULT_22 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_24 (_EEPROM_FAULT_23 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_25 (_EEPROM_FAULT_24 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_26 (_EEPROM_FAULT_25 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_27 (_EEPROM_FAULT_26 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_28 (_EEPROM_FAULT_27 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_29 (_EEPROM_FAULT_28 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) #define _EEPROM_FAULT_30 (_EEPROM_FAULT_29 + _EEPROM_OFFSET + _EEPROM_FAULT_SIZE) // bisschen Reserveplatz #define _EEPROM_FAULTS_ACOUSTIC 300 // 1 byte #define _EEPROM_FAULTS_OPTICAL 301 // 1 byte #define _EEPROM_FAULTS_T_ON 302 // 1 byte #define _EEPROM_FAULTS_P_ON 303 // 1 byte #define _EEPROM_FAULTS_T_R_RATE 304 // 2 bytes #define _EEPROM_FAULTS_T_F_RATE 306 // 2 bytes #define _EEPROM_FAULTS_P_RATE 308 // 2 bytes extern u32 currMillis; #if _DEBUG == 1 #define _print(s) Serial.print(s) #define _println(s) Serial.println(s) #define _printf(s) Serial.print(F(s)) #define _printlnf(s) Serial.println(F(s)) #if _DEBUG_DISPLAY == 1 struct __printTimeStruct { __printTimeStruct(const char *text) : _text(text) { _t0 = currMillis; }; ~__printTimeStruct() { _printf("Vergangene Millisekunden ["); _print(_text); _printf("]: "); _println(currMillis - _t0); }; private: u32 _t0; const char *_text; }; #define _printtime(text) __printTimeStruct __printt(text) #else #define _printtime(text) #endif // _DEBUG_DISPLAY #if _DEBUG_SENSORS == 1 #define _prints(s) _print(s) #define _printsln(s) _println(s) #define _printsf(s) _printf(s) #define _printslnf(s) _printlnf(s) #else #define _prints(s) #define _printsln(s) #define _printsf(s) #define _printslnf(s) #endif // _DEBUG_SENSORS #if _DEBUG_MODBUS == 1 #define _printb(s) _print(s) #define _printbln(s) _println(s) #define _printbf(s) _printf(s) #define _printblnf(s) _printlnf(s) #else #define _printb(s) #define _printbln(s) #define _printbf(s) #define _printblnf(s) #endif // _DEBUG_MODBUS #if _DEBUG_MENU == 1 #define _printm(s) _print(s) #define _printmln(s) _println(s) #define _printmf(s) _printf(s) #define _printmlnf(s) _printlnf(s) #else #define _printm(s) #define _printmln(s) #define _printmf(s) #define _printmlnf(s) #endif // _DEBUG_MENU #else // _DEBUG != 1 #define _print(s) #define _println(s) #define _printf(s) #define _printlnf(s) #define _prints(s) #define _printsln(s) #define _printsf(s) #define _printslnf(s) #define _printb(s) #define _printbln(s) #define _printbf(s) #define _printblnf(s) #define _printm(s) #define _printmln(s) #define _printmf(s) #define _printmlnf(s) #define _printtime(s) #endif #if _MODBUS == 1 extern bool timeStampOverflow; extern unsigned long timeStamp; extern u8 modbusValves[]; extern u16 &eventCounter; extern u16 modbusData[]; #define _setModbusValve(index, val)\ if (bitRead(modbusValves[0], index) != val) {\ bitWrite(modbusValves[0], index, val);\ bitWrite(modbusData[1], index+8, val);\ if (eventCounter <= _MODBUS_MAX_EVENTS) {\ /* Die ersten 12 Bits beinhalten den relativen Zeitstempel in Zehntelsekunden */\ /* Dieser Stempel ist immer 0xFFF, falls schon zuviel Zeit seit der letzten Referenzierung vergangen ist */\ /* u16 result = (timeStampOverflow) ? 0xFFF : ((currMillis - timeStamp) / 100) & 0xFFF;*/\ u16 result = (timeStampOverflow) ? 0xFFF : (modbusData[5] & 0xFFF);\ /* Die Bits 12...14 beinhalten die Nr des geschalteten Ausgangs */\ result |= index << 12;\ /* Das MSB gibt an, ob der Ausgang ein- oder ausgeschaltet wurde */\ result |= val << 15;\ modbusData[_REGS_INFRONTOF_EVENTS + eventCounter] = result;\ eventCounter++;\ }\ } #else #define _setModbusValve(index, val) #endif // _MODBUS == 1 #endif // _MY_MACROS_H_INCLUDED