You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

214 lines
7.2 KiB

#include <stdbool.h>
//
#include "camera.h"
extern "C"
{
#include "ble_spp_server_demo.h"
#include "light.h"
#include "key.h"
#include "wifi.h"
#include "heating_plate.h"
#include "temp.h"
#include "port.h"
#include "cover.h"
#include "beep.h"
}
#define REACTION_TIME_MS 10 * 60 * 1000
typedef struct
{
bool reaction_start_flag;
uint32_t reaction_start_time;
} reaction_structer_t;
typedef struct
{
bool device_standby_start_flag;
uint32_t device_standby_start_time;
} this_device_standby_t;
/***********************************************************************************************************************
* *******************************************************light******************************************************* *
***********************************************************************************************************************/
power_state_light_structer_t power_state_light_structer = {
.state = ShutDown,
.change_flag = false,
};
heating_plate_state_light_structer_t heating_plate_state_light_structer = {
.state = NoHeat,
.change_flag = false,
};
reaction_state_light_structer_t reaction_state_light_structer = {
.state = NoReaction,
.change_flag = false,
};
wifi_state_light_structer_t wifi_state_light_structer = {
.state = NotConnected,
.change_flag = false,
};
/***********************************************************************************************************************
* ********************************************************key******************************************************** *
***********************************************************************************************************************/
T_key_structer_t T_key_structer = {
.key_before_state = false,
.key_now_state = false,
.key_press_down_keep_time = 0,
};
/***********************************************************************************************************************
* ***************************************************heating_plate*************************************************** *
***********************************************************************************************************************/
heating_plate_structer_t heating_plate_structer = {
.heating_plate_preheat_start_flag = false,
.heating_plate_preheat_finished_flag = false,
};
/***********************************************************************************************************************
* *****************************************************reaction****************************************************** *
***********************************************************************************************************************/
reaction_structer_t reaction_structer = {
.reaction_start_flag = false,
.reaction_start_time = 0,
};
/***********************************************************************************************************************
* *******************************************************wifi******************************************************** *
***********************************************************************************************************************/
wifi_structer_t wifi_structer = {
.wifi_connect_flag = false,
.wifi_distribution_network_flag = false,
.wifi_max_connect_num = 10,
};
/***********************************************************************************************************************
* ****************************************************this_device**************************************************** *
***********************************************************************************************************************/
this_device_standby_t this_device_standby_structer = {
.device_standby_start_flag = false,
.device_standby_start_time = 0,
};
static void T_all_light_init(void)
{
T_power_light_init(&power_state_light_structer);
T_heating_plate_state_light_init(&heating_plate_state_light_structer);
T_reaction_state_light_init(&reaction_state_light_structer);
T_wifi_state_light_init(&wifi_state_light_structer);
}
void process_short_key_event(void)
{
/* 加热完成 */
if (heating_plate_structer.heating_plate_preheat_finished_flag)
{
/* 识别有反应板放入 */
if (camera_recognition_reaction_plate())
{
/* 未开始反应 */
if (!reaction_structer.reaction_start_flag)
{
reaction_structer.reaction_start_flag = true;
reaction_structer.reaction_start_time = port_get_ticket();
T_reaction_light_change_state(Reacting);
}
/* 反应中 */
else
{
}
}
/* 识别没有反应板放入 */
else
{
}
}
/* 加热未完成 */
else
{
T_heating_plate_start();
T_heating_plate_light_set_rgb_by_state(Heating);
}
}
void process_key_long_press_event(void)
{
/* 配网 */
if (!wifi_structer.wifi_distribution_network_flag)
{
T_wifi_light_change_state(Connecting);
if (T_wifi_distribution_network())
{
wifi_structer.wifi_distribution_network_flag = true;
T_wifi_light_change_state(ConnectionComplete);
}
}
}
void T_reaction_schedule(void)
{
if (reaction_structer.reaction_start_flag)
{
/* 反应完成 */
if ((port_get_ticket() - reaction_structer.reaction_start_time) >= REACTION_TIME_MS)
{
beep_set_level(true);
reaction_structer.reaction_start_flag = false;
T_reaction_light_change_state(ReactionComplete);
}
}
if ((heating_plate_structer.heating_plate_preheat_finished_flag == true) && //
(!camera_recognition_reaction_plate()) && !this_device_standby_structer.device_standby_start_flag)
{
this_device_standby_structer.device_standby_start_flag = true;
this_device_standby_structer.device_standby_start_time = port_get_ticket();
}
else
{
this_device_standby_structer.device_standby_start_flag = false;
}
}
void T_this_device_standby_schedule(void)
{
if (this_device_standby_structer.device_standby_start_flag)
{
if ((port_get_ticket() - this_device_standby_structer.device_standby_start_time) >= 600000)
{
T_heating_plate_stop();
T_heating_plate_light_set_rgb_by_state(NoHeat);
T_reaction_light_change_state(NoReaction);
T_wifi_light_change_state(NotConnected);
this_device_standby_structer.device_standby_start_flag = false;
}
}
}
extern "C" void app_main(void)
{
T_debug_light_init();
T_all_light_init();
ble_spp_server_init();
camera_init();
T_key_init(&T_key_structer);
T_wifi_init(&wifi_structer);
T_temp_init();
T_heating_plate_init(&heating_plate_structer);
cover_init();
beep_init();
T_key_registered_cb(process_short_key_event, process_key_long_press_event);
T_wifi_registered_cb();
T_heating_plate_registered_cb(T_temp_get_data);
while (true)
{
T_debug_light_schedule();
T_light_schedule();
T_key_schedule();
T_heating_plate_schedule();
T_reaction_schedule();
T_this_device_standby_schedule();
}
}