From 1ebb084c4d5216f4e5e3e61a63c88f568caf779e Mon Sep 17 00:00:00 2001
From: zhyinch <zhyinch@gmail.com>
Date: 星期五, 28 九月 2018 11:27:10 +0800
Subject: [PATCH] 增加多标签测距功能,标签有bug,长时间会死机

---
 源码/核心板/Src/application/dw_app.h         |    4 +
 源码/核心板/Src/main.c                       |   10 +++-
 源码/核心板/Src/application/beep_logic_app.c |   14 +++++-
 源码/核心板/Src/stm32f10x_it.c               |   16 ++++---
 源码/核心板/Src/application/dw_app.c         |   23 +++++++++++
 5 files changed, 52 insertions(+), 15 deletions(-)

diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/beep_logic_app.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/beep_logic_app.c"
index d93e96f..945a7e9 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/beep_logic_app.c"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/beep_logic_app.c"
@@ -5,14 +5,22 @@
 #include "dw_app.h"
 
 void main_logic(void)	//主逻辑在这里执行
-{
+{uint16_t i, min_dist;
 	//除UWB之外的其他代码...
 	static uint16_t beep_judge_cnt = 0;
 	if(beep_judge_cnt++ >= 200)
 	{	
 		beep_judge_cnt = 0;
-		
-		if(dis_after_filter <= g_com_map[ALARM_DISTANCE])
+		min_dist=0xffff;
+		for(i = 0; i < 255;i++)
+		{
+			if(g_Tagdist[i] < min_dist)
+			{
+				min_dist=g_Tagdist[i];
+			}
+				
+		}
+		if(min_dist <= g_com_map[ALARM_DISTANCE])
 		{
 			switch(g_com_map[ALARM_DEV]) 
 			{
diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
index bdd2e5a..731f7e8 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
@@ -138,6 +138,8 @@
 float dis_after_filter;				//当前距离值
 LPFilter_Frac* p_Dis_Filter;		//测距用的低通滤波器
 
+uint16_t g_Tagdist[256];
+uint8_t g_flag_Taggetdist[256];
 /*------------------------------------ Functions ------------------------------------------*/
 
 
@@ -219,7 +221,23 @@
         *ts += ts_field[i] << (i * 8);
     }
 }
-
+void TagDistClear(void)
+{
+	static uint16_t clear_judge_cnt;
+	uint16_t i;
+	if(clear_judge_cnt++>1000)  //设定1S分频,每秒进一次。判断标志位大于等于2,2s没收到数据就把数据变成0xffff,不触发警报。
+	{
+		clear_judge_cnt=0;
+		for(i=0;i<255;i++)
+		{
+			g_flag_Taggetdist[i]++;
+			if(g_flag_Taggetdist[i]>=2)
+			{
+				g_Tagdist[i]=0xffff;
+			}
+		}
+	}
+}
 void Dw1000_Init(void)
 {
 	/* Reset and initialise DW1000.
@@ -245,6 +263,7 @@
 }
 void Dw1000_App_Init(void)
 {
+	g_com_map[DEV_ID]=0x03;
 	tx_poll_msg[MESSAGE_TYPE_IDX]=POLL;
 	tx_resp_msg[MESSAGE_TYPE_IDX]=RESPONSE;
 	tx_final_msg[MESSAGE_TYPE_IDX]=FINAL;
@@ -469,6 +488,8 @@
 					LED0_BLINK; //每成功一次通讯则闪烁一次
 					g_UWB_com_interval = 0;
 					dis_after_filter=dist_cm;
+					g_Tagdist[tag_id_recv]=dist_cm;
+					g_flag_Taggetdist[tag_id_recv]=0;
 					//dis_after_filter = LP_Frac_Update(p_Dis_Filter, dist_cm);
 
 				}
diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.h" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.h"
index 3d77926..c232afa 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.h"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.h"
@@ -17,5 +17,7 @@
 void Tag_App(void);
 void Anchor_App(void);
 void tag_sleep_configuraion(void);
-
+extern uint16_t g_Tagdist[256];
+extern uint8_t g_flag_Taggetdist[256];
+extern void TagDistClear(void);
 #endif
diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c"
index 673affa..4d5adbc 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c"
@@ -10,8 +10,8 @@
 #include "serial_at_cmd_app.h"
 #include "global_param.h"
 
-#define WORK_MODE_TAG
-//#define WORK_MODE_ANCHOR
+//#define WORK_MODE_TAG
+#define WORK_MODE_ANCHOR
 
 void Device_Init(void)
 {
@@ -33,9 +33,13 @@
 }
 
 void Program_Init(void)
-{
+{uint16_t i;
 	Usart1ParseDataCallback = UsartParseDataHandler;
 	parameter_init();
+	for(i=0;i<255;i++)
+	{
+		g_Tagdist[i]=0xffff;
+	}
 }
 
 /*! ------------------------------------------------------------------------------------------------------------------
diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/stm32f10x_it.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/stm32f10x_it.c"
index c2822c2..69e2a34 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/stm32f10x_it.c"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/stm32f10x_it.c"
@@ -31,15 +31,17 @@
 volatile uint32_t time32_incr;
 uint8_t tt=0;
 uint8_t g_start_send_flag = 0;
-
+uint16_t sysscal;
 void SysTick_Handler(void)
-{
-    time32_incr++;
+{uint16_t i;
+  time32_incr++;
 	g_UWB_com_interval++;
-	if(g_UWB_com_interval > 1000)
-	{	
-		dis_after_filter = DEFAULT_DISTANCE;
-	}
+	
+//	if(g_UWB_com_interval > 1000)
+//	{	
+//		dis_after_filter = DEFAULT_DISTANCE;
+//	}
+TagDistClear();
 	main_logic();
 	
 

--
Gitblit v1.9.3