标题:
第七届工训赛物流组小车电控程序
[打印本页]
作者:
爱慕春妮
时间:
2021-8-6 12:50
标题:
第七届工训赛物流组小车电控程序
第七届工训赛物流组资料(小车电控程序)
#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "timer.h"
#include "encoder.h"
#include "motor.h"
#include "dataprocess.h"
#include "steer.h"
#include "show.h"
#include "oled.h"
#include "exti.h"
#include "DataScope_DP.h"
#include "adc.h"
#include "dma.h"
#include "steercontrol.h"
u8 Mode_All=1; //总模式标志,0,控制电机,1,控制舵机
u16 Time_Count=0; //时间计数变量
u16 Distance_F,Distance_L; //前方距离和左边距离
u16 LocationInit_X,LocationInit_Y; //初始坐标
int Location_X,Location_Y; //当前坐标
float Yaw ; //航向角
int Encoder_Left,Encoder_Right;
int Distance_Left=0,Distance_Right=0; //用于更新坐标(单位时间内【50ms】左轮前进距离和右轮前进距离)
u8 state=1; //mode=0,停止;mode=1,直行;mode=2,右转90度;mode =3,左转90度;mode=4,左转180度
u16 Voltage; //电池电压
u16 AD_Value[2]; //电池电压ADC转换的结果
u8 Turn_Flag; //转向标志,如果某一次转向完成,则置1,反之,置0
u8 Task=2; //通过扫描二维码得到的任务
unsigned char FSM_Status = 0; //状态机的状态变量
float Target1=750,Target2=750,Target3=750,Target4=750,Target5=835,Target6=750; //电机目标值
float TargetX=0.2,TargetY=0,Target_Beta=-10,Target_Alpha=0,Target_Gamma=-5; //姿态目标值,Target_Beta 1号舵机旋转角度,Target_Alpha,云台角度,Target_Gamma,6号舵机角度
u16 Angle1=90,Angle2=90,Angle3=90,Angle4=90,Angle5=90,Angle6=105;
int main(void)
{
u16 i;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
LED_Init(); //LED初始化
OLED_Init(); //OLED初始化
uart_init(128000); //串口一初始化
// uart4_init(9600); //测距串口初始化
// uart5_init(115200); //openmv串口初始化
// AdcInit(); //电池电压采集
// MYDMA_Config(); //DMA1采集ADC
// IIC_Init(); //=====模拟IIC初始化
// MPU6050_initialize(); //=====MPU6050初始化
// DMP_Init(); //=====初始化DMP
Encoder_Init_TIM2(); //编码器初始化 ,右轮,为正值
Encoder_Init_TIM3(); //编码器初始化 ,左轮,为负值
Motor_Init(); //电机控制IO口初始化
Motor_PWM_Init(7199,0); //电机pwm初始化,10KHz
TIM1_PWM_Init(9999,144); //舵机PWM初始化,50Hz,T=20ms
TIM8_PWM_Init(9999,144); //舵机PWM初始化,50Hz,T=20ms
// TIM6_Int_Init(499,7200); //50ms定时中断
TIM7_Int_Init(99,7200); //10ms定时中断
EXTIX_Init(); //按键外部中断初始化
// EXTI_PC5_Init(); //mpu6050INT引脚中断初始化
// SetSteer(95,90,90,90,90,105);
// delay_ms(1000);
// delay_ms(1000);
// SetSteer_PID(95,155,90,180,90,130);
while(1)
{
oled_show();
delay_ms(50);
}
while(1)
{
state =1;//直行
oled_show();
if(Location_X == 0 && Location_Y >= 200)
{
state=0;//停
break;
}
}
for(i=0;i<20;i++)
{
oled_show();
delay_ms(50);
}
while(1)
{
state = 2; //右转90 90
oled_show();
if(Turn_Flag == 1)//转向完成
{
state = 0; //停
Turn_Flag =0;
break;
}
}
delay_ms(300);
while(1)
{
state = 1;//直行
oled_show();
if(Location_Y >= 200 && Location_X >= 1800)
{
state =0;
break;
}
}
delay_ms(300);
while(1)
{
state = 2; //右转90 180
oled_show();
if(Turn_Flag == 1)//转向完成
{
state = 0; //停
Turn_Flag =0;
break;
}
}
delay_ms(300);
while(1)
{
state = 2; //右转90 -90
oled_show();
if(Turn_Flag == 1)//转向完成
{
state = 0; //停
Turn_Flag =0;
break;
}
}
delay_ms(300);
while(1)
{
state = 1;//直行
oled_show();
if(Location_Y >= 200 && Location_X <= 900)
{
state =0;
break;
}
}
while(1)
{
state = 2; //右转90 0
oled_show();
if(Turn_Flag == 1)//转向完成
{
state = 0; //停
Turn_Flag =0;
break;
}
}
delay_ms(300);
while(1)
{
state = 4;//左转180 -180
oled_show();
if(Turn_Flag == 1)//转向完成
{
state = 0; //停
Turn_Flag =0;
break;
}
}
delay_ms(300);
while(1)
{
state = 2; //右转90 -90
oled_show();
if(Turn_Flag == 1)//转向完成
{
state = 0; //停
Turn_Flag =0;
break;
}
}
delay_ms(300);
while(1)
{
state = 1;//直行
oled_show();
if(Location_Y >= 200 && Location_X <= 0)
{
state =0;
break;
}
}
while(1)
{
state = 3; //左转90 -180
oled_show();
if(Turn_Flag == 1)//转向完成
{
state = 0; //停
Turn_Flag =0;
break;
}
}
delay_ms(300);
while(1)
{
state = 1;//直行
oled_show();
if(Location_Y <= 0 && Location_X <= 0)
{
state =0;
break;
}
}
while(1)
{
Led_Flash(50000);
oled_show();
delay_ms(50);
}
}
复制代码
代码下载,如有错误,请指正:
stm32程序.7z
(313.44 KB, 下载次数: 25)
2021-8-6 16:00 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1