diff --git a/avrIOhelper/io-helper.h b/avrIOhelper/io-helper.h index bfb8788..4c63e9c 100644 --- a/avrIOhelper/io-helper.h +++ b/avrIOhelper/io-helper.h @@ -141,6 +141,9 @@ void ioHelperEdgeDetector(void); #define BTN_HEIZEN_AN 13 #define BTN_HEIZEN_AUS 14 +#define BTN_HEIZEN_PLUS 15 +#define BTN_HEIZEN_MINUS 16 + #define BTN_SLAVE_BECKEN_FUELLEN 18 #define BTN_SLAVE_BECKEN_LEEREN 19 diff --git a/heizung.c b/heizung.c index 8aa5902..9abf725 100644 --- a/heizung.c +++ b/heizung.c @@ -4,41 +4,60 @@ #include #include +#include "mqtt.h" +extern Client mqtt_client; + uint8_t heizung_state = 0; uint8_t heizung_ontemp = 0; +float heizung_setpoint = 40; void do_heizung(){ - if(ADC_reading[1] > 69) + if(ADC_reading[1] > heizung_setpoint) heizung_ontemp = 1; - if(ADC_reading[1] < 66) + if(ADC_reading[1] < heizung_setpoint) heizung_ontemp = 0; - if(heizung_state && !heizung_ontemp){ - gtf_write_register(5, 56, 500); - gtf_write_register(6, 56, 500); - gtf_write_register(7, 56, 500); - set_Output(LED_HEIZUNG, BLINK); - } - else if(heizung_state && heizung_ontemp){ - gtf_write_register(5, 56, 0); - gtf_write_register(6, 56, 0); - gtf_write_register(7, 56, 0); - set_Output(LED_HEIZUNG, ON); + if(read_Input(BTN_HEIZEN_PLUS, LEVEL) && heizung_setpoint < 80){ + heizung_setpoint += 0.2; + send_value(&mqtt_client, "/Filamentanlage/02_Wasserbecken/state/heizung_sp", heizung_setpoint); } - else{ - gtf_write_register(5, 56, 0); - gtf_write_register(6, 56, 0); - gtf_write_register(7, 56, 0); - set_Output(LED_HEIZUNG, OFF); + + if(read_Input(BTN_HEIZEN_MINUS, LEVEL) && heizung_setpoint > 5){ + heizung_setpoint -= 0.2; + send_value(&mqtt_client, "/Filamentanlage/02_Wasserbecken/state/heizung_sp", heizung_setpoint); } if(read_Input(BTN_HEIZEN_AN, LEVEL)){ heizung_state = 1; + send_value(&mqtt_client, "/Filamentanlage/02_Wasserbecken/state/heizung", 1); } if(read_Input(BTN_HEIZEN_AUS, LEVEL)){ + send_value(&mqtt_client, "/Filamentanlage/02_Wasserbecken/state/heizung", 0); heizung_state = 0; } +} +int8_t comm_heizung(){ + int8_t res = 0; + if(heizung_state && !heizung_ontemp){ + res |= gtf_write_register(5, 56, 500); + res |= gtf_write_register(6, 56, 500); + res |= gtf_write_register(7, 56, 500); + set_Output(LED_HEIZUNG, BLINK); + } + else if(heizung_state && heizung_ontemp){ + res |= gtf_write_register(5, 56, 0); + res |= gtf_write_register(6, 56, 0); + res |= gtf_write_register(7, 56, 0); + set_Output(LED_HEIZUNG, ON); + } + else{ + res |= gtf_write_register(5, 56, 0); + res |= gtf_write_register(6, 56, 0); + res |= gtf_write_register(7, 56, 0); + set_Output(LED_HEIZUNG, OFF); + } + return res; } diff --git a/heizung.h b/heizung.h index fec0b07..59fd62f 100644 --- a/heizung.h +++ b/heizung.h @@ -1,2 +1,5 @@ +#include +extern float heizung_setpoint; void do_heizung(void); +int8_t comm_heizung(void); diff --git a/main.c b/main.c index efc7a89..04400a4 100644 --- a/main.c +++ b/main.c @@ -112,39 +112,6 @@ void do_notaus(){ } } -//void do_notaus(){ -// if(read_Input(IN_NOTAUS_ANLAGE, LEVEL) || read_Input(IN_NOTAUS_SCHRANK, LEVEL)){ // NOTAUS -// set_Output(LED_GRN_NOTAUS_SCHRANK, OFF); // disable green lamps -// set_Output(LED_GRN_NOTAUS_ANLAGE, OFF); -// } -// -// if(read_Input(IN_NOTAUS_ANLAGE, LEVEL) && read_Input(IN_NOTAUS_SCHRANK, LEVEL)){ // both activated -// set_Output(LED_ROT_NOTAUS_ANLAGE, BLINK); -// set_Output(LED_ROT_NOTAUS_SCHRANK, BLINK); -// } -// else if(read_Input(IN_NOTAUS_ANLAGE, LEVEL)){ // top one activated -// set_Output(LED_ROT_NOTAUS_ANLAGE, BLINK); -// set_Output(LED_ROT_NOTAUS_SCHRANK, ON); -// } -// else if(read_Input(IN_NOTAUS_SCHRANK, LEVEL)){ // bottom one activated -// set_Output(LED_ROT_NOTAUS_SCHRANK, BLINK); -// set_Output(LED_ROT_NOTAUS_ANLAGE, ON); -// } -// else{ // none activated -// set_Output(LED_ROT_NOTAUS_SCHRANK, OFF); -// set_Output(LED_ROT_NOTAUS_ANLAGE, OFF); -// if(!read_Input(IN_ANLAGE_EIN_INV, LEVEL)){ -// set_Output(LED_GRN_NOTAUS_ANLAGE, ON); -// set_Output(LED_GRN_NOTAUS_SCHRANK, ON); -// } -// else{ -// set_Output(LED_GRN_NOTAUS_ANLAGE, ON); -// set_Output(LED_GRN_NOTAUS_SCHRANK, ON); -// set_Output(LED_ROT_NOTAUS_ANLAGE, ON); -// set_Output(LED_ROT_NOTAUS_SCHRANK, ON); -// } -// } -//} void send_temperatures(void){ for(uint8_t i=0; i 5000){ timer_send_temps = millis(); send_temperatures(); - //printf("gefran firm: 0x%02X\n", gtf_firmware_version(5)); - printf("gefran 5 OuP: 0x%02X\n", gtf_read_register(5, GTF_OuP)); - printf("gefran 6 OuP: 0x%02X\n", gtf_read_register(6, GTF_OuP)); - printf("gefran 7 OuP: 0x%02X\n", gtf_read_register(7, GTF_OuP)); - //printf("gefran stat3: 0x%02X\n", gtf_read_register(5, 117)); - ////printf("gefran stell: 0x%02X\n", gtf_read_register(5, 56)); - ////printf("gefran disp: 0x%02X\n", gtf_read_register(5, 0)); - //printf("gefran coil: 0x%02X\n", gtf_read_coil(5, 0)); //send_value(&mqtt_client, "/Filamentanlage/02_Wasserbecken/state/gtf5_power", gtf_read_register(5, GTF_POWER)); @@ -271,6 +221,11 @@ int main() } } + if(millis() - timer_gtf_comm > 200){ + timer_gtf_comm = millis(); + comm_heizung(); + } + // send misc info if(millis() - timer_send_uptime > 5000){ timer_send_uptime = millis(); @@ -281,12 +236,14 @@ int main() do_notaus(); do_heizung(); -#if PLC_MQTT_ENABLED ioHelperSetBit(outStates, LED_BUS_OK, 1); ioHelperSetOuts(); +#if PLC_MQTT_ENABLED MQTTYield(&mqtt_client, 10); //blocking call - ioHelperSetBit(outStates, LED_BUS_OK, 0); +#else + _delay_ms(1); #endif + ioHelperSetBit(outStates, LED_BUS_OK, 0); ioHelperSetOuts(); } return 0;