Commit cb35e55f authored by 957dd's avatar 957dd

优化了大车转向代码

parent 80e4a340
No preview for this file type
...@@ -55,7 +55,7 @@ void car0101_mode_2_back(unsigned char gval) { ...@@ -55,7 +55,7 @@ void car0101_mode_2_back(unsigned char gval) {
void car0101_mode_3_left(unsigned char gval) { void car0101_mode_3_left(unsigned char gval) {
int b=10; int b=15;
if(gval<45){ if(gval<45){
car_calculate_L_R(90); car_calculate_L_R(90);
}else if(gval<70){ }else if(gval<70){
...@@ -66,7 +66,7 @@ void car0101_mode_3_left(unsigned char gval) { ...@@ -66,7 +66,7 @@ void car0101_mode_3_left(unsigned char gval) {
} }
void car0101_mode_4_right(unsigned char gval) { void car0101_mode_4_right(unsigned char gval) {
int b=20; int b=10;
if(gval<45){ if(gval<45){
car_calculate_L_R(90); car_calculate_L_R(90);
}else if(gval<70){ }else if(gval<70){
......
...@@ -134,13 +134,15 @@ static void tankshot_detectionback(){ ...@@ -134,13 +134,15 @@ static void tankshot_detectionback(){
if(digitalRead(12)==LOW) { if(digitalRead(12)==LOW) {
s_back_status=true; s_back_status=true;
index=1; index=1;
g_device_delay_back_count=0;
delay_ms(100); // 延时 100ms,防止抖动 delay_ms(100); // 延时 100ms,防止抖动
g_device_delay_back_count=0;
softPwmWrite(27, 0); softPwmWrite(27, 0);
set_backshotstatus(false); set_backshotstatus(false);
my_zlog_info("检测引脚12拉低"); my_zlog_info("检测引脚12拉低");
} }
if(s_back_status==true&&index==1) tank_delay_shot_back(); if(s_back_status==true&&index==1) {
tank_delay_shot_back();
}
tankshot_detectionback_count++; tankshot_detectionback_count++;
if(tankshot_detectionback_count>3000){ if(tankshot_detectionback_count>3000){
softPwmWrite(27, 0); softPwmWrite(27, 0);
......
...@@ -176,23 +176,29 @@ void tank_angle_limit_function(){ ...@@ -176,23 +176,29 @@ void tank_angle_limit_function(){
limit_status = angle_limit(); limit_status = angle_limit();
if(limit_status==LIMIT_LIFT) { if(limit_status==LIMIT_LIFT) {
device_gpio_control(g_device_type,5,0); device_gpio_control(g_device_type,5,0);
my_zlog_info("lift limit stop"); if(limit_log_count>100){
my_zlog_info("right limit");
limit_log_count=0;
}
} }
else if(limit_status==LIMIT_RIGHT) { else if(limit_status==LIMIT_RIGHT) {
device_gpio_control(g_device_type,7,0); device_gpio_control(g_device_type,7,0);
my_zlog_info("right limit stop"); if(limit_log_count>100){
my_zlog_info("lift limit");
limit_log_count=0;
}
} }
if(limit_status==0) { else if(limit_status==0) {
limit_log_count++; limit_log_count++;
if(limit_log_count>100){ if(limit_log_count>100){
my_zlog_info("limit stop"); my_zlog_info("limit stop");
limit_log_count=0; limit_log_count=0;
} }
delay_ms(5);
} }
delay_ms(8);
} }
} }
......
...@@ -15,7 +15,7 @@ double tank_angle(){ ...@@ -15,7 +15,7 @@ double tank_angle(){
int angle_limit(){ int angle_limit(){
if(ANGLE_LIMIT_INDEX == 1 ){ if(ANGLE_LIMIT_INDEX == 1 ){
int tank_limit_angele = tank_angle(); int tank_limit_angele = (int)tank_angle();
if(tank_limit_angele >=LIFT_LIMIT && tank_limit_angele<=MIDDLE_LIMIT) return 1; if(tank_limit_angele >=LIFT_LIMIT && tank_limit_angele<=MIDDLE_LIMIT) return 1;
else if(tank_limit_angele >=MIDDLE_LIMIT && tank_limit_angele<=RIGHT_LIMIT) return 2; else if(tank_limit_angele >=MIDDLE_LIMIT && tank_limit_angele<=RIGHT_LIMIT) return 2;
return 0; return 0;
......
...@@ -5,12 +5,14 @@ ...@@ -5,12 +5,14 @@
#define MIDDLE_LIMIT 180 #define MIDDLE_LIMIT 180
#define RIGHT_LIMIT 200 #define RIGHT_LIMIT 200
#define ANGLE_LIMIT_INDEX 1 //是否开启角度旋转 #define ANGLE_LIMIT_INDEX 1 //是否开启角度限制
double tank_angle(); double tank_angle();
int angle_limit(); int angle_limit();
void settank_angle(double angle);
float low_pass_filter_360(float prev_angle, float new_angle, float alpha); float low_pass_filter_360(float prev_angle, float new_angle, float alpha);
void set_tank_angle_count();//计时 void set_tank_angle_count();//计时
......
...@@ -78,9 +78,14 @@ void angle_mqtt_send() { ...@@ -78,9 +78,14 @@ void angle_mqtt_send() {
char TOPIC_send_angle[26]; char TOPIC_send_angle[26];
static double prev_angle=0; static double prev_angle=0;
static double rounded_angle; static double rounded_angle;
rounded_angle =low_pass_filter_360(prev_angle,tank_angle(),0.8); rounded_angle =low_pass_filter_360(prev_angle,tank_angle(),0.7);
sprintf(TOPIC_send_angle,"dev_rtinfo/%s",mqtt_topic_pure_number()); sprintf(TOPIC_send_angle,"dev_rtinfo/%s",mqtt_topic_pure_number());
cJSON_AddStringToObject(root, "type","tank_angle"); cJSON_AddStringToObject(root, "type","tank_angle");
if(rounded_angle>160&&rounded_angle<180){
rounded_angle=160;
}else if(rounded_angle<200&&rounded_angle>180){
rounded_angle=200;
}
cJSON_AddNumberToObject(root, "angle",rounded_angle); cJSON_AddNumberToObject(root, "angle",rounded_angle);
char *payload = cJSON_PrintUnformatted(root); char *payload = cJSON_PrintUnformatted(root);
angle_i++; angle_i++;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment