143 lines
4.3 KiB
C++
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);
|
|
|
|
}
|