Commit f46f5a10 authored by 学习的菜鸟's avatar 学习的菜鸟

6

parent 63ec8d51
......@@ -40,10 +40,10 @@ include_directories(
app/device_identity
app/main
app/device_change
drivers/common
drivers/gpio
drivers/network
drivers/sensors
drivers/devicecontrol
modules/logger
modules/delay
modules/thread_pool
......@@ -60,6 +60,7 @@ file(GLOB_RECURSE SOURCES
drivers/gpio/*.c
drivers/network/*.c
drivers/sensors/*.c
drivers/devicecontrol/*c
modules/logger/*.c
modules/delay/*.c
modules/thread_pool/*.c
......
#include "car0101_control.h"
#include "gpio_init.h"
/*将角度转化为对应的舵机pwm值*/
void car_calculate_L_R(int angle) {
if (angle < 0) {
angle = 0;
} else if (angle > 180) {
angle = 180;
}
float pulse_width=(2 / 180.0) * angle + 0.5;
// 周期(ms)
float period = 1000.0 / 50;
int val = (int)((pulse_width / period) * 1000);
pwmWrite(PWM_PIN_CHANGE,val);
}
/*车中间值,停止舵机中间函数*/
void car0101_middle_pwm() {//车停止pwm值
pwmWrite(PWM_PIN_SPEED,75);
car_calculate_L_R(90);
}
/*车的速度转向函数*/
void car0101_mode_1_flont(unsigned char gval) {
if (gval < 50) {
pwmWrite(PWM_PIN_SPEED, 75);
} else if (gval <= 55) {
pwmWrite(PWM_PIN_SPEED, 71);
} else if (gval <= 60) {
pwmWrite(PWM_PIN_SPEED, 70);
} else if (gval <= 65) {
pwmWrite(PWM_PIN_SPEED, 70);
} else if (gval <= 70) {
pwmWrite(PWM_PIN_SPEED, 70);
} else if (gval <= 75) {
pwmWrite(PWM_PIN_SPEED, 69);
} else if (gval <= 90) {
pwmWrite(PWM_PIN_SPEED, 68);
} else if (gval <= 100) {
pwmWrite(PWM_PIN_SPEED, 68);
} else if (gval <= 110) {
pwmWrite(PWM_PIN_SPEED, 66);
} else if (gval <= 120) {
pwmWrite(PWM_PIN_SPEED, 65);
} else if (gval <= 130) {
pwmWrite(PWM_PIN_SPEED, 64);
} else if (gval <= 140) {
pwmWrite(PWM_PIN_SPEED, 62);
} else if (gval <= 150) {
pwmWrite(PWM_PIN_SPEED, 60);
} else if (gval <= 160) {
pwmWrite(PWM_PIN_SPEED, 59);
} else if (gval <= 170) {
pwmWrite(PWM_PIN_SPEED, 58);
} else if (gval <= 180) {
pwmWrite(PWM_PIN_SPEED, 57);
} else if (gval <= 190) {
pwmWrite(PWM_PIN_SPEED, 56);
} else if (gval <= 200) {
pwmWrite(PWM_PIN_SPEED, 55);
}
}
void car0101_mode_2_back(unsigned char gval) {
if(gval<50) {
pwmWrite(PWM_PIN_SPEED,75);
}else if(50<=gval&&gval<=55) {
pwmWrite(PWM_PIN_SPEED,76);
}else if(55<gval&&gval<=60) {
pwmWrite(PWM_PIN_SPEED,77);
}else if(60<gval&&gval<=65) {
pwmWrite(PWM_PIN_SPEED,77);
}else if(65<gval&&gval<=70) {
pwmWrite(PWM_PIN_SPEED,78);
}else if(70<gval&&gval<=75) {
pwmWrite(PWM_PIN_SPEED,78);
}else if(75<gval&&gval<=90) {
pwmWrite(PWM_PIN_SPEED,79);
}else if(90<gval&&gval<=100) {
pwmWrite(PWM_PIN_SPEED,80);
}else if(110<gval&&gval<=120) {
pwmWrite(PWM_PIN_SPEED,81);
}else if(120<gval&&gval<=130) {
pwmWrite(PWM_PIN_SPEED,82);
}else if(130<gval&&gval<=140) {
pwmWrite(PWM_PIN_SPEED,83);
}else if(140<gval&&gval<=150) {
pwmWrite(PWM_PIN_SPEED,84);
}else if(150<gval&&gval<=160) {
pwmWrite(PWM_PIN_SPEED,85);
}else if(160<gval&&gval<=170) {
pwmWrite(PWM_PIN_SPEED,86);
}else if(170<gval&&gval<=180) {
pwmWrite(PWM_PIN_SPEED,87);
}else if(180<gval&&gval<=190) {
pwmWrite(PWM_PIN_SPEED,88);
}else if(190<gval&&gval<=200) {
pwmWrite(PWM_PIN_SPEED,89);
}
}
void car0101_mode_3_left(unsigned char gval) {
if (gval < 45) {
car_calculate_L_R(90);
} else if (gval <= 51) {
car_calculate_L_R(110);
} else if (gval <= 57) {
car_calculate_L_R(120);
} else if (gval <= 63) {
car_calculate_L_R(130);
} else if (gval <= 69) {
car_calculate_L_R(130);
} else if (gval <= 75) {
car_calculate_L_R(140);
} else if (gval <= 81) {
car_calculate_L_R(145);
} else if (gval <= 87) {
car_calculate_L_R(150);
} else if (gval <= 93) {
car_calculate_L_R(150);
} else if (gval <= 100) {
car_calculate_L_R(160);
}else if (gval <= 107) {
car_calculate_L_R(170);
}else if (gval <= 120) {
car_calculate_L_R(180);
}
}
void car0101_mode_4_right(unsigned char gval) {
if (gval < 45) {
car_calculate_L_R(90);
} else if (gval <= 51) {
car_calculate_L_R(70);
} else if (gval <= 57) {
car_calculate_L_R(66);
} else if (gval <= 63) {
car_calculate_L_R(62);
} else if (gval <= 69) {
car_calculate_L_R(55);
} else if (gval <= 75) {
car_calculate_L_R(45);
} else if (gval <= 81) {
car_calculate_L_R(40);
} else if (gval <= 87) {
car_calculate_L_R(30);
} else if (gval <= 93) {
car_calculate_L_R(30);
} else if (gval <= 100) {
car_calculate_L_R(20);
} else if (gval <= 107) {
car_calculate_L_R(10);
} else if (gval <= 120) {
car_calculate_L_R(0);
}
}
void car0101_control_change(unsigned char *buf) {//车速度和转向引脚数值处理函数
unsigned char mode=buf[1];
unsigned char val=buf[2];
switch(mode){
case 1:
car0101_mode_1_flont(val);
break;
case 2:
car0101_mode_2_back(val);
break;
case 3:
car0101_mode_3_left(val);
break;
case 4:
car0101_mode_4_right(val);
break;
default:
break;
}
}
#ifndef CAR0101_CONTROL_H
#define CAR0101_CONTROL_H
void car0101_control_change(unsigned char *buf);
void car0101_middle_pwm();
#endif
\ No newline at end of file
#include "device_init.h"
#include "gpio_init.h"
\ No newline at end of file
#include "car0101_control.h"
#include "common.h"
#include "gpio_init.h"
int abnormal_pin_pwm_stop=0;
const deviceconfig_t device_configs[] = {
// car0101配置
{
.device_id = 101,
.device_name = "car0101",
.gpio_pins = {5, 6, 7, 10, 16, 20, 22, 23, 24, 25, 26, 27, -1},
.device_pwm_init = physics_pwm_init,
.device_control_stop = car0101_middle_pwm,
.emergency_code = 101
},
// // car0102配置
// {
// .device_id = 102,
// .device_name = "car0102",
// .gpio_pins = {5, 6, 7, 10, 16, 20, 22, 23, 24, 25, 26, 27, -1},
// .device_pwm_init = pwm_init_speed,
// .device_control_stop = car0102_speed_stop,
// .emergency_code = 102
// },
// // car0103配置(根据您的需求补充)
// {
// .device_id = 103,
// .device_name = "car0103",
// .gpio_pins = {5, 6, 7, 10, 16, 20, 22, 23, 24, 25, 26, 27,-1},/* 补充GPIO引脚 */
// .device_pwm_init = pwm_init_speed,
// .device_control_stop = ,/* 补充速度控制函数 */
// .emergency_code = 103
// },
// // car0104配置(根据您的需求补充)
// {
// .device_id = 104,
// .device_name = "car0104",
// .gpio_pins = {5, 6, 7, 10, 16, 20, 22, 23, 24, 25, 26, 27,-1},/* 补充GPIO引脚 */
// .device_pwm_init = pwm_init_speed,
// .device_control_stop = ,/* 补充速度控制函数 */
// .emergency_code = 103
// },
// // tank0201配置(根据您的需求补充)
// {
// .device_id = 201,
// .device_name = "tank0201",
// .gpio_pins = { 6, 16, 20, 22, 23,-1},/* 补充GPIO引脚 */
// .gpio_pwms = {5 , 7 ,24,26, 27,-1},
// .device_pwm_init = pwm_init_speed,
// .device_control_stop = ,/* 补充速度控制函数 */
// .emergency_code = 103
// },
// // tank0202配置(根据您的需求补充)
// {
// .device_id = 202,
// .device_name = "tank0202",
// .gpio_pins = {5, 6, 7, 10, 16, 20, 22, 23, 24, 25, 26, 27,-1},/* 补充GPIO引脚 */
// .device_pwm_init = pwm_init_speed,
// .device_control_stop = ,/* 补充速度控制函数 */
// .emergency_code = 104
// },
// 结束标记
{ .device_id = -1 }
};
void device_init(int device_id) {
const deviceconfig_t *config = NULL;
// 查找设备配置
for(int i = 0; device_configs[i].device_id != -1; i++) {
if(device_configs[i].device_id == device_id) {
config = &device_configs[i];
break;
}
}
if(!config) {
printf("Error: Device ID %d not found!\n", device_id);
return;
}
// 执行初始化流程
init_gpioWPi(config->gpio_pins); // GPIO初始化
config->device_pwm_init(); // PWM初始化
config->device_control_stop(); // 速度控制初始化
// 设置异常停止代码
abnormal_pin_pwm_stop = config->emergency_code;
printf("%s initialized successfully!\n", config->device_name);
}
\ No newline at end of file
#ifndef DEVICE_INIT_H__
#define DEVICE_INIT_H__
extern int abnormal_pin_pwm_stop;
typedef struct {
int device_id; // 设备ID (101, 102等)
char device_name[20]; // 设备名称
int gpio_pins[20]; // GPIO引脚配置数组
int gpio_pwms[20];
void (*device_pwm_init)(void); // PWM初始化函数指针
void (*device_control_stop)(void);// 速度控制函数指针
int emergency_code; // 异常停止代码
} deviceconfig_t;
#endif
\ No newline at end of file
......@@ -99,7 +99,8 @@ void pin_value(int pin,int value) { //引脚控制
}
void pwm_init_speed() {
/*物理pwm初始化*/
void physics_pwm_init() {
int pwm_clock = 24000000 / (50 * 1000);// 定义 PWM 频率为 50Hz
pinMode(PWM_PIN_SPEED,PWM_OUTPUT);
pinMode(PWM_PIN_CHANGE,PWM_OUTPUT);
......
......@@ -20,7 +20,7 @@ void pin_value(int pin,int value);//控制引脚高低
void pin_all_default();//拉低车的控制引脚
void pwm_all_default();//软件pwm置0引脚
void pin_value(int pin,int value);
void pwm_init_speed();
void physics_pwm_init();
void pwm_value(int pin,int value); //软件陪我们控制调速
void device_exit_end();//main最后结束需要调用的函数
......
#ifndef COMMON_H
#define COMMON_H
#endif
\ No newline at end of file
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