第七屆工訓賽物流組資料(小車電控程序)- #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; //時間計數(shù)變量
- 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; //用于更新坐標(單位時間內(nèi)【50ms】左輪前進距離和右輪前進距離)
- u8 state=1; //mode=0,停止;mode=1,直行;mode=2,右轉(zhuǎn)90度;mode =3,左轉(zhuǎn)90度;mode=4,左轉(zhuǎn)180度
- u16 Voltage; //電池電壓
- u16 AD_Value[2]; //電池電壓ADC轉(zhuǎn)換的結(jié)果
- u8 Turn_Flag; //轉(zhuǎn)向標志,如果某一次轉(zhuǎn)向完成,則置1,反之,置0
- u8 Task=2; //通過掃描二維碼得到的任務
- unsigned char FSM_Status = 0; //狀態(tài)機的狀態(tài)變量
- 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; //姿態(tài)目標值,Target_Beta 1號舵機旋轉(zhuǎn)角度,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(); //延時函數(shù)初始化
- 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; //右轉(zhuǎn)90 90
- oled_show();
- if(Turn_Flag == 1)//轉(zhuǎn)向完成
- {
- 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; //右轉(zhuǎn)90 180
- oled_show();
- if(Turn_Flag == 1)//轉(zhuǎn)向完成
- {
- state = 0; //停
- Turn_Flag =0;
- break;
- }
- }
- delay_ms(300);
- while(1)
- {
- state = 2; //右轉(zhuǎn)90 -90
- oled_show();
- if(Turn_Flag == 1)//轉(zhuǎn)向完成
- {
- 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; //右轉(zhuǎn)90 0
- oled_show();
- if(Turn_Flag == 1)//轉(zhuǎn)向完成
- {
- state = 0; //停
- Turn_Flag =0;
- break;
- }
- }
- delay_ms(300);
- while(1)
- {
- state = 4;//左轉(zhuǎn)180 -180
- oled_show();
- if(Turn_Flag == 1)//轉(zhuǎn)向完成
- {
- state = 0; //停
- Turn_Flag =0;
- break;
- }
- }
- delay_ms(300);
- while(1)
- {
- state = 2; //右轉(zhuǎn)90 -90
- oled_show();
- if(Turn_Flag == 1)//轉(zhuǎn)向完成
- {
- 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; //左轉(zhuǎn)90 -180
- oled_show();
- if(Turn_Flag == 1)//轉(zhuǎn)向完成
- {
- 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, 下載次數(shù): 25)
2021-8-6 16:00 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|