Files
ThermostatArduinoNano/Thermostat_2_1/Thermostat_2_1.ino
2024-09-12 16:14:00 +02:00

143 lines
4.3 KiB
C++

int autoLed = 2, woodBurnerLed = 3, gasBurnerLed = 4;
int autoButton = 5, woodburnerButton = 6, gasBurnerButton = 7;
int woodBurnerRelay = 8, gasBurnerRelay = 9;
int blinker = 0;
bool owerride = false;
int manual = 0;
int connectionActivity = 0;
int timer = 0;
int turnedOn = 0;
bool heating = false;
int burnTemp = 0, pufferTemp = 0;
int ThermistorPin = 5;
int ThermistorPin2 = 3;
int Vo;
float R1 = 10000;
float logR2, R2, T, Tc, Tf;
float c1 = 1.1384e-03, c2 = 2.3245e-04, c3 = 9.489e-08;
void setup() {
// put your setup code here, to run once:
pinMode(autoLed, OUTPUT);
pinMode(woodBurnerLed, OUTPUT);
pinMode(gasBurnerLed, OUTPUT);
pinMode(autoButton, INPUT_PULLUP);
pinMode(woodburnerButton, INPUT_PULLUP);
pinMode(gasBurnerButton, INPUT_PULLUP);
pinMode(woodBurnerRelay, OUTPUT);
digitalWrite(woodBurnerRelay, HIGH);
delay(1);
pinMode(gasBurnerRelay, OUTPUT);
digitalWrite(gasBurnerRelay, HIGH);
Serial.begin(9600);
}
void burnersonoff(){
if(heating){
if(turnedOn == 0){
digitalWrite(woodBurnerLed, LOW);
digitalWrite(gasBurnerLed, LOW);
digitalWrite(woodBurnerRelay, HIGH);
digitalWrite(gasBurnerRelay, HIGH);
}else if(turnedOn == 1){
digitalWrite(woodBurnerLed, HIGH);
digitalWrite(woodBurnerRelay, LOW);
digitalWrite(gasBurnerLed, LOW);
digitalWrite(gasBurnerRelay, HIGH);
}else if(turnedOn == 2){
digitalWrite(gasBurnerLed, HIGH);
digitalWrite(gasBurnerRelay, LOW);
digitalWrite(woodBurnerLed, LOW);
digitalWrite(woodBurnerRelay, HIGH);
}
}
}
void loop() {
if (Serial.available()) {
String message = Serial.readString();
if(message[0] == 'A'){
connectionActivity = 0;
if(owerride == false){
if(message[1] == '0'){
turnedOn = 0;
}else if(message[1] == '1'){
turnedOn = 1;
}else if(message[1] == '2'){
turnedOn = 2;
}
if(message[2] == '0'){
manual = 0;
}else if (message[2] == '1'){
manual = 1;
}else if(message[2] == '2'){
manual = 2;
}
if(message[3] == '1'){
heating = true;
}else heating = false;
}else owerride = false;
String Message = "B";
Message += manual;
if(heating) Message += "1";
else Message += "0";
String a = "";
for(int i = 0; i < 4-String(burnTemp).length(); i++){
a += "0";
}
a += String(burnTemp);
Message += a;
a = "";
for(int i = 0; i < 4-String(pufferTemp).length(); i++){
a += "0";
}
a += String(pufferTemp);
Message += a;
Serial.println(Message);
}else{
if(connectionActivity < 200) connectionActivity++;
}
burnersonoff();
}else{
if(connectionActivity < 200) connectionActivity++;
}
if(connectionActivity > 30){
if(blinker >= 1 && blinker < 2){analogWrite(autoLed, 255);}
if(blinker >= 1 && blinker > 2){analogWrite(autoLed, 0); blinker = 0;};
blinker++;
turnedOn = 0;
burnersonoff();
}
for(int i = 0; i < 500; i++){
if(connectionActivity < 30){
if(digitalRead(autoButton) == LOW) { while(digitalRead(autoButton) == LOW); if(manual > 0) manual = 0; else heating = !heating; turnedOn = 0; burnersonoff(); owerride = true;}
if(digitalRead(woodburnerButton) == LOW) { while(digitalRead(woodburnerButton) == LOW); if(manual == 1 && turnedOn == 1){manual = 0; turnedOn = 0;}else { manual = 1; turnedOn = 1;} heating = true; burnersonoff(); owerride = true;}
if(digitalRead(gasBurnerButton) == LOW) { while(digitalRead(gasBurnerButton) == LOW); if(manual == 2 && turnedOn == 2){manual = 0; turnedOn = 0;}else { manual = 2; turnedOn = 2;}heating = true; burnersonoff(); owerride = true;}
if(manual == 0 && heating){ analogWrite(autoLed, 255); }else analogWrite(autoLed, 0);
}
delay(1);
}
Vo = analogRead(ThermistorPin);
if(Vo <= 0) Vo = 0;
R2 = R1 * (1023.0 / (float)Vo - 1.0);
logR2 = log(R2);
T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
Tc = T - 273.15;
burnTemp = int(Tc*100);
Vo = analogRead(ThermistorPin2);
if(Vo <= 0) Vo = 0;
R2 = R1 * (1023.0 / (float)Vo - 1.0);
logR2 = log(R2);
T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
Tc = T - 273.15;
pufferTemp = int(Tc*100);
}