A270S版本路测100km差1.2km-V0.10版本

This commit is contained in:
2025-03-26 08:32:48 +08:00
parent 157c3dabe4
commit 497f8eb1e1
31 changed files with 58890 additions and 56625 deletions

View File

@ -169,9 +169,7 @@ uint8_t Get_sys_display_theme(void)
void Set_sys_display_theme(uint8_t value)//光感控制主题
{
if(value == NULL ){
custom_data.display_theme = 0;
}else if(value != custom_data.display_theme){
if(value != custom_data.display_theme){
custom_data.display_theme = value;
}
}
@ -201,9 +199,7 @@ uint8_t Get_sys_bt_connect_state(void)
void Set_sys_bt_connect_state(uint8_t value)
{
// printf("Get_sys_bt_connect_state = %d .\r\n",value);
if(value == NULL ){
custom_data.bt_connect_state = 0;
}else if(value != custom_data.bt_connect_state){
if(value != custom_data.bt_connect_state){
custom_data.bt_connect_state = value;
}
//gpio_direction_output(46,1);
@ -217,9 +213,7 @@ uint8_t Get_sys_trip_unit(void)
}
void Set_sys_trip_unit(uint8_t value)
{
if(value == NULL ){
custom_data.user_data.trip_unit = 0;
}else if(value != custom_data.user_data.trip_unit){
if(value != custom_data.user_data.trip_unit){
custom_data.user_data.trip_unit = value;
}
}
@ -230,9 +224,7 @@ uint8_t Get_sys_wireless(void)
}
void Set_sys_wireless(uint8_t value)
{
if(value == NULL ){
custom_data.wireless = 0;
}else if(value != custom_data.wireless){
if(value != custom_data.wireless){
custom_data.wireless = value;
}
}
@ -257,10 +249,7 @@ uint16_t Get_sys_velocity(void)//速度
}
void Set_sys_velocity(uint16_t value)
{
if(value == NULL ){
custom_data.velocity = 0;
custom_data.display_velocity = 0;
}else if(value != custom_data.velocity){
if(value != custom_data.velocity){
custom_data.velocity = value;
custom_data.display_velocity = value;
}
@ -272,9 +261,7 @@ uint16_t Get_sys_display_velocity(void)//速度
}
void Set_sys_display_velocity(uint16_t value)
{
if(value == NULL ){
custom_data.display_velocity = 0;
}else if(value != custom_data.display_velocity){
if(value != custom_data.display_velocity){
custom_data.display_velocity = value;
}
}
@ -298,11 +285,9 @@ uint16_t Get_sys_veer_velocity(void)//转速
}
void Set_sys_veer_velocity(uint16_t value)
{
// if(value == NULL ){
// custom_data.veer_velocity = 0;
// }else if(value != custom_data.veer_velocity){
if(value != custom_data.veer_velocity){
custom_data.veer_velocity = value;
// }
}
}
uint16_t Get_sys_temp(void)//温度
@ -333,19 +318,8 @@ uint16_t Get_sys_can_temp(void)//温度
}
void Set_sys_can_temp(uint16_t value)
{
if(value == NULL ){
custom_data.eng_temp = 0;
}else if(value != custom_data.eng_temp){
/*if(value < custom_data.temp){
if(custom_data.temp - value > THRESHOLD)
custom_data.temp = value;
}else{
if( (value - custom_data.temp) > THRESHOLD)
custom_data.temp = value;
}*/
if(value != custom_data.eng_temp){
custom_data.eng_temp = value;
//custom_data.temp = value;
// DEBUG_PRINT("temp=%d ,",value);
}
}

View File

@ -17,7 +17,7 @@
#define MOTO_ICMX_GB518_A270S_KP 4
#define MOTO_ICMX_GB518_A272M 5
#define MOTO_WARE_HOSE MOTO_ICMX_GB518_A272M
#define MOTO_WARE_HOSE MOTO_ICMX_GB518_A270S
#if (MOTO_WARE_HOSE == MOTO_ICMX_GB518_A270M)
#define SOFT_WARE_HOST 1
@ -38,7 +38,7 @@
#elif (MOTO_WARE_HOSE == MOTO_ICMX_GB518_A270S)
#define SOFT_WARE_HOST 0
#define SOFT_WARE_ORDER 4
#define SOFT_WARE_ORDER 10
#define HARD_WARE "MXC-A27-M V4.5"
#define KEY_EXCHANGE 1
#define MCU_INFO_LABEL "A270S"

View File

@ -15,6 +15,17 @@
double total_mile = 0;
double test_data = 0;
uint32_t test_total = 0;
uint32_t mile_total = 0;
uint8_t mile_kilometer = 0;
static uint16_t veer_velocity = 0;
static uint16_t eng_temp = 0;
volatile double can_speed = 0;
volatile double avg_can_speed = 0;//保存上一帧的速度值
volatile double recan_speed = 0;//保存上一帧的速度值
uint16_t diff_can_speed = 0;
static uint16_t display_can_speed = 0;
static uint16_t display_speed = 0;
uint32_t flash_trip_mile = 0;
uint32_t flash_total_mile = 0;
@ -119,9 +130,6 @@ void Unified_brightness_processing(uint8_t data,uint8_t type){
switch(type){
case 0:
duty_ns = LIGHTVALUEDATAONE(data);
/*if(Get_sys_veer_velocity() <1000){
duty_ns = duty_ns/LOW_BRIGHTNESS_MODE;
}*/
Set_sys_light(LIGHTCALUEDATA(data));
break;
case 1:
@ -245,7 +253,7 @@ ret_t on_key_test_theme(void* ctx, event_t* e){
}
#endif
void defect_code_event_handing(int *buf){
void defect_code_event_handing(uint8_t *buf){
uint32_t sum,sum1,sum2;
uint8_t data;
uint8_t result = 0;
@ -278,6 +286,8 @@ void defect_code_event_handing(int *buf){
// 假设时间间隔为10毫秒0.01秒)
#define TIME_INTERVAL 0.01
// 假设时间间隔为500毫秒0.01秒)
#define TIME_INTERVAL2 0.5
uint8_t save_total_mile = 0;
uint32_t total_flag = 0;
@ -297,200 +307,344 @@ double calculateTotalDistance(uint8_t count)
return distance;
}
// 计算总计里程
double calculateTotalDistance2(uint8_t count)
{
// 将速度数据转换为米每秒的速度值
double speed_mps = count * 1000.0 / 3600.0;
void ASB_speed_event_handing(int *buf){
#ifdef UI_VIEW_QUICKLY_ARRANGE
// 计算每次速度更新所行驶的距离
double distance = speed_mps * TIME_INTERVAL2;
// 返回每次行驶的距离,可以在主程序中累加得到总计里程
return distance;
}
// extern volatile uint8_t cnt;
static uint8_t livecounter=0;
static int8_t relivecounter=-1;
static uint8_t diff_livecounter = 0;
void ASB_speed_event_handing(uint8_t *buf){
// cnt=0;
// printf("=%d.\r\n",cnt);
uint8_t data = 0;
uint8_t speed_data = 0;
uint8_t speed_flag = 0;
uint16_t speed = 0;
uint32_t trip = 0;
uint32_t total = 0;
uint16_t display_speed = 0;
speed = *(buf++)&0xFF;
data = *(buf++)&0xFF;
speed = *(buf++);
data = *(buf++);
speed_data = getBit5Value(data,3);
speed_flag = getBitValue(data,2);
// printf("frontflag=%d.\r\n",speed_flag);
//前轮速度有效
// if(!speed_flag){
if(0){
// printf("front>speed_data=%05X,speed=%08X,",speed_data,speed);
if(!speed_flag){
speed = speed_data | speed<<5;
// printf("rearspeed=%X.\r\n",speed);
speed = (int)(speed * 0.05625);//偏移系数
can_speed = (speed * 0.05625);//偏移系数
mile_total += (uint32_t)can_speed;
display_speed = speed;//UI显示上浮8%
// printf("display_speed=%X>%d,",speed,speed);
speed = (int)(speed * 0.92);
// printf("mile_speed=%X>%d.\r\n",speed,speed);
(buf++);
(buf++);
(buf++);
(buf++);
total_mile += calculateTotalDistance(speed);
if(display_speed>=255)
display_speed = 255;
Set_sys_velocity(display_speed);
trip = flash_trip_mile + total_mile;
total = flash_total_mile + total_mile;
if((int)(total_mile)>=1 && (((int)total_mile)%1000 ==0) && total != total_flag){
save_total_mile = 1;
total_flag = total;
}
Set_sys_trip_mileage(trip);
Set_sys_total_mileage(total);
}else{
speed = getBit2Value(data,0);
// printf("rear>speed=%X,",speed);
data = *(buf++)&0xFF;
// printf("data=%08X,",data);
data = *(buf++);
speed = data | speed<<8;
// printf("data2=%X,",speed);
data = *(buf++)&0xFF;
data = *(buf++);
speed_data = getBit3Value(data,5);
// printf("data3=%X.\r\n",speed_data);
speed_flag = getBitValue(data,4);
// printf("rearflag=%d.\r\n",speed_flag);
// if(!speed_flag){
if(1){
if(!speed_flag){
speed = speed_data | speed<<3;
// printf("rearspeed=%X.\r\n",speed);
speed = (int)(speed * 0.05625);//偏移系数
display_speed = speed * 1.08;//UI显示上浮8%
// printf("display_speed=%X>%d,",speed,speed);
speed = (int)(speed);
// printf("mile_speed=%X>%d.\r\n",speed,speed);
total_mile += calculateTotalDistance(speed);
if(display_speed>=255)
display_speed = 255;
Set_sys_velocity(display_speed);
trip = flash_trip_mile + total_mile;
total = flash_total_mile + total_mile;
if((int)(total_mile)>=1 && (((int)total_mile)%1000 ==0) && total != total_flag){
save_total_mile = 1;
total_flag = total;
}
Set_sys_trip_mileage(trip);
Set_sys_total_mileage(total);
can_speed = (speed * 0.05625);//偏移系数
mile_total +=(uint32_t)can_speed;
}
(buf++);
(buf++);
}
data = *(buf++);
livecounter = getBit4Value(data,0);
avg_can_speed = (uint16_t)((recan_speed+can_speed)/2);
if(recan_speed){
if(livecounter!=relivecounter){
if(livecounter>relivecounter){//最小为1
diff_livecounter = (livecounter-relivecounter-1);
while(diff_livecounter){
diff_livecounter--;
mile_total +=avg_can_speed;
}
}else{
diff_livecounter = relivecounter-livecounter;
if(diff_livecounter!=15){//若为15则正常 F->0过度
mile_total +=((avg_can_speed)*(15-diff_livecounter));
}
}
}else{
mile_total +=(avg_can_speed*14);
}
}
relivecounter = livecounter;
recan_speed = can_speed;//保存本次帧的值
#endif
}
// void ASB_speed_event_handing(uint8_t *buf){
// #ifdef UI_VIEW_QUICKLY_ARRANGE
// uint8_t data = 0;
// uint8_t speed_data = 0;
// uint8_t speed_flag = 0;
// uint16_t speed = 0;
// uint32_t trip = 0;
// uint32_t total = 0;
// uint16_t display_speed = 0;
void ASB_141_speed_event_handing(int *buf){
#ifdef UI_VIEW_QUICKLY_ARRANGE
// speed = *(buf++)&0xFF;
// data = *(buf++)&0xFF;
// speed_data = getBit5Value(data,3);
// speed_flag = getBitValue(data,2);
// // printf("frontflag=%d.\r\n",speed_flag);
// //前轮速度有效
// // if(!speed_flag){
// if(0){
// // printf("front>speed_data=%05X,speed=%08X,",speed_data,speed);
// speed = speed_data | speed<<5;
// // printf("rearspeed=%X.\r\n",speed);
// speed = (int)(speed * 0.05625);//偏移系数
// display_speed = speed;//UI显示上浮8%
// // printf("display_speed=%X>%d,",speed,speed);
// speed = (int)(speed * 0.92);
// // printf("mile_speed=%X>%d.\r\n",speed,speed);
// total_mile += calculateTotalDistance(speed);
// if(display_speed>=255)
// display_speed = 255;
// Set_sys_velocity(display_speed);
// trip = flash_trip_mile + total_mile;
// total = flash_total_mile + total_mile;
// if((int)(total_mile)>=1 && (((int)total_mile)%1000 ==0) && total != total_flag){
// save_total_mile = 1;
// total_flag = total;
// }
// Set_sys_trip_mileage(trip);
// Set_sys_total_mileage(total);
// }else{
// speed = getBit2Value(data,0);
// // printf("rear>speed=%X,",speed);
// data = *(buf++)&0xFF;
// // printf("data=%08X,",data);
// speed = data | speed<<8;
// // printf("data2=%X,",speed);
// data = *(buf++)&0xFF;
// speed_data = getBit3Value(data,5);
// // printf("data3=%X.\r\n",speed_data);
// speed_flag = getBitValue(data,4);
// // printf("rearflag=%d.\r\n",speed_flag);
// // if(!speed_flag){
// if(1){
// speed = speed_data | speed<<3;
// // printf("rearspeed=%X.\r\n",speed);
// speed = (int)(speed * 0.05625);//偏移系数
// display_speed = speed * 1.08;//UI显示上浮8%
// // printf("display_speed=%X>%d,",speed,speed);
// speed = (int)(speed);
// // printf("mile_speed=%X>%d.\r\n",speed,speed);
// total_mile += calculateTotalDistance(speed);
// if(display_speed>=255)
// display_speed = 255;
// Set_sys_velocity(display_speed);
// trip = flash_trip_mile + total_mile;
// total = flash_total_mile + total_mile;
// if((int)(total_mile)>=1 && (((int)total_mile)%1000 ==0) && total != total_flag){
// save_total_mile = 1;
// total_flag = total;
// }
// Set_sys_trip_mileage(trip);
// Set_sys_total_mileage(total);
// }
// }
// #endif
// }
void ASB_141_speed_event_handing(uint8_t *buf){
uint8_t data = 0;
uint8_t speed_data = 0;
uint8_t speed_flag = 0;
uint16_t speed = 0;
uint32_t trip = 0;
uint32_t total = 0;
uint16_t display_speed = 0;
*(buf++)&0xFF;
*(buf++)&0xFF;
*(buf++)&0xFF;
*(buf++)&0xFF;
speed = *(buf++)&0xFF;
data = *(buf++)&0xFF;
speed = *(buf++);
data = *(buf++);
speed_data = getBit5Value(data,3);
speed = speed_data | speed<<5;
speed_flag = getBitValue(data,2);
// printf("frontflag=%d.\r\n",speed_flag);
//前轮速度有效
if(!speed_flag){
speed = speed_data | speed<<5;
can_speed = (speed * 0.05625);//偏移系数
mile_total += (uint32_t)can_speed;
speed = (int)(speed * 0.05625);//偏移系数
display_speed = speed;//UI显示上浮8%
// printf("display_speed=%X>%d,",speed,speed);
speed = (int)(speed * 0.92);
// printf("mile_speed=%X>%d.\r\n",speed,speed);
total_mile += calculateTotalDistance(speed);
if(display_speed>=255)
display_speed = 255;
Set_sys_velocity(display_speed);
trip = flash_trip_mile + total_mile;
total = flash_total_mile + total_mile;
if((int)(total_mile)>=1 && (((int)total_mile)%1000 ==0) && total != total_flag){
save_total_mile = 1;
total_flag = total;
(buf++);
(buf++);
(buf++);
(buf++);
}else{
(buf++);
(buf++);
speed = *(buf++);
data = *(buf++);
speed_data = getBit5Value(data,3);
speed_flag = getBitValue(data,2);
if(!speed_flag){
speed = speed_data | speed<<5;
can_speed = (speed * 0.05625);//偏移系数
mile_total += (uint32_t)can_speed;
}
}
Set_sys_trip_mileage(trip);
Set_sys_total_mileage(total);
data = *(buf++);
livecounter = getBit4Value(data,0);
avg_can_speed = (uint16_t)((recan_speed+can_speed)/2);
if(recan_speed){
if(livecounter!=relivecounter){
if(livecounter>relivecounter){//最小为1
diff_livecounter = (livecounter-relivecounter-1);
while(diff_livecounter){
diff_livecounter--;
mile_total +=avg_can_speed;
}
}else{
diff_livecounter = relivecounter-livecounter;
if(diff_livecounter!=15){//若为15则正常 F->0过度
mile_total +=((avg_can_speed)*(15-diff_livecounter));
}
}
}else{
mile_total +=(avg_can_speed*14);
}
}
relivecounter = livecounter;
recan_speed = can_speed;//保存本次帧的值
}
// //用于备份
// void ASB_141_speed_event_handing(uint8_t *buf){
// #ifdef UI_VIEW_QUICKLY_ARRANGE
// uint8_t data = 0;
// uint8_t speed_data = 0;
// uint8_t speed_flag = 0;
// uint16_t speed = 0;
// uint32_t trip = 0;
// uint32_t total = 0;
// uint16_t display_speed = 0;
// *(buf++)&0xFF;
// *(buf++)&0xFF;
// *(buf++)&0xFF;
// *(buf++)&0xFF;
// speed = *(buf++)&0xFF;
// data = *(buf++)&0xFF;
// speed_data = getBit5Value(data,3);
// speed = speed_data | speed<<5;
// speed = (int)(speed * 0.05625);//偏移系数
// display_speed = speed;//UI显示上浮8%
// // printf("display_speed=%X>%d,",speed,speed);
// speed = (int)(speed * 0.92);
// // printf("mile_speed=%X>%d.\r\n",speed,speed);
// total_mile += calculateTotalDistance(speed);
// if(display_speed>=255)
// display_speed = 255;
// Set_sys_velocity(display_speed);
// trip = flash_trip_mile + total_mile;
// total = flash_total_mile + total_mile;
// if((int)(total_mile)>=1 && (((int)total_mile)%1000 ==0) && total != total_flag){
// save_total_mile = 1;
// total_flag = total;
// }
// Set_sys_trip_mileage(trip);
// Set_sys_total_mileage(total);
#endif
}
// #endif
// }
void speed_event_handing(int *buf){
uint16_t veer_velocity = 0;
uint16_t eng_temp = 0;
// uint8_t eng_flag = 0;
veer_velocity = *(buf++) &0xFF;
veer_velocity = (*(buf++)&0xFF) | veer_velocity<<8;
veer_velocity *= 0.25;
extern uint8_t speed_flag;
#if (MOTO_WARE_HOSE != MOTO_ICMX_GB518_A270M_KP && MOTO_WARE_HOSE != MOTO_ICMX_GB518_A270S_KP)
uint8_t speed = 0;
#define KILOMETER 3600000000 //一万公里
void speed_convert_mile_calculation(void){
uint32_t trip = 0;
uint32_t total = 0;
uint16_t display_speed = 0;
speed = *(buf++)&0xFF;
display_speed = speed;//UI显示上浮8%
speed = (int)(speed * 0.92);
#else
*(buf++)&0xFF;
#endif
// printf("%d.\r\n",mile_total);
*(buf++);
eng_temp = *(buf++) &0xFF;
eng_temp = (*(buf++)&0xFF) | eng_temp<<8;
if(mile_total>KILOMETER){//一万公里
mile_kilometer++;
mile_total-=KILOMETER;
flash_total_mile+=KILOMETER;
flash_trip_mile+=KILOMETER;
}
// *(buf++);
#if SPEED_DATA_CAN
total = flash_total_mile + (uint32_t)(mile_total/360);
trip = flash_trip_mile + (uint32_t)(mile_total/360);
Set_sys_trip_mileage(trip);
Set_sys_total_mileage(total);
if(speed_flag){
display_speed = (uint32_t)(display_can_speed*1.08);//UI显示上浮8%
if(display_speed>=255)
display_speed = 255;
Set_sys_velocity(display_speed);
veer_velocity *= 0.25;
if(veer_velocity>16384)
veer_velocity = 16384;
Set_sys_veer_velocity(veer_velocity);
#if (MOTO_WARE_HOSE != MOTO_ICMX_GB518_A270M_KP && MOTO_WARE_HOSE != MOTO_ICMX_GB518_A270S_KP)
total_mile += calculateTotalDistance(speed);
if(display_speed>=255)
display_speed = 255;
Set_sys_velocity(display_speed);
trip = flash_trip_mile + total_mile;
total = flash_total_mile + total_mile;
if((int)(total_mile)>=1 && (((int)total_mile)%1000 ==0) && total != total_flag){
save_total_mile = 1;
total_flag = total;
}
Set_sys_trip_mileage(trip);
Set_sys_total_mileage(total);
#endif
Set_sys_can_temp(eng_temp);
#endif
}
}
void tcs_control_event_handing(int *buf){
void speed_event_handing(uint8_t *buf){
veer_velocity = *(buf++);
veer_velocity = *(buf++) | veer_velocity<<8;
#if (MOTO_WARE_HOSE != MOTO_ICMX_GB518_A270M_KP && MOTO_WARE_HOSE != MOTO_ICMX_GB518_A270S_KP)
// can_speed = *(buf++);
// mile_total +=can_speed;
display_can_speed = *(buf++);
#else
*(buf++);
#endif
*(buf++);
eng_temp = *(buf++);
eng_temp = *(buf++) | eng_temp<<8;
}
void tcs_control_event_handing(uint8_t *buf){
/*uint8_t data = 0 ;
uint8_t tcs_flag = 0;
@ -504,7 +658,7 @@ void tcs_control_event_handing(int *buf){
*/
}
void mil_control_event_handing(int *buf){
void mil_control_event_handing(uint8_t *buf){
uint8_t data = 0 ;
uint8_t mil_flag = 0;
@ -521,7 +675,7 @@ void mil_control_event_handing(int *buf){
}
void kp_control_event_handing(int *buf){
void kp_control_event_handing(uint8_t *buf){
uint8_t data = 0;
*(buf++);

View File

@ -37,10 +37,10 @@ void return_demo(void);
void new_refreshes(widget_t* child);
void list_win_init(widget_t* child);
void refresh_animate(widget_t* child);
void defect_code_event_handing(int *buf);
// void speed_event_handing(int *buf);
void tcs_control_event_handing(int *buf);
void mil_control_event_handing(int *buf);
void defect_code_event_handing(uint8_t *buf);
// void speed_event_handing(uint8_t *buf);
void tcs_control_event_handing(uint8_t *buf);
void mil_control_event_handing(uint8_t *buf);
ret_t long_key_event_handling(uint8_t key);
@ -76,7 +76,7 @@ void list_theme_button1_init(void);
void list_theme_button2_init(void);
void list_theme_button4_init(void);
void speed_event_handing(int *buf);
void ASB_141_speed_event_handing(int *buf);
void speed_event_handing(uint8_t *buf);
void ASB_141_speed_event_handing(uint8_t *buf);
#endif

View File

@ -29,6 +29,9 @@ extern uint8_t power_on_flag;
static uint32_t idletick = 0;
static uint32_t refresh500ms_idletick = 0;
uint8_t refresh500ms_flag = 0;
extern uint32_t mile_total;
extern uint32_t test_total;
/**
* 注册自定义控件
@ -361,6 +364,11 @@ static ret_t on_timer(const idle_info_t* idle){
speed --;
Set_sys_velocity(speed);
}
// speed_buffer[speed_count]=speed;
// speed_count++;
// if(speed_count>=10){//满足存储大小 计算均值
// speed_count=0;
// }
}
if(mile_flag){
@ -496,6 +504,8 @@ static ret_t on_timer(const idle_info_t* idle){
dh = 0;
}
printf("test_total=%d,mile_total=%d.\r\n",test_total,mile_total);
idletick = xTaskGetTickCount();
}
if(xTaskGetTickCount() - refresh500ms_idletick > 500){