From 44485eac013a3d6906ca515a22501285faf62403 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20K=C3=B6gl?= Date: Sat, 10 Nov 2012 15:35:54 +0100 Subject: [PATCH] added missing file --- main.cpp | 18 ++++ profile_control.cpp | 229 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 247 insertions(+) create mode 100644 main.cpp create mode 100644 profile_control.cpp diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..0e1da61 --- /dev/null +++ b/main.cpp @@ -0,0 +1,18 @@ +// include the library code: +#include +#include +#include "profile.h" +#include "oven_control.h" + +OvenCtl oven_ctl; + + +void setup() { + Serial.begin(9600); + delay(300); +// oven_ctl.set_config_state(); +} + +void loop() { + oven_ctl.loop(); +} diff --git a/profile_control.cpp b/profile_control.cpp new file mode 100644 index 0000000..b169425 --- /dev/null +++ b/profile_control.cpp @@ -0,0 +1,229 @@ + +void OvenCtl::handle_config_state() { + +} + +void OvenCtl::check_max_duration() { + if (disable_checks) + return; + if (time > profile.data[PI_TIME_MAX]) { + error_condition |= E_TIME_MAX; + } +} + +void OvenCtl::check_Ts_duration_min() { + if (disable_checks) + return; + Tl_time_end = time; + if (time - Tl_time_start < profile.data[PI_TL_DURATION_MIN]) { + error_condition |= E_TL_TOO_SHORT; + } +} + +void OvenCtl::check_Ts_duration_max() { + if (disable_checks) + return; + if (time - Ts_time_start > profile.data[PI_TL_DURATION_MAX]) { + error_condition |= E_TS_TOO_LONG; + } +} + + +void OvenCtl::check_Tl_duration_min() { + if (disable_checks) + return; + Tl_time_end = time; + if (time - Tl_time_start < profile.data[PI_TL_DURATION_MIN]) { + error_condition |= E_TL_TOO_SHORT; + } +} + +void OvenCtl::check_Tl_duration_max() { + if (disable_checks) + return; + if (time - Tl_time_start > profile.data[PI_TL_DURATION_MAX]) { + error_condition |= E_TL_TOO_LONG; + } +} + +void OvenCtl::check_Tp_duration_min() { + Tp_time_end = time; + if (time - Tp_time_start < profile.data[PI_TP_DURATION_MIN]) { + error_condition |= E_TP_TOO_SHORT; + } +} + +void OvenCtl::check_Tp_duration_max() { + if (disable_checks) + return; + if (time - Tp_time_start > profile.data[PI_TP_DURATION_MAX]) { + error_condition |= E_TP_TOO_LONG; + } +} + +void OvenCtl::set_config_state() { + profile.print_config_state_0(); +} + +void OvenCtl::set_start_state() { + error_condition = 0; + profile_state = START_STATE; + get_temp(); + last_temperature = temperature; + actual_dt = float(temperature) - last_temperature; + set_temp(profile.data[PI_TS_MAX], profile.data[PI_TS_MAX], 0, profile.data[PI_TS_RAMP_UP_MAX]); + lcd.clear(); +} + + +void OvenCtl::set_preheat_state() { +// Serial.println("Changing profile_state to PREHEAT_STATE"); + profile_state = PREHEAT_STATE; +} + + +void OvenCtl::set_ramp_up_state() { + set_temp(profile.data[PI_TP_MIN], profile.data[PI_TP_DURATION_MAX], profile.data[PI_TP_RAMP_UP_MIN], profile.data[PI_TP_RAMP_UP_MAX]); + profile_state = RAMP_UP_STATE; +} + + +void OvenCtl::set_tal_first_state() { + profile_state = TAL_FIRST_STATE; +} + + +void OvenCtl::set_peak_state() { + profile_state = PEAK_STATE; +} + + +void OvenCtl::set_tal_second_state() { + set_temp(0, 25, -3, -6); + profile_state = TAL_SECOND_STATE; +} + + +void OvenCtl::set_ramp_down_state() { + profile_state = RAMP_DOWN_STATE; +} + + +void OvenCtl::set_end_state() { + profile_state = END_STATE; +} + + +void OvenCtl::set_error_state() { + if (profile_state != ERROR_STATE) { + set_temp(0, 0, 0, 0); + profile_state = ERROR_STATE; + } +} + + +void OvenCtl::handle_start_state() { + check_max_duration(); + if (temperature > profile.data[PI_TS_MIN]) { + Ts_time_start = time; + set_preheat_state(); + } +} + + +void OvenCtl::handle_preheat_state() { + check_Ts_duration_max(); + check_max_duration(); + if (temperature > profile.data[PI_TS_MAX]) { + check_Ts_duration_min(); + set_ramp_up_state(); + } +} + + +void OvenCtl::handle_ramp_up_state() { + check_max_duration(); + if (temperature > profile.data[PI_TL]) { + Tl_time_start = time; + set_tal_first_state(); + } +} + + +void OvenCtl::handle_tal_first_state() { + check_max_duration(); + check_Tl_duration_max(); + if (temperature > profile.data[PI_TP_MIN]) { + Tp_time_start = time; + set_peak_state(); + } +} + + +void OvenCtl::handle_peak_state() { + check_Tl_duration_max(); + check_Tp_duration_max(); + if (time - Tp_time_start > profile.data[PI_TP_DURATION_MAX]) { + check_Tp_duration_min(); + set_tal_second_state(); + } +} + + +void OvenCtl::handle_tal_second_state() { + check_Tl_duration_max(); + if (temperature < profile.data[PI_TL]) { + check_Tl_duration_min(); + set_ramp_down_state(); + } +} + +void OvenCtl::handle_ramp_down_state() { + if (temperature < profile.data[PI_TS_MIN]) { + set_end_state(); + } +} + + +void OvenCtl::handle_end_state() { +} + + +void OvenCtl::handle_error_state() { +} + +void OvenCtl::handle_profile_states() { +// switch (profile_state) { +// case START_STATE: +// handle_start_state(); +// break; +// case PREHEAT_STATE: +// handle_preheat_state(); +// break; +// case RAMP_UP_STATE: +// handle_ramp_up_state(); +// break; +// case TAL_FIRST_STATE: +// handle_tal_first_state(); +// break; +// case PEAK_STATE: +// handle_peak_state(); +// break; +// case TAL_SECOND_STATE: +// Tl_time_end = time; +// handle_tal_second_state(); +// break; +// case RAMP_DOWN_STATE: +// handle_ramp_down_state(); +// break; +// case END_STATE: +// handle_end_state(); +// break; +// case ERROR_STATE: +// handle_error_state(); +// break; +// default: +// break; +// } +} +