#include "stm32f10x.h"

#include "sys.h"

#include "PWM.h"

#include "delay.h"

#include "usart.h"

#include "mpu6050.h"

#include "inv_mpu.h"

#include "inv_mpu_dmp_motion_driver.h"

#include "LED.h"

#include "encode.h"

#include "oled.h"

#include "pid.h"

#include "timer.h"

#include "key.h"

extern float Count;  ///编码器故障,展示只有编码器2有用

extern float Count2;

extern float countD_value;

extern float Old_Count;

extern float Old_Count2;

extern float countD_value2;

extern float count_AND;

u16        Parameter = 1881;                                                                                                                                        //输入编码器线数

//u8 t=0,report=1;                        //默认开启上报

u8 key;

float pitch,roll,yaw;                 //欧拉角

short aacx,aacy,aacz;                //加速度传感器原始数据

short gyrox,gyroy,gyroz;        //陀螺仪原始数据

short temp;                                        //温度

float PIDoutALL;

void int_all(void);

void Get_Data(void);

int main(void)

{

int_all();

while(1)

Get_Data();

}

void int_all(void)

{

uart_init(115200);

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

SystemInit();

delay_init();

NVIC_Cfg();

GPIO_Cfg();

TIM1_Init();

TIME2_INT(10,7199);//1ms

TIM_Cfg();

TIM_Cmd(TIM3,ENABLE);

TIM4_Init();

OLED_Init();

MPU_Init();                                        //初始化MPU6050

LED1_INT();

Angle_PID_init();

Speed_PID_init();

KEY_Init();

}

void Get_Data(void)

{

//        u8 t=0,report=1;                        //默认开启上报

//        u8 key;

//        float pitch,roll,yaw;                 //欧拉角

//        short aacx,aacy,aacz;                //加速度传感器原始数据

//        short gyrox,gyroy,gyroz;        //陀螺仪原始数据

//        short temp;                                        //温度

//        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

//        delay_init();        //延时初始化

//        usmart_dev.init(72);                //初始化USMART

//        LED_Init();                                          //初始化与LED连接的硬件接口

//        KEY_Init();                                        //初始化按键

//        LCD_Init();                                           //初始化LCD

//        MPU_Init();                                        //初始化MPU6050

LED1=1;

LED2=1;

OLED_ShowStr(16, 0,"Balance Car",2);

//  OLED_ON();

//        while(mpu_dmp_init())

//         {

LED2=0;

OLED_ShowStr(0, 2,"Int MPU6050 . ",2);

delay_ms(300);

OLED_ShowStr(0, 2,"Int MPU6050 ..",2);

delay_ms(300);

OLED_ShowStr(0, 2,"Int MPU6050 ...",2);

delay_ms(300);

OLED_ShowStr(0, 2,"               ",2);

//        }

OLED_ShowStr(0, 2,"MPU6050 Check Ok",2);

//        LCD_ShowString(30,130,200,16,16,"MPU6050 OK");

//        LCD_ShowString(30,150,200,16,16,"KEY0:UPLOAD ON/OFF");

//        POINT_COLOR=BLUE;//设置字体为蓝色

//         LCD_ShowString(30,170,200,16,16,"UPLOAD ON ");

//         LCD_ShowString(30,200,200,16,16," Temp:    . C");

//         LCD_ShowString(30,220,200,16,16,"Pitch:    . C");

//         LCD_ShowString(30,240,200,16,16," Roll:    . C");

//         LCD_ShowString(30,260,200,16,16," Yaw :    . C");

while(1)

{

key=KEY_Scan(0);

//                if(key==KEY0_PRES)

//                {

//                        report=!report;

//                        if(report)LCD_ShowString(30,170,200,16,16,"UPLOAD ON ");

//                        else LCD_ShowString(30,170,200,16,16,"UPLOAD OFF");

//                }

LED1=1;

if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0)

{

temp=MPU_Get_Temperature();        //得到温度值

MPU_Get_Accelerometer(&aacx,&aacy,&aacz);        //得到加速度传感器数据

MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);        //得到陀螺仪数据

//                        if(report)mpu6050_send_data(aacx,aacy,aacz,gyrox,gyroy,gyroz);//用自定义帧发送加速度和陀螺仪原始数据

//                        if(report)usart1_report_imu(aacx,aacy,aacz,gyrox,gyroy,gyroz,(int)(roll*100),(int)(pitch*100),(int)(yaw*10));

//            if((t%10)==0)

//                   {

pid.Pv=pitch;         //角度PID输入

pid2.Pv2=count_AND;   //速度PID输入

Angle_PID_Calc();    //角度PID计算

Speed_PID_Calc();    //速度PID计算

PIDoutALL=pid2.OUT2+pid.OUT; //双环PID合成

if(PIDoutALL<0)

ALL_right(-PIDoutALL+13);

if(PIDoutALL>0)

ALL_left(PIDoutALL+13);

//                                if(temp<0)

//                                {

////                                        LCD_ShowChar(30+48,200,'-',16,0);                //显示负号

//                                        temp=-temp;                //转为正数

////                                }else LCD_ShowChar(30+48,200,' ',16,0);                //去掉负号

////                                LCD_ShowNum(30+48+8,200,temp/100,3,16);                //显示整数部分

////                                LCD_ShowNum(30+48+40,200,temp%10,1,16);                //显示小数部分

//                                temp=pitch*10;

//

//

//                                if(temp<0)

//                                {

////                                        LCD_ShowChar(30+48,220,'-',16,0);                //显示负号

//                                        temp=-temp;                //转为正数

//                                }else LCD_ShowChar(30+48,220,' ',16,0);                //去掉负号

//                                LCD_ShowNum(30+48+8,220,temp/10,3,16);                //显示整数部分

//                                LCD_ShowNum(30+48+40,220,temp%10,1,16);                //显示小数部分

//                                temp=roll*10;

//

//

//                                if(temp<0)

//                                {

//                                        LCD_ShowChar(30+48,240,'-',16,0);                //显示负号

//                                        temp=-temp;                //转为正数

//                                }else LCD_ShowChar(30+48,240,' ',16,0);                //去掉负号

//                                LCD_ShowNum(30+48+8,240,temp/10,3,16);                //显示整数部分

//                                LCD_ShowNum(30+48+40,240,temp%10,1,16);                //显示小数部分

//                                temp=yaw*10;

//

//

//

//                                if(temp<0)

//                                {

//                                        LCD_ShowChar(30+48,260,'-',16,0);                //显示负号

//                                        temp=-temp;                //转为正数

//                                }else LCD_ShowChar(30+48,260,' ',16,0);                //去掉负号

//                                LCD_ShowNum(30+48+8,260,temp/10,3,16);                //显示整数部分

//                                LCD_ShowNum(30+48+40,260,temp%10,1,16);                //显示小数部分

//                                t=0;

////                                LED0=!LED0;//LED闪烁

//                  }

}

//                t++;

if(Old_Count != Count)                                                                                                                //如果先前的计数值与当前计数值不相等,说明编码器已转动打印当前数值

{

LED1=0;

OLED_ShowStr(0, 0,"AUTO Parking Station",1);

}

//

}

}

更多推荐