From 9b1cdedb33543cd3a5d3a88f0786311af3aeb08e Mon Sep 17 00:00:00 2001
From: chen <15335560115@163.com>
Date: 星期四, 15 八月 2024 13:50:30 +0800
Subject: [PATCH] 增加了闪灯逻辑以及gps解析逻辑以及添加了搜索模式逻辑等,并且为之前的chm5 未改为110k波特率,成功测距闪灯demo,加速度计未驱动有问题

---
 uwb_MK8000_example_ss_twr_qiang_Anchor_gai/keil/include/main/main.c |  239 ++++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 187 insertions(+), 52 deletions(-)

diff --git a/uwb_MK8000_example_ss_twr_qiang_Anchor_gai/keil/include/main/main.c b/uwb_MK8000_example_ss_twr_qiang_Anchor_gai/keil/include/main/main.c
index 27af7aa..a277996 100644
--- a/uwb_MK8000_example_ss_twr_qiang_Anchor_gai/keil/include/main/main.c
+++ b/uwb_MK8000_example_ss_twr_qiang_Anchor_gai/keil/include/main/main.c
@@ -52,26 +52,44 @@
 #include "Usart.h"
 #include "mk_adc.h"
 #include "mk_sleep_timer.h"
+#include "lis3dh_driver.h"
+#include "sn74hc595.h"
+#include "mk_4G.h"
 extern int simple_main(void);
-uint8_t trx_buf[10] = {0};
+extern int temp_main(void);
 #define TEST_UART_POLL_MODE 0
 #define TEST_UART_INTERUPT_MODE 1
 #define TEST_UART_DMA_MODE 2
 #define TEST_UART_MODE TEST_UART_DMA_MODE
 
 #define NUM_SAMPLES 1
+#define BIND_TRIGGER_TIME 60000 
 extern uint8_t mUsartReceivePack[100];
-extern uint8_t mUsart2ReceivePack[100];
+extern uint8_t mUsart2ReceivePack[150];
+extern uint8_t state5V_prase_flag,gps_prase_flag;
 uint32_t dev_id;
 uint8_t group_id;
 uint16_t tag_frequency;
 uint16_t disoffset;
-uint16_t warning_distance;
-int16_t fVoltage_mv;
+uint16_t warning_distance,prewarning_distance;
+int16_t fVoltage_mv,first_search_flag;
 uint8_t bat_percent,g_start_send_flag=1;
-uint8_t state5v = 1;
-
+int link_success_flag;
+uint8_t state5v,link_error_count;
+uint8_t gps_power_state,motor_power_state=1,uwb_state,air780_power_state,gps_success_state,chaging_state,changed_state,air780_success_state;
+float nomove_count=0;
 static uint32_t sample[NUM_SAMPLES] = {0};
+uint8_t recev_error_num,send_messgae_count,send_flag,control_state;
+
+typedef enum
+{		UN_BIND=0,
+		LINK_SUCCESS,
+		SEARCH_DEV,
+}Operation_step;
+Operation_step Operation_state;
+
+
+Commend_SendDate send_struct;
 static struct ADC_CFG_T usr_adc_cfg = {
     .mode = ADC_MODE_CONTINUE,    /* Selected single conversion mode  */
     .clk_sel = ADC_CLK_HIGH,      /* Selected 62.4M high speed clock */
@@ -112,33 +130,6 @@
 {		
 uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);
 }
-void UartInit(void)
-{
-board_pins_config();
-uart_open(UART_ID1, &test_uart_cfg);
-board_debug_console_open(TRACE_PORT_UART0);
-uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);
-}
-static void sleep_timer_callback(void *dev, uint32_t time)
-{
-		g_start_send_flag=1;
-    //LOG_INFO(TRACE_MODULE_APP, "Sleep timer interrupt callback\r\n");
-}
-static void voltage_input_handler(enum IO_PIN_T pin)
-{
-
-}
-void Program_Init(void)
-{	
-Usart1ParseDataCallback = UsartParseDataHandler;
-parameter_init_anchor();//g_com_map表初始化角色默认为基站
-dev_id=g_com_map[DEV_ID];//这里不太对
-group_id=g_com_map[GROUP_ID];//组ID
-tag_frequency = 1000/g_com_map[COM_INTERVAL];//测距频率这个存的是测距时间
-memcpy(&disoffset,&g_com_map[DIST_OFFSET],2);
-warning_distance=g_com_map[STATIONARY_TIME];
-}
-
 static void adc_callback(void *data, uint32_t number)
 {
     uint32_t *result = (uint32_t *)data;
@@ -163,31 +154,123 @@
     }
 		 LOG_INFO(TRACE_MODULE_APP, "The voltage is %%%d \r\n",bat_percent);
 }
+//void UartInit(void)
+//{
+//board_pins_config();
+//uart_open(UART_ID1, &test_uart_cfg);
+//board_debug_console_open(TRACE_PORT_UART0);
+//uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);
+//}
+static void sleep_timer_callback(void *dev, uint32_t time)
+{
+		
+		nomove_count++;
+		send_messgae_count+=g_com_map[COM_INTERVAL];
+		//if(send_messgae_count>=g_com_map[4G_INTERNAL]){
+		//send_message_count=0;
+		//send_flag=1;
+	//}
+	
+		if(Operation_state==LINK_SUCCESS){//成功时清0错误计数
+		link_error_count=0;
+		g_start_send_flag=1;
+		}
+		if(Operation_state==SEARCH_DEV){
+//		if(first_search_flag){//当第一次连接断开产生时才开始计数
+			//link_error_count=0;
+//		}
+		link_error_count++;
+		if(link_error_count==60)
+		link_error_count=0;
+		//link_error_count+=g_com_map[COM_INTERVAL];
+			//if(link_error_count>=g_com_map[4G_INTERNAL])
+			//link_error_count=0;
+		updata_led_power_state();//更新灯状态
+	}
+}
+static void voltage_input_handler(enum IO_PIN_T pin)
+{
+	
+}
+static void move_handler(enum IO_PIN_T pin)
+{
+nomove_count=0;
+}
+void Program_Init(void)
+{	
+Usart1ParseDataCallback = UsartParseDataHandler;//需改为默认为gps处理,UsartParseDataHandler为升级处理当调试时候改为
+parameter_init_anchor();//g_com_map表初始化角色默认为基站
+dev_id=g_com_map[DEV_ID];//这里不太对
+group_id=g_com_map[GROUP_ID];//组ID
+tag_frequency = 1000/g_com_map[COM_INTERVAL];//测距频率这个存的是测距时间
+memcpy(&disoffset,&g_com_map[DIST_OFFSET],2);
+warning_distance=g_com_map[STATIONARY_TIME];
+prewarning_distance=g_com_map[ALARM_DISTANCE2];
+send_struct.warnDistence=warning_distance;
+send_struct.alarmDistence=prewarning_distance;//更新报警距离
+memcpy(&send_struct.gunLableId,&g_com_map[BIND_DEV_ID],2);//更新绑定ID
+send_struct.tagId=dev_id;//更新设备ID
+}
+
+
+
 void IdleTask(void)
 {
 	if(gpio_pin_get_val(INPUT_5V_Pin))
-	{
-        	
-    UART_CheckReceive();
-		//UART_CheckSend();
+	{    	
+  
 		if(state5v==0)
 		{
 			state5v=1;
-			UartInit();
+			state5V_prase_flag=state5v;
+			gps_prase_flag=0;//解除gps解析
+			uart1_change_from_gps_to_debug();
+			uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);//开启dma
+			//UartInit();
 		}
+		  
+		//UART_CheckSend();
 	}else{
         if(state5v==1)
         {
-            state5v=0;
+          state5v=0;
+					state5V_prase_flag=state5v;
+					gps_prase_flag=1;//恢复gps解析
+					uart1_change_from_debug_to_gps();
+					uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);//开启dma
 					//UartDeinit();
         }
+				UART_CheckReceive();
 }
 }
+int bind_check(void)
+{
+if(g_com_map[BIND_DEV_ID]!=0x00)
+{
+	return 1;
+//绑定信息为1说明设备已经被下发绑定
+}else{
+	return 0;
+//绑定信息为0说明设备未被绑定
+}
+}
+void check_if_in_search(void)
+{
+if(link_success_flag==1){//如果第一次测距收包成功那么则进入连接测距模式
+		Operation_state=LINK_SUCCESS;
+			}else{//否则进入搜索模式
+		Operation_state=SEARCH_DEV;
+		if(first_search_flag==0)
+		first_search_flag=1;
+	}
+}
+
 
 int main(void)
 {
     board_clock_run();
     board_pins_config();
+		
     board_debug_console_open(TRACE_PORT_UART0);
 	    // Reset reason
     reset_cause_get();
@@ -218,29 +301,81 @@
     //sys_timer_open();
 		
     gpio_open();
-    board_led_init();
-		adc_open(&usr_adc_cfg);
-		//adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样
+    //board_led_init();
 		
-		 //flash_open(FLASH_ID0, NULL);
-		 uart_open(UART_ID1, &test_uart_cfg);
-			Program_Init();
+//		adc_open(&usr_adc_cfg);
+//		IIC2_Init();
+//		Accelerometer_Init(); //加速度计初始化必须在IO_control_init之前因为复用SDA引脚 
+		IO_control_init();
+		//adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样
+		uart_open(UART_ID1, &test_uart_cfg);
+		gps_air780_power_change(1,1);//开启gps,4G
+		Program_Init();
 		 uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);
-		 sleep_timer_open(true, SLEEP_TIMER_MODE_RELOAD, sleep_timer_callback);
-//		sleep_timer_start(__MS_TO_32K_CNT(g_com_map[COM_INTERVAL]));//测试
+// Initialize low power mode
+    power_init();
+		g_com_map[BIND_DEV_ID]=0x1122;//测试
+		if(bind_check())//绑定后才提前开启测距
+		{link_success_flag=temp_main();//上机开启接收2s绑定成功则进行下面轮询测距流程,不成功则1分后再次开启2s接收
+			check_if_in_search();
+		}else{
+		send_struct.bindState=false;
+		Operation_state=UN_BIND;
+		}
+		sleep_timer_open(true, SLEEP_TIMER_MODE_RELOAD, sleep_timer_callback);
+		//sleep_timer_start(__MS_TO_32K_CNT(g_com_map[COM_INTERVAL]));//测试
+		sleep_timer_start(__MS_TO_32K_CNT(1000));//测试
 		board_5V_input_init(voltage_input_handler);
+		board_acceleration_detection_init(move_handler);
     while (1)
     {
+	switch(Operation_state){
+		case LINK_SUCCESS:
+		{//连接成功进行轮询测距
+			if(g_start_send_flag){
+			g_start_send_flag = 0;
+			uwb_led_on();
 			simple_main();
-			UART_CheckReceive();
+			uwb_led_off();
+			IdleTask();	
+			}else{
+			IdleTask();	
+			} 
+		}
+		break;
+		case SEARCH_DEV:
+		{//接包不成功或者通讯失败进入搜索模式
+			if(link_error_count==0||first_search_flag){
+			first_search_flag=0;
+			uwb_led_on();
+			link_success_flag=temp_main();//第一次开启接收2s绑定失败后则进行下面1分钟后重新开启2s绑定流程
+			uwb_led_off();
+			if(link_success_flag)
+			Operation_state=LINK_SUCCESS;
+		}
+			IdleTask();
+		}
+		break;
+		case UN_BIND:
+		{uwb_led_off();//关闭uwb指示灯
+			IdleTask();
+		}
+	break;
+	}
+		
+		//3种情况后都要发包和休眠
+		//if(send_flag){
+		//message_construct();
+		//send_udp;
+	//air780_success_state=0;//关闭4G成功发送灯
+		//blink_led(&air780_success_state);//成功测距闪烁4G状态灯
+	//air780_success_state=0;
+		//}
 #ifdef DEBUG_MODE
 			if(!gpio_pin_get_val(INPUT_5V_Pin)){
 						trace_flush();
             uint32_t lock = int_lock();
-						LOG_INFO(TRACE_MODULE_APP, "进入低功耗");
-						//唤醒源设置MK8000修改
-						//board_5V_input_init(voltage_input_handler);
-						sleep_timer_start(__MS_TO_32K_CNT(g_com_map[COM_INTERVAL]));
+						//LOG_INFO(TRACE_MODULE_APP, "进入低功耗");
             power_enter_power_down_mode(0);
             int_unlock(lock);
 			}

--
Gitblit v1.9.3