reflow/firmware/oven_control.h

140 lines
3.0 KiB
C++

#ifndef _H_OVEN_CTL
#define _H_OVEN_CTL
/*
// operational states
#define OP_CONFIG 0
#define OP_STAND_ALONE 1
#define OP_REMOTE 2*/
enum OVEN_MODE {
OM_CONFIG,
OM_CALIBRATION,
OM_STAND_ALONE,
OM_REMOTE
};
enum COMMAND {
SEND_CONFIG,
RECV_CONFIG,
SEND_STATE,
RECV_STEPS
};
#define E_DT_MIN 1 // temperature dt too small
#define E_DT_MAX 2 // temperature dt too big
#define E_TIME_MAX 4 // reflow process does take too long
#define E_TS_TOO_SHORT 8 // Ts duration too short
#define E_TS_TOO_LONG 16 // Ts duration too long
#define E_TL_TOO_SHORT 32 // Tl duration too short
#define E_TL_TOO_LONG 64 // Tl duration too long
#define E_TP_TOO_SHORT 128 // Tp duration too short
#define E_TP_TOO_LONG 256 // Tp duration too long
#define E_CONFIG 512 // error happened in config state
// profile states
enum PROFILE_STATE {
START_STATE,
PREHEAT_STATE,
RAMP_UP_STATE,
TAL_FIRST_STATE,
PEAK_STATE,
TAL_SECOND_STATE,
RAMP_DOWN_STATE,
END_STATE,
ERROR_STATE
};
#include <Arduino.h>
class LiquidCrystal;
class DFR_Key;
class Profile;
extern Profile profile;
class OvenCtl {
public:
OvenCtl();
void loop();
// void set_config_state();
private:
// system time, timestamps and temperatures from sensors
int time; // profile seconds
int temperature; // actual oven temp
int last_temperature; // last oven temp
float actual_dt; // actual difference from last to actual temperatur
// thermostat
float set_min;
float set_max;
int set_dt_min;
int set_dt_max;
float ramp_up_hysteresis; // duration in seconds
float ramp_down_hysteresis; // duration in seconds
float actual_hysteresis; // duration in seconds
// ui stuff
boolean disable_checks;
// state machine
unsigned int error_condition;
OVEN_MODE oven_mode;
PROFILE_STATE profile_state;
boolean is_oven_heating;
void print_status();
void control_oven();
void set_temp(int, int, int, int);
void get_temp();
void check_dt();
void check_max_duration();
// void set_start_state();
// void set_preheat_state();
// void set_tal_first_state();
// void set_ramp_up_state();
// void set_peak_state();
// void set_tal_second_state();
// void set_ramp_down_state();
// void set_end_state();
// void set_error_state();
// void handle_profile_states();
void handle_stand_alone_state();
void handle_remote_state();
// void handle_config_state();
// void handle_start_state();
// void handle_ramp_up_state();
// void handle_preheat_state();
// void handle_tal_first_state();
// void handle_peak_state();
// void handle_tal_second_state();
// void handle_ramp_down_state();
// void handle_end_state();
// void handle_error_state();
// void check_Ts_duration_min();
// void check_Ts_duration_max();
// void check_Tl_duration_min();
// void check_Tl_duration_max();
// void check_Tp_duration_min();
// void check_Tp_duration_max();
// commands
void send_state();
void send_config();
void recv_config();
void dispatch_remote_cmd(COMMAND cmd);
};
#endif