Skip to content
Snippets Groups Projects
Commit 82d79992 authored by wactbprot's avatar wactbprot
Browse files

refactor done

parent 2f018a8e
No related branches found
No related tags found
No related merge requests found
......@@ -83,6 +83,7 @@ void setup() {
Controllino_SetTimeDate(0,0,0,0,0,0,0); // set initial values to the RTC chip
pinMode(CONTROLLINO_AO0, OUTPUT);
pinMode(CONTROLLINO_RELAY_00, OUTPUT);
pinMode(CONTROLLINO_AO1, OUTPUT);
pinMode(CONTROLLINO_AI12, INPUT);
pinMode(CONTROLLINO_AI13, INPUT);
......@@ -148,8 +149,8 @@ unsigned long get_t3(){
return t2 +(TARGETTEMPHIGH-TARGETTEMPEND)/TEMPSLOPEPERHOUR*HOURTOSECOND;
}
char get_current_state() {
char state = 'n'; //u<n>defined
String current_state() {
String state = "unknown"; //u<n>defined
unsigned long rel_time = get_rel_seconds();
unsigned long abs_time = get_abs_seconds();
......@@ -158,155 +159,131 @@ char get_current_state() {
unsigned long t3 = get_t3();
if (start_time == 0 || abs_time < start_time) {
state = 'w'; // waiting for start
state = "waiting"; // waiting for start
} else {
if(rel_time < t1) {
state = 'u'; // ramp <u>p
state = "ramp_up"; // ramp <u>p
}
if(rel_time > t1 && rel_time < t2) {
state = 'b'; // <b>akeout
state = "bakeout"; // <b>akeout
}
if(rel_time > t2 && rel_time < t3) {
state = 'd'; // ramp <d>own'
state = "ramp_down"; // ramp <d>own'
}
if(rel_time > t3) {
state = 'e'; // <e>nd hold
state = "hold_end"; // <e>nd hold
}
}
Serial.print("current state is (w: waiting for start time, u:ramp up, b: bake out, d:ramp down, e: end hold): ");
Serial.print("current state: ");
Serial.print(state);
Serial.println("\n");
return state;
}
void set_indicators() {
char state = get_current_state();
void set_indicators(String state, float tt, float ct) {
switch(state){
case 'w':
float upper_limit = tt+BREAKDEVTEMP;
float lower_limit = tt-BREAKDEVTEMP;
if(ct <= upper_limit && ct >= lower_limit && state != "waiting" && state != "unknown") {
// start relay
digitalWrite(CONTROLLINO_RELAY_00, true);
}
if(state == "waiting") {
digitalWrite(CONTROLLINO_D0, true);
digitalWrite(CONTROLLINO_D1, false);
digitalWrite(CONTROLLINO_D2, false);
digitalWrite(CONTROLLINO_D3, false);
digitalWrite(CONTROLLINO_D4, false);
break;
case 'u':
}
if(state == "ramp_up") {
digitalWrite(CONTROLLINO_D0, false);
digitalWrite(CONTROLLINO_D1, true);
digitalWrite(CONTROLLINO_D2, false);
digitalWrite(CONTROLLINO_D3, false);
digitalWrite(CONTROLLINO_D4, false);
break;
case 'b':
}
if(state == "bakeout") {
digitalWrite(CONTROLLINO_D0, false);
digitalWrite(CONTROLLINO_D1, false);
digitalWrite(CONTROLLINO_D2, true);
digitalWrite(CONTROLLINO_D3, false);
digitalWrite(CONTROLLINO_D4, false);
break;
case 'd':
}
if (state == "ramp_down"){
digitalWrite(CONTROLLINO_D0, false);
digitalWrite(CONTROLLINO_D1, false);
digitalWrite(CONTROLLINO_D2, false);
digitalWrite(CONTROLLINO_D3, true);
digitalWrite(CONTROLLINO_D4, false);
break;
case 'e':
}
if (state == "hold_end"){
digitalWrite(CONTROLLINO_D0, false);
digitalWrite(CONTROLLINO_D1, false);
digitalWrite(CONTROLLINO_D2, false);
digitalWrite(CONTROLLINO_D3, false);
digitalWrite(CONTROLLINO_D4, true);
break;
}
if(ct <= upper_limit && ct > tt) {
digitalWrite(CONTROLLINO_D6, false);
digitalWrite(CONTROLLINO_D7, true);
}
if(ct >= lower_limit && ct < tt) {
digitalWrite(CONTROLLINO_D6, true);
digitalWrite(CONTROLLINO_D7, false);
}
if(ct <= BREAKTEMP || ct <= lower_limit) {
digitalWrite(CONTROLLINO_D6, true);
digitalWrite(CONTROLLINO_D7, false);
digitalWrite(CONTROLLINO_RELAY_00, false);
}
if(ct >= MAXTEMP || ct > upper_limit) {
digitalWrite(CONTROLLINO_D6, false);
digitalWrite(CONTROLLINO_D7, true);
digitalWrite(CONTROLLINO_RELAY_00, false);
}
}
float get_target_temperature() {
float curr_temp = get_current_temperature();
float get_target_temperature(String state, float ct) {
unsigned long t1 = get_t1();
unsigned long t2 = get_t2();
unsigned long t3 = get_t3();
unsigned long rel_time = get_rel_seconds();
char state = get_current_state();
float target_temp = curr_temp;
switch(state){
case 'n':
break;
case 'w':
target_temp = curr_temp;
break;
case 'u':
target_temp = ROOMTEMP+TEMPSLOPEPERHOUR*rel_time/HOURTOSECOND;
break;
case 'b':
target_temp = TARGETTEMPHIGH;
break;
case 'd':
target_temp = TARGETTEMPHIGH-TEMPSLOPEPERHOUR*(rel_time-t2)/HOURTOSECOND;
break;
case 'e':
target_temp = TARGETTEMPEND;
break;
}
float tt = ct;
if (state == "waiting") {
tt = ct;
}
if (state == "ramp_up"){
tt = ROOMTEMP+TEMPSLOPEPERHOUR*rel_time/HOURTOSECOND;
}
if (state == "bakeout"){
tt = TARGETTEMPHIGH;
}
if (state == "ramp_down"){
tt = TARGETTEMPHIGH-TEMPSLOPEPERHOUR*(rel_time-t2)/HOURTOSECOND;
}
if (state == "hold_end") {
tt = TARGETTEMPEND;
}
Serial.print("temperature should: ");
Serial.print(target_temp);
Serial.print(tt);
Serial.println(" C\n");
return target_temp;
}
void set_break_temperature(bool s) {
digitalWrite(CONTROLLINO_D6, s);
digitalWrite(CONTROLLINO_RELAY_00, !s);
}
void set_under_temperature(bool s) {
digitalWrite(CONTROLLINO_D6, s);
digitalWrite(CONTROLLINO_RELAY_00, !s);
}
void set_over_temperature(bool s) {
// open R0 (Klemme1-2)
digitalWrite(CONTROLLINO_D7, s);
digitalWrite(CONTROLLINO_RELAY_00, !s);
}
void set_max_temperature(bool s) {
// open R0 (Klemme1-2)
digitalWrite(CONTROLLINO_D7, s);
digitalWrite(CONTROLLINO_RELAY_00, !s);
return tt;
}
float get_rel_heatpower(float targ_temp, float curr_temp) {
float get_rel_heatpower(String state, float tt, float ct) {
float p = 0.0;
float d = targ_temp-curr_temp;
float upper_limit = targ_temp+BREAKDEVTEMP;
float lower_limit = targ_temp-BREAKDEVTEMP;
float d = tt-ct;
float upper_limit = tt+BREAKDEVTEMP;
float lower_limit = tt-BREAKDEVTEMP;
if(curr_temp <= BREAKTEMP) {
set_break_temperature(true);
p = 0.0;
}
if(curr_temp >= MAXTEMP) {
set_max_temperature(true);
p = 0.0;
}
if(curr_temp >= upper_limit) {
set_over_temperature(true);
p = 0.0;
}
if(curr_temp <= lower_limit) {
set_under_temperature(true);
p = 0.0;
}
if(d <= 0 && curr_temp <= upper_limit ) {
set_over_temperature(false);
p = 0.0;
}
if(curr_temp < targ_temp && curr_temp > lower_limit){
set_under_temperature(false);
if(ct < tt && ct > lower_limit && state != "unknown" && state != "waiting"){
p = d/BREAKDEVTEMP;
}
......@@ -317,12 +294,11 @@ float get_rel_heatpower(float targ_temp, float curr_temp) {
return p;
}
void set_voltage() {
char s = get_current_state();
if (s == 'u' || s == 'b' || s == 'd' || s == 'e') {
float ct = get_current_temperature();
float tt = get_target_temperature();
float hp = get_rel_heatpower(tt, ct);
void set_voltage(String state, float tt, float ct) {
if (state != "unknown" && state != "waiting") {
float hp = get_rel_heatpower(state, tt, ct);
float v = hp*MAXVOLT*CTRLFACTOR;
float V = v/MAXVOLT*255;
......@@ -374,7 +350,7 @@ String net_exec(String cmd, String param) {
String res = "unknown cmd\n";
if ( cmd == "state") {
res = String(get_current_state());
res = current_state();
}
if( cmd == "runtime") {
......@@ -382,9 +358,10 @@ String net_exec(String cmd, String param) {
}
if (cmd == "heatpower") {
String state = current_state();
float ct = get_current_temperature();
float tt = get_target_temperature();
float hp = get_rel_heatpower(tt, ct);
float tt = get_target_temperature(state, ct);
float hp = get_rel_heatpower(state, tt, ct);
res = String(hp);
}
......@@ -402,10 +379,15 @@ String net_exec(String cmd, String param) {
}
void loop() {
Serial.print("--> start loop\n");
String state = current_state();
float ct = get_current_temperature();
float tt = get_target_temperature(state, ct);
net_read();
set_voltage();
set_indicators();
set_voltage(state, tt, ct);
set_indicators(state, tt, ct);
Serial.print("<-- end loop\n");
delay(1000);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment