From 3cc1000622a3ed474964f390505f277c744158e0 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Mon, 13 May 2024 20:09:20 +0800 Subject: [PATCH] good at door contact and SOS button COLOR CHANGES --- Core/Inc/sts_lamp_bar.h | 2 ++ Core/Src/sts_lamp_bar.c | 17 +++++++++-------- Core/Src/yunhorn_sts_presence_rss.c | 4 ++-- Core/Src/yunhorn_sts_process.c | 14 ++++++-------- LoRaWAN/App/lora_app.c | 25 ++++++++++++++++--------- 5 files changed, 35 insertions(+), 27 deletions(-) diff --git a/Core/Inc/sts_lamp_bar.h b/Core/Inc/sts_lamp_bar.h index 25555b3..0fc4802 100644 --- a/Core/Inc/sts_lamp_bar.h +++ b/Core/Inc/sts_lamp_bar.h @@ -32,6 +32,8 @@ extern "C" { #define STS_Status_Door_Close (0) //Normal Close NC:Open #define STS_Status_Door_Open (1) //Normal Close NC:Close +#define STS_Status_SOS_Pushdown (0) //Normal Open NO:Open +#define STS_Status_SOS_Release (1) //Normal Open NO:Close enum sts_lamp_color { STS_DARK = 0, //灭:0 diff --git a/Core/Src/sts_lamp_bar.c b/Core/Src/sts_lamp_bar.c index b633d32..9e2232f 100644 --- a/Core/Src/sts_lamp_bar.c +++ b/Core/Src/sts_lamp_bar.c @@ -56,13 +56,13 @@ uint8_t color_rgb[8][3] = { //STS_COLOR R G B MAPPING TABLE extern volatile uint8_t sts_service_mask; extern volatile uint8_t sts_work_mode; volatile uint8_t sts_reed_hall_ext_int = 0; -volatile uint8_t sts_status_color = STS_DARK; +volatile uint8_t sts_status_color = STS_GREEN; volatile uint8_t sts_lamp_bar_color = STS_GREEN; //puColor volatile uint8_t sts_cloud_netcolor = STS_GREEN; //netColor extern volatile uint8_t sts_occupancy_status; extern volatile uint8_t sts_reed_hall_result, sts_emergency_button_pushed; // inital 0 = close -volatile uint8_t sts_hall1_read=0,sts_hall2_read=0; // Above hall1_read == reed_hall_result, hall2_read == emergency_button +volatile uint8_t sts_hall1_read=STS_Status_Door_Open,sts_hall2_read=STS_Status_SOS_Release; // Above hall1_read == reed_hall_result, hall2_read == emergency_button extern volatile uint8_t sts_reed_hall_1_result, sts_reed_hall_2_result; extern volatile uint8_t sts_tof_result_changed_flag; @@ -74,7 +74,7 @@ extern volatile uint8_t sts_rss_2nd_result; //2nd RSS sensor status extern volatile uint8_t sts_tof_result; //extern volatile uint8_t last_sts_reed_hall_result = 2; //Initial state, not 0, not 1 -volatile uint8_t last_lamp_bar_color; +volatile uint8_t last_lamp_bar_color=STS_GREEN; extern volatile uint8_t sts_presence_fall_detection; extern volatile uint8_t sts_fall_rising_detected_result; extern volatile float sts_presence_rss_distance; @@ -231,7 +231,7 @@ void STS_Combined_Status_Processing(void) { mems_event_time = SysTimeGetMcuTime(); - if ((sts_rss_result == STS_RESULT_MOTION) || (sts_reed_hall_1_result == STS_Status_Door_Close)|| (sts_reed_hall_2_result == STS_Status_Door_Close) || (sts_tof_result == STS_RESULT_PRESENCE)) + if ((sts_rss_result == STS_RESULT_MOTION) || (sts_reed_hall_1_result == STS_Status_Door_Close)|| (sts_reed_hall_2_result == STS_Status_SOS_Pushdown) || (sts_tof_result == STS_RESULT_PRESENCE)) { if (event_start_time == 0) { @@ -243,7 +243,7 @@ void STS_Combined_Status_Processing(void) } - } else if ((sts_rss_result != STS_RESULT_MOTION) || (sts_reed_hall_1_result != STS_Status_Door_Close)|| (sts_reed_hall_2_result != STS_Status_Door_Close) || (sts_tof_result != STS_RESULT_PRESENCE)) + } else if ((sts_rss_result != STS_RESULT_MOTION) || (sts_reed_hall_1_result != STS_Status_Door_Close)|| (sts_reed_hall_2_result != STS_Status_SOS_Pushdown) || (sts_tof_result != STS_RESULT_PRESENCE)) { if (event_stop_time ==0) { @@ -281,11 +281,11 @@ void STS_Combined_Status_Processing(void) } break; case STS_DUAL_MODE: - if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_reed_hall_1_result == STS_Status_Door_Open )&& (sts_reed_hall_2_result == STS_Status_Door_Open )) + if ((sts_rss_result == STS_RESULT_NO_MOTION) && (sts_reed_hall_1_result == STS_Status_Door_Open )&& (sts_reed_hall_2_result == STS_Status_SOS_Release )) { sts_status_color = STS_GREEN; - } else if ((sts_rss_result == STS_RESULT_MOTION) || (sts_reed_hall_1_result == STS_Status_Door_Close )||(sts_reed_hall_2_result == STS_Status_Door_Close )) + } else if ((sts_rss_result == STS_RESULT_MOTION) || (sts_reed_hall_1_result == STS_Status_Door_Close )||(sts_reed_hall_2_result == STS_Status_SOS_Pushdown )) { sts_status_color = STS_RED; if (sts_fall_rising_detected_result == STS_PRESENCE_LAYDOWN) { @@ -298,7 +298,8 @@ void STS_Combined_Status_Processing(void) sts_lamp_bar_color = STS_RED; sts_status_color = STS_RED; } - if (sts_reed_hall_2_result == STS_Status_Door_Close ) { + if (sts_reed_hall_2_result == STS_Status_SOS_Pushdown ) + { sts_status_color = STS_RED_BLUE; } } diff --git a/Core/Src/yunhorn_sts_presence_rss.c b/Core/Src/yunhorn_sts_presence_rss.c index 726b2fc..73f432f 100644 --- a/Core/Src/yunhorn_sts_presence_rss.c +++ b/Core/Src/yunhorn_sts_presence_rss.c @@ -471,10 +471,10 @@ int sts_presence_rss_fall_rise_detection(void) } //APP_LOG(TS_OFF, VLEVEL_L,"Second Half, Fall Rise Detection, Motion Count = %u \r\n", (int)motion_count); - APP_LOG(TS_OFF, VLEVEL_L,"Fall Rise Detection, Motion Count = %u \r\n", (int)motion_count); + APP_LOG(TS_OFF, VLEVEL_H,"Fall Rise Detection, Motion Count = %u \r\n", (int)motion_count); sts_rss_result = (average_result > 3)? 1: 0; - APP_LOG(TS_OFF, VLEVEL_L,"Average Motion Result = %u OUTPUT RSS RESULT=%u \r\n", (int)average_result, sts_rss_result); + APP_LOG(TS_OFF, VLEVEL_H,"Average Motion Result = %u OUTPUT RSS RESULT=%u \r\n", (int)average_result, sts_rss_result); for (k=0; k<10; k++) { if (motion_in_zone[k]>0) APP_LOG(TS_OFF, VLEVEL_L,"\nMotion in Zone %u, Count=%u \r\n", k, motion_in_zone[k]); diff --git a/Core/Src/yunhorn_sts_process.c b/Core/Src/yunhorn_sts_process.c index 2fa09cd..e0acf49 100644 --- a/Core/Src/yunhorn_sts_process.c +++ b/Core/Src/yunhorn_sts_process.c @@ -51,7 +51,7 @@ volatile STS_PRESENCE_SENSOR_Event_Status_t sts_o7_event_status; volatile float sts_distance_rss_distance; extern volatile float sts_presence_rss_distance, sts_presence_rss_score; extern volatile uint8_t sts_hall1_read,sts_hall2_read; -volatile uint8_t sts_reed_hall_1_result=0,sts_reed_hall_2_result=0, last_sts_reed_hall_1_result=0, last_sts_reed_hall_2_result=0; +volatile uint8_t sts_reed_hall_1_result=STS_Status_Door_Open,sts_reed_hall_2_result=STS_Status_SOS_Release, last_sts_reed_hall_1_result=STS_Status_Door_Open, last_sts_reed_hall_2_result=STS_Status_SOS_Release; volatile uint8_t sts_reed_hall_1_changed=0, sts_reed_hall_2_changed=0; volatile uint8_t sts_rss_config_updated_flag = 0; extern volatile uint8_t mems_int1_detected, link_wakeup, link_sleep; @@ -213,16 +213,14 @@ void STS_YunhornSTSEventRFAC_Process(void) void STS_YunhornSTSEventP1_Process(void) { - sts_reed_hall_1_result = (sts_hall1_read==0)?STS_Status_Door_Close:STS_Status_Door_Open; - sts_reed_hall_2_result = (sts_hall2_read==0)?STS_Status_Door_Close:STS_Status_Door_Open; - - sts_reed_hall_1_changed = (sts_reed_hall_1_result != last_sts_reed_hall_1_result); - sts_reed_hall_2_changed = (sts_reed_hall_2_result != last_sts_reed_hall_2_result); + sts_reed_hall_1_result = sts_hall1_read; + sts_reed_hall_1_changed =0; last_sts_reed_hall_1_result = sts_reed_hall_1_result; - last_sts_reed_hall_2_result = sts_reed_hall_2_result; - sts_emergency_button_pushed = sts_reed_hall_2_result; + sts_reed_hall_2_result = sts_hall2_read; + sts_reed_hall_2_changed =0; + last_sts_reed_hall_2_result = sts_reed_hall_2_result; STS_Combined_Status_Processing(); } diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index cae8a3a..2e0a9f6 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -51,6 +51,7 @@ volatile uint8_t sts_ac_code[YUNHORN_STS_AC_CODE_SIZE]={0x0}; extern hmac_result_t hmac_result; extern volatile uint8_t sts_reed_hall_ext_int; extern volatile uint8_t sts_hall1_read, sts_hall2_read; +extern volatile uint8_t sts_reed_hall_1_changed, sts_reed_hall_2_changed; volatile uint8_t sts_reed_hall_result =0, sts_emergency_button_pushed=0; // inital 0 = close extern volatile uint8_t sts_work_mode, sts_cloud_netcolor, sts_lamp_bar_color, sts_status_color; extern volatile uint8_t sts_rss_result_changed_flag, sts_hall1_changed_flag, sts_hall2_changed_flag, sts_reed_hall_changed_flag; @@ -634,9 +635,11 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { #ifdef STS_O7 case HALL1_Pin: - HAL_Delay(150); //de-bouncing + if (sts_reed_hall_1_changed) + { + HAL_Delay(250); //de-bouncing sts_hall1_read = HALL1_STATE; - APP_LOG(TS_OFF, VLEVEL_M, "\n\n Door Contact Read = %02X \r\n", HALL1_STATE); + APP_LOG(TS_OFF, VLEVEL_M, "\n\n Door Contact Read = %02x --%20s\r\n", HALL1_STATE, (HALL1_STATE==STS_Status_Door_Close)?"Door Closed":"Door Opened"); /* Note: when "EventType == TX_ON_TIMER" this GPIO is not initialized */ // if (EventType == TX_ON_EVENT) @@ -645,16 +648,22 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP1), CFG_SEQ_Prio_0); UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); } + //sts_reed_hall_1_changed =0; + } break; case HALL2_Pin: - HAL_Delay(150); //de-bouncing + if (sts_reed_hall_2_changed) + { + HAL_Delay(250); //de-bouncing sts_hall2_read = HALL2_STATE; - APP_LOG(TS_OFF, VLEVEL_M, "\n\n SOS Button Read = %02X \r\n", HALL2_STATE); + APP_LOG(TS_OFF, VLEVEL_M, "\n\n SOS Button Read = %02x --%20s\r\n", HALL2_STATE, (HALL2_STATE==STS_Status_SOS_Pushdown)?"SOS Pushdown":"SOS Released"); //sensor_data_ready =1; UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP1), CFG_SEQ_Prio_0); UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + //sts_reed_hall_2_changed =0; + } break; #else @@ -906,13 +915,11 @@ static void SendTxData(void) UTIL_TIMER_Time_t nextTxIn = 0; uint8_t i = 0; - if (LmHandlerIsBusy() != false){ - APP_LOG(TS_OFF, VLEVEL_L, "\r\n\n\n** ** LmHandlerIsBusy ** **\r\n\n\n"); - } else + if (LmHandlerIsBusy() == false) { AppData.Port = LORAWAN_USER_APP_PORT; //AppData.Buffer[i++] = AppLedStateOn; //#01 - STS_PRESENCE_SENSOR_Prepare_Send_Data(); + //STS_PRESENCE_SENSOR_Prepare_Send_Data(); if ((heart_beat_timer != 0L)) // sensor data OVERWRITE heart-beat message, 2024-05-12 { @@ -927,7 +934,7 @@ static void SendTxData(void) sensor_data_ready =0; - AppData.Buffer[i++] = AppLedStateOn; + //AppData.Buffer[i++] = AppLedStateOn; //i = PrepareSendTxData(); //STS_PRESENCE_SENSOR_Prepare_Send_Data();