STM32平衡小车的代码
单片机源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "lcd.h"
- #include "usart.h"
- #include "mpu6050.h"
- #include "inv_mpu.h"
- #include "inv_mpu_dmp_motion_driver.h"
- #include "oled.h"
- #include "pwm.h"
- #include "function.h"
- #include "fuzzy.h"
- #include "time.h"
- #include "FTM.h"
- #include "rtu.h"
- char receive;
- float result;
- angle ress;
- p_angle res;
- speed_s spe_L;
- speed_ss speed_L;
- speed_s spe_R;
- speed_ss speed_R;
- out_b outt;
- out_c out;
- int ab;
- float roll;
- int ti=9;
- float ta;
- int ti_r;
- int ti_l;
- float CN_timer2;
- float CN_timer3;
- int time;
- int32_t rtu_send[6];
- int main(void)
- {
- float mm=0;
- int P=64;
- float I=0;
- float D=0.005;
- float i;
- float d;
- float e;
- int integer,point;
- float pitch,yaw; //欧拉角
- short aacx,aacy,aacz; //加速度传感器原始数据
- short gyrox,gyroy,gyroz; //陀螺仪原始数据
- short temp; //温度
- int m;
- out=&outt;
- res=&ress;
- speed_L=&spe_L;
- speed_R=&spe_R;
- speed_L->speed_last=0;
- speed_R->speed_last=0;
- ta=0;
- ti=80;
- res->angle_sum=0;
- res->angle_error=0;
- res->angle_last=0;
- res->angle_now=0;
- m=0;
- delay_init(); //延时初始化
- OLED_Init();
- pwm_init();
- time1_init();
- uart_init(115200);
- Hardware_init();
- ti=0;
-
- ab=1000;
- OLED_ShowString(40,2 ,"Stop");
- while(1)
- {
- // if(ti<0)
- // ti=0;
- //
- // if(ab>100)
- // ab=100;
- // ti=ab;
- //
- if(ti<0) ti=0;
- if(ti>100) ti=100;
- if(ab<0) ab=0;
- if(ab>0) ab=100;
-
- OLED_ShowString(0,0 ,"Direction:");
- OLED_ShowString(0,4 ,"Speed:");
- OLED_ShowNum(40,6,100-ti,3,24);
- OLED_ShowString(96,6 ,"%");
- // OLED_ShowNum(0,2,ta,3,32);
- switch (receive)
- {
- case 'A':
- ti+=5;
- receive='p';
- break;
- case 'B':
- ti-=5;
- receive='p';
- break;
- case 'C':
- forward();
- OLED_Clear();
- OLED_ShowString(40,2 ,"Forward");
- receive='p';
- break;
- case 'D':
- back();
- OLED_Clear();
- OLED_ShowString(40,2 ,"Back");
- receive='p';
- break;
- case 'E' :
- stop();
- ti=0;;
- OLED_Clear();
- OLED_ShowString(40,2 ,"Stop");
- receive='p';
- break;
- case 'F' :
- left();
- OLED_Clear();
- OLED_ShowString(40,2 ,"Turn_left");
- receive='p';
- break;
- case 'G' :
- right();
- OLED_Clear();
- OLED_ShowString(40,2 ,"Turn_right");
- receive='p';
- break;
- case 'H' :
- up();
- ti=50;
- OLED_Clear();
- OLED_ShowString(40,2 ,"up");
- receive='p';
- break;
- case 'I' :
- down();
- ti=50;
- OLED_Clear();
- OLED_ShowString(40,2 ,"down");
- receive='p';
- break;
- case 'J' :
- ab-=5;
- OLED_Clear();
- receive='p';
- break;
- case 'K' :
- ab+=5;
- OLED_Clear();
- receive='p';
- break;
-
- }
- }

芯片解密