#include "b6x.h" #include "drvs.h" #include "dbg.h" #include "app_bat.h" #include "sys_config.h" #define BAT_Message_interval 1000 tmr_id_t BAT_Message_tmr_id; BAT_Message_t BAT_Message; uint16_t Bat_Voltage_Last; uint16_t Voltage_lag_count; uint8_t Bat_STA_Last; // 门锁状态更新标志 bool GRB_Door_lock_updata=0; // uint8_t bat_str[50]={0,0},bat_str_len=0; static tmr_tk_t BAT_Message_Handle(tmr_id_t id) { uint16_t Bat_Voltage = get_bat_voltage() * 10; if(Bat_Voltage_Last >= Bat_Voltage){ if(Bat_Percent_Low > Bat_Voltage){ BAT_Message.Bat_STA =(BAT_Message.Bat_STA & 0xF3)|Bat_Low_STA; WS2812_GRBs.GRBs=GRB_RED; }else if(Bat_Percent_30 > Bat_Voltage){ BAT_Message.Bat_STA =(BAT_Message.Bat_STA & 0x03)|Bat_30_STA; WS2812_GRBs.GRBs=GRB_RED; }else if(Bat_Percent_60 > Bat_Voltage){ BAT_Message.Bat_STA =(BAT_Message.Bat_STA & 0x03)|Bat_60_STA; WS2812_GRBs.GRBs=GRB_BLUE; }else if(Bat_Percent_100 > Bat_Voltage){ BAT_Message.Bat_STA =(BAT_Message.Bat_STA & 0x03)|Bat_100_STA; WS2812_GRBs.GRBs=GRB_GREEN; }else{ BAT_Message.Bat_STA =(BAT_Message.Bat_STA & 0xF3)|Bat_Full_STA; WS2812_GRBs.GRBs=GRB_GREEN; } if(0==(BAT_Message.Bat_STA & Bat_Charge_STA)){ Bat_Voltage_Last =Bat_Voltage; }else{ if(Bat_Voltage <= (Bat_Voltage_Last - 15)){ BAT_Message.Bat_STA =(BAT_Message.Bat_STA & 0xFC)|Bat_NotCharge_STA; } } Voltage_lag_count=0; }else { Voltage_lag_count++; if((3000/BAT_Message_interval) ==Voltage_lag_count){//3s Voltage_lag_count=0; uint16_t in_acc_percent= get_in_acc_percent(); // bat_str_len =sprintf((char *)bat_str, "ACC=%d%%\n", in_acc_percent); // uart_send(UART1_PORT,bat_str_len,bat_str); if(in_acc_percent <= 5){ // 油门小于2%时,才判断是否在充电 // uart_putc(UART1_PORT,'A'); if(Bat_Voltage >= (Bat_Voltage_Last + 15)){ BAT_Message.Bat_STA =(BAT_Message.Bat_STA & 0xFC)|Bat_Charge_STA; } }else{ BAT_Message.Bat_STA =(BAT_Message.Bat_STA & 0xFC); } Bat_Voltage_Last =Bat_Voltage; } } if((Bat_STA_Last != BAT_Message.Bat_STA) || GRB_Door_lock_updata != Get_Status(OUT_Door_lock)){ GRB_Door_lock_updata=Get_Status(OUT_Door_lock); // bat_str_len =sprintf((char *)bat_str, "STA=%#X,Vol=%d\n", BAT_Message.Bat_STA ,Bat_Voltage); // uart_send(UART1_PORT,bat_str_len,bat_str); Bat_STA_Last =BAT_Message.Bat_STA; if( Get_Status(OUT_Door_lock)){ if(BAT_Message.Bat_STA & Bat_Charge_STA){ Time_Event_On(GRB_WS2812_Event,NULL); }else if(BAT_Message.Bat_STA & Bat_Low_STA){ Time_Event_Blink(GRB_WS2812_Event,150,150,0xffff,NULL); }else{ Time_Event_Blink(GRB_WS2812_Event,500,500,0xffff,NULL); } }else{ Time_Event_Off(GRB_WS2812_Event,NULL); } } BAT_Message.Bat_Voltage =Bat_Voltage; return (BAT_Message_interval / 10); } void BAT_Message_Init(void) { BAT_Message_tmr_id = sftmr_start(10, BAT_Message_Handle); Bat_Voltage_Last =get_bat_voltage() * 10; }