#include #include #include #include #include #include #include "sensor.h" #include "status.h" struct rt_event robot_event; // 机器人的控制事件 #define THREAD_PRIORITY 25 #define THREAD_STACK_SIZE 4096 #define THREAD_TIMESLICE 5 #define LOG_TAG "status" #define DBG_LVL DBG_LOG // #define DBG_LVL DBG_INFO #define USE_LOG1 #define USE_LOG2 #define USE_LOG3 // #define USE_LOG4 #define USE_LOG5 // #define USE_LOG6 // #define USE_LOG_D #include "logn.h" /* 配置 LED 灯引脚 */ #define PIN_LED_B GET_PIN(E, 12) #define LED_ON PIN_HIGH #define LED_OFF PIN_LOW /* 配置蜂鸣器引脚 */ #define PIN_BEEP GET_PIN(B, 0) // PA1: BEEP --> BEEP (PB1) int light_status = 0; int fan_status = 0; void fan_on(void) { fan_status = 1; LOG3("fan on!"); motor_speed(100); } void fan_off(void) { fan_status = 0; // LOG3("fan off!"); motor_speed(0); } void light_on(void) { LOG3("light on!"); rt_pin_mode(PIN_LED_B, PIN_MODE_OUTPUT); rt_pin_write(PIN_LED_B, LED_ON); } void light_off(void) { // LOG3("light off!"); rt_pin_mode(PIN_LED_B, PIN_MODE_OUTPUT); rt_pin_write(PIN_LED_B, LED_OFF); } void beep_on(void) { rt_pin_mode(PIN_BEEP, PIN_MODE_OUTPUT); rt_pin_write(PIN_BEEP, PIN_HIGH); rt_thread_mdelay(100); } MSH_CMD_EXPORT_ALIAS(beep_on, beep, show beep_on); void beep_off(void) { rt_pin_mode(PIN_BEEP, PIN_MODE_OUTPUT); rt_pin_write(PIN_BEEP, PIN_LOW); } MSH_CMD_EXPORT_ALIAS(beep_off, P2, show beep_off); void danger_status(void) { rt_event_send(&robot_event, EVENT_DELAY); char *str = "aa"; serial_send(str); sim_call("17318112360"); fan_on(); light_on(); // LED_BreathMore(0,LED_NUM-1,LED_RED); } MSH_CMD_EXPORT_ALIAS(danger_status, danger, show danger_status); void normal_status(void) { if (fan_status == 0) fan_off(); if (light_status == 0) light_off(); beep_off(); // LED_SetMore(0,LED_NUM-1,LEDI_OFF); } void collect_entry(void *parameter) { while (1) { if (rt_event_recv(&robot_event, EVENT_DELAY, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, RT_WAITING_FOREVER, NULL) == RT_EOK) { rt_thread_mdelay(10000); if(cnt_warning>0) { beep_on(); } } } } int status_init(void) { rt_err_t result; rt_thread_t collect_tid; result = rt_event_init(&robot_event, "robotE", RT_IPC_FLAG_PRIO); if (result != RT_EOK) { rt_kprintf("init robot_event failed.\n"); return -1; } collect_tid = rt_thread_create("collecT", collect_entry, NULL, 2048, 12, 10); if (collect_tid) { rt_thread_startup(collect_tid); } else { LOG_E("create collect thread failed!"); return -RT_ENOMEM; } return RT_EOK; }