最近用正点原子mini版学习mpu6050,我去除源码里的LCD和串口通信的部分。用6050的一个横滚角的变化控制一个LED.后来想挂多个mpu6050,于是在源码上进行修改,源码用PC11,PC12模拟IIC通信,我加了一组IO口,用PB0,PB1控制另一个6050,然后所有有关的函数都copy了一遍,比如照着源码里的MPU_Init()加一个MPU1_Init()。两部分代码都能单独运行成功,可是一放到一起就不行了。总是之前的那个6050可以一起控制两个LED,而另一个6050还有很大问题。求大神帮忙,新手入门。
主函数程序如下
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "mpu6050.h"
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h"
#include "mpu60501.h"
#include "inv_mpu1.h"
#include "inv_mpu1_dmp_motion_driver.h"
u8 MPU_return()
{
float angle;
float pitch,roll,yaw;
if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0)
{
angle=roll;
}
return angle;
}
u8 MPU1_return()
{
float angle;
float pitch1,roll1,yaw1;
if(mpu1_dmp_get_data(&pitch1,&roll1,&yaw1)==0)
{
angle=pitch1;
}
return angle;
}
int main(void)
{
float order;
float order1;
delay_init(); //ÑÓʱº¯Êý³õʼ»¯
LED_Init(); //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
MPU1_Init(); //³õʼ»¯MPU6050
MPU_Init();
while(mpu_dmp_init())
{
LED0=0;
delay_ms(200);
LED0=1;
delay_ms(200);
}
while(mpu1_dmp_init())
{
LED1=0;
delay_ms(200);
LED1=1;
delay_ms(200);
}
while(1)
{
order1=MPU1_return();
if(order1>0&&order1<45)
{
LED1=0;
}
else
{
LED1=1;
}
order=MPU_return();
if(order>0&&order<45)
{
LED0=0;
}
else
{
LED0=1;
}
}
}
|