2024-05-11 00:04:28 +08:00
|
|
|
#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);
|
|
|
|
|
2024-06-02 16:00:42 +08:00
|
|
|
if(in_acc_percent <= 3){ // 油门小于2%时,才判断是否在充电
|
2024-05-11 00:04:28 +08:00
|
|
|
// uart_putc(UART1_PORT,'A');
|
2024-06-02 16:00:42 +08:00
|
|
|
if(Bat_Voltage >= (Bat_Voltage_Last + 15)){// 电压
|
2024-05-11 00:04:28 +08:00
|
|
|
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;
|
|
|
|
}
|