#include <OneWire.h>
#include <DallasTemperature.h>
#define CircPump_PIN 12
#define Boiler_PIN 13
#define ONE_WIRE_BUS 2
#define Boiler_Set 60 //--------------------------------------------Boiler Setpoint
#define Boiler_Hys 3 //---------------------------------------------Hysteresis Boiler
#define CircPump_Set 20 //------------------------------------------CircPump Setpoint
#define CircPump_Hys 5 //-------------------------------------------Hysteresis CircPump
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float Boiler_Temp;
float Out_Temp;
//Driftstæller variabler
bool lastState_Boiler = false;
unsigned int timeBufferTimer_Boiler = 0;
byte timeBufferMinutter_Boiler = 0;
byte timeBufferSekunder_Boiler = 0;
unsigned long timerStart_Boiler = 0;
unsigned int CounterTurnOnTimes_Boiler = 0;
//Driftstæller printer
unsigned long lastPrintUpdate = 0;
unsigned long IntervalPrintUpdate = 1000;//Print besked hver 2s
void setup(){
Serial.begin(9600);
pinMode(CircPump_PIN, OUTPUT);
pinMode(Boiler_PIN, OUTPUT);
}
void loop() {
sensors.requestTemperatures();
Boiler_Temp = sensors.getTempCByIndex(0);
Out_Temp = sensors.getTempCByIndex(1);
if(Boiler_Temp < (Boiler_Set - Boiler_Hys)){
digitalWrite(Boiler_PIN, HIGH);
}
else if(Boiler_Temp > (Boiler_Set)){
digitalWrite(Boiler_PIN, LOW);
}
if(Out_Temp < (CircPump_Set - CircPump_Hys)){
digitalWrite(CircPump_PIN, HIGH);
}
else if(Out_Temp > (CircPump_Set)){
digitalWrite(CircPump_PIN, LOW);
}
//Driftstæller
if(digitalRead(Boiler_PIN) != lastState_Boiler){//LEDen har ændret tilstand
if(lastState_Boiler){//Den er gået fra tændt til slukket
timeBufferSekunder_Boiler += (millis() - timerStart_Boiler)/1000;//Lægger tiden som var gået siden sidste tænd, til bufferen
}else{//Den er gået fra slukket til tændt
timerStart_Boiler = millis();
CounterTurnOnTimes_Boiler++; //Læg 1 til. Samme som CounterTurnOnTimes_LED = CounterTurnOnTimes_LED + 1
}
lastState_Boiler = digitalRead(Boiler_PIN);
}
// - Tidsskifte kode s -> min -> timer -> dage
if(millis() - timerStart_Boiler > 1000 && digitalRead(Boiler_PIN)){//Tæller ref har opnået over 1s opsparet tid. Overfør til buffer.
timeBufferSekunder_Boiler++;//Læg 1s til sekund buffer
timerStart_Boiler += 1000;//Skub timer start 1s frem.
if(timeBufferSekunder_Boiler > 59){//Sekundbuffer har opnået 60s. Overfør til minut tæller.
timeBufferSekunder_Boiler -= 60;//Trækker 60 fra
timeBufferMinutter_Boiler++;
if(timeBufferMinutter_Boiler > 59){//60min = 1 time
timeBufferMinutter_Boiler -= 60;
timeBufferTimer_Boiler++;
}
}
}
//Printer driftstid
if(millis() - lastPrintUpdate > IntervalPrintUpdate){
Serial.print("Running_Time_Boiler: ");
Serial.print(timeBufferTimer_Boiler);
Serial.print("h ");
Serial.print(timeBufferMinutter_Boiler);
Serial.print("m ");
Serial.print(timeBufferSekunder_Boiler);
Serial.print("s ");//Printer sekunder s tegn
Serial.print("/ Start_Up: ");
Serial.print(CounterTurnOnTimes_Boiler);
Serial.print(" times");
Serial.print(" / Boiler_Temp: ");
Serial.print(Boiler_Temp);
Serial.print(" / Out_Temp: ");
Serial.println(Out_Temp);
lastPrintUpdate = millis();
}
}
Boiler
CircPump
Boiler_Temp
Out_Temp