191 lines
4.3 KiB
C++
191 lines
4.3 KiB
C++
|
#include "profile.h"
|
||
|
#include "oven_control.h"
|
||
|
#include <LiquidCrystal.h>
|
||
|
#include <DFR_Key.h>
|
||
|
|
||
|
#define P_TS_MIN 0
|
||
|
#define P_TS_MAX 1
|
||
|
#define P_TL 2
|
||
|
#define P_TP 3
|
||
|
#define P_TIME_MAX 4
|
||
|
|
||
|
// PROFILE TEMP PER SECOND RATES
|
||
|
#define P_RAMP_UP_RATE_MIN 5
|
||
|
#define P_RAMP_UP_RATE_MAX 6
|
||
|
#define P_RAMP_DOWN_MAX 7
|
||
|
#define P_RAMP_DOWN_MIN 8
|
||
|
|
||
|
// PROFILE TEMP DURATIONS
|
||
|
#define P_TS_DURATION_MIN 9
|
||
|
#define P_TS_DURATION_MAX 10
|
||
|
#define P_TL_DURATION_MIN 11
|
||
|
#define P_TL_DURATION_MAX 12
|
||
|
#define P_TP_DURATION_MIN 13
|
||
|
#define P_TP_DURATION_MAX 14
|
||
|
#define P_END 15
|
||
|
|
||
|
|
||
|
Profile::Profile() :
|
||
|
data({150, // °C
|
||
|
200, // °C
|
||
|
217, // °C
|
||
|
260, // 245-260°C
|
||
|
480, // seconds
|
||
|
|
||
|
// profile temp per second rates
|
||
|
0, // not used yet
|
||
|
50, // 3°C/second
|
||
|
-2, // 2°C/seconds min
|
||
|
-6, // 6°C/seconds max
|
||
|
|
||
|
// profile temp durations
|
||
|
60,
|
||
|
180,
|
||
|
60,
|
||
|
150,
|
||
|
20,
|
||
|
40}),
|
||
|
config_index(0),
|
||
|
config_state(0),
|
||
|
key(NO_KEY) {}
|
||
|
|
||
|
boolean Profile::handle_config_state(LiquidCrystal * lcd, DFR_Key * keypad) {
|
||
|
boolean changed = false;
|
||
|
|
||
|
key = keypad->getKey();
|
||
|
|
||
|
switch (config_state) {
|
||
|
case 0:
|
||
|
if (key == SELECT_KEY) {
|
||
|
config_state = 2;
|
||
|
}
|
||
|
else if (key > 0) {
|
||
|
config_state++;
|
||
|
print_config_state(lcd);
|
||
|
}
|
||
|
break;
|
||
|
case 1:
|
||
|
switch (key) {
|
||
|
case LEFT_KEY:
|
||
|
config_index = (config_index-1) % P_END;
|
||
|
changed = true;
|
||
|
break;
|
||
|
case RIGHT_KEY:
|
||
|
config_index = (config_index+1) % P_END;
|
||
|
changed = true;
|
||
|
break;
|
||
|
case UP_KEY:
|
||
|
data[config_index]++;
|
||
|
changed = true;
|
||
|
break;
|
||
|
case DOWN_KEY:
|
||
|
data[config_index]--;
|
||
|
changed = true;
|
||
|
break;
|
||
|
case SELECT_KEY:
|
||
|
config_state = 2;
|
||
|
break;
|
||
|
default:
|
||
|
;
|
||
|
}
|
||
|
if (changed)
|
||
|
print_config_state(lcd);
|
||
|
break;
|
||
|
case 2:
|
||
|
return true;
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
void Profile::print_config_state_0(LiquidCrystal * lcd) {
|
||
|
lcd->clear();
|
||
|
lcd->setCursor(0, 0);
|
||
|
lcd->print("start | config");
|
||
|
lcd->setCursor(0, 1);
|
||
|
lcd->print("[sel] | [other]");
|
||
|
}
|
||
|
|
||
|
void Profile::print_config_state(LiquidCrystal * lcd) {
|
||
|
lcd->clear();
|
||
|
switch (config_index) {
|
||
|
case P_TS_MIN:
|
||
|
lcd->setCursor(0,0);
|
||
|
lcd->print("P_TS_MIN: ");
|
||
|
lcd->print(data[PI_TS_MIN]);
|
||
|
break;
|
||
|
case P_TS_MAX:
|
||
|
lcd->setCursor(0,0);
|
||
|
lcd->print("P_TS_MAX: ");
|
||
|
lcd->print(data[PI_TS_MAX]);
|
||
|
break;
|
||
|
case P_TL:
|
||
|
lcd->setCursor(0,0);
|
||
|
lcd->print("Tl: ");
|
||
|
lcd->print(data[PI_TL]);
|
||
|
break;
|
||
|
case P_TP:
|
||
|
lcd->setCursor(0,0);
|
||
|
lcd->print("Tp: ");
|
||
|
lcd->print(data[PI_TP]);
|
||
|
break;
|
||
|
case P_TIME_MAX:
|
||
|
lcd->setCursor(0,0);
|
||
|
lcd->print("time_max: ");
|
||
|
lcd->print(data[PI_TIME_MAX]);
|
||
|
break;
|
||
|
|
||
|
// PROFILE TEMP PER SECOND RATES
|
||
|
case P_RAMP_UP_RATE_MIN:
|
||
|
lcd->setCursor(0,0);
|
||
|
lcd->print("ramp_up_min: ");
|
||
|
lcd->print(data[PI_RAMP_UP_MIN]);
|
||
|
break;
|
||
|
case P_RAMP_UP_RATE_MAX:
|
||
|
lcd->setCursor(0,0);
|
||
|
lcd->print("ramp_up_max: ");
|
||
|
lcd->print(data[PI_RAMP_UP_MAX]);
|
||
|
break;
|
||
|
case P_RAMP_DOWN_MAX:
|
||
|
lcd->setCursor(0,0);
|
||
|
lcd->print("ramp_down_min: ");
|
||
|
lcd->print(data[PI_RAMP_DOWN_MIN]);
|
||
|
break;
|
||
|
case P_RAMP_DOWN_MIN:
|
||
|
lcd->setCursor(0,0);
|
||
|
lcd->print("ramp_down_max: ");
|
||
|
lcd->print(data[PI_RAMP_DOWN_MAX]);
|
||
|
break;
|
||
|
|
||
|
// PROFILE TEMP DURATIONS
|
||
|
case P_TS_DURATION_MIN:
|
||
|
lcd->setCursor(0,0);
|
||
|
lcd->print("Ts_duration_min: ");
|
||
|
lcd->print(data[PI_TS_DURATION_MIN]);
|
||
|
break;
|
||
|
case P_TS_DURATION_MAX:
|
||
|
lcd->setCursor(0,0);
|
||
|
lcd->print("Ts_duration_max: ");
|
||
|
lcd->print(data[PI_TS_DURATION_MAX]);
|
||
|
break;
|
||
|
case P_TL_DURATION_MIN:
|
||
|
lcd->setCursor(0,0);
|
||
|
lcd->print("Tl_duration_min: ");
|
||
|
lcd->print(data[PI_TL_DURATION_MIN]);
|
||
|
break;
|
||
|
case P_TL_DURATION_MAX:
|
||
|
lcd->setCursor(0,0);
|
||
|
lcd->print("Tl_duration_max: ");
|
||
|
lcd->print(data[PI_TL_DURATION_MAX]);
|
||
|
break;
|
||
|
case P_TP_DURATION_MIN:
|
||
|
lcd->setCursor(0,0);
|
||
|
lcd->print("Tp_duration_min: ");
|
||
|
lcd->print(data[PI_TP_DURATION_MIN]);
|
||
|
break;
|
||
|
case P_TP_DURATION_MAX:
|
||
|
lcd->setCursor(0,0);
|
||
|
lcd->print("Tp_duration_max: ");
|
||
|
lcd->print(data[PI_TP_DURATION_MAX]);
|
||
|
break;
|
||
|
}
|
||
|
}
|