接上次OLED屏幕显示的实现,本次使用IIC实现陀螺仪数据读取。
引脚使用与上次OLED屏幕的接口一致,使用IIC0实现,只在程序上进行修改。
实物连接:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/ioctl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<sys/select.h>
#include<sys/time.h>
#include<errno.h>
#define SMPLRT_DIV 0x19
#define CONFIG 0x1A
#define GYRO_CONFIG 0x1B
#define ACCEL_CONFIG 0x1C
#define ACCEL_XOUT_H 0x3B
#define ACCEL_XOUT_L 0x3C
#define ACCEL_YOUT_H 0x3D
#define ACCEL_YOUT_L 0x3E
#define ACCEL_ZOUT_H 0x3F
#define ACCEL_ZOUT_L 0x40
#define TEMP_OUT_H 0x41
#define TEMP_OUT_L 0x42
#define GYRO_XOUT_H 0x43
#define GYRO_XOUT_L 0x44
#define GYRO_YOUT_H 0x45
#define GYRO_YOUT_L 0x46
#define GYRO_ZOUT_H 0x47
#define GYRO_ZOUT_L 0x48
#define PWR_MGMT_1 0x6B
#define WHO_AM_I 0x75
#define SlaveAddress 0xD0
#define Address 0x68 //MPU6050地址
#define I2C_RETRIES 0x0701
#define I2C_TIMEOUT 0x0702
#define I2C_SLAVE 0x0703 //IIC从器件的地址设置
#define I2C_BUS_MODE 0x0780
int main(int argc, char * argv[])
{
MPU6050_Init();
usleep(1000 * 100);
while (1)
{
//printf("\033[2J");
usleep(1000 * 200);
printf("ACCE_X:%6d\n ", GetData(ACCEL_XOUT_H));
usleep(1000 * 200);
printf("ACCE_Y:%6d\n ", GetData(ACCEL_YOUT_H));
usleep(1000 * 200);
printf("ACCE_Z:%6d\n ", GetData(ACCEL_ZOUT_H));
usleep(1000 * 200);
printf("GYRO_X:%6d\n ", GetData(GYRO_XOUT_H));
usleep(1000 * 200);
printf("GYRO_Y:%6d\n ", GetData(GYRO_YOUT_H));
usleep(1000 * 200);
printf("GYRO_Z:%6d\n\n ", GetData(GYRO_ZOUT_H));
sleep(1);
}
close(fd);
}
编译,将生成的可执行文件使用SSH传入开发板中。
添加可执行文件权限:
进行陀螺仪原始数据读取:
本次陀螺仪原始数据读取完成,实现过程中相对比较方便,不用进行底层驱动开发,在应用层调用接口打开IIC设备即可。
更多回帖