コウスケ スズキ
/
MPU9250class
classにしてみたけど, 値がなぞ
main.cpp
- Committer:
- kosukesuzuki
- Date:
- 21 months ago
- Revision:
- 0:f6e2eff23d2d
File content as of revision 0:f6e2eff23d2d:
//level 2 #include "mbed.h" I2C mpu9250(p9,p10); uint8_t addrAG = 0b1101001<<1;//AD0=H(VDDIOにした)/7bitであるため. 右にズラして,左に0を追加することで, 8bitにする。 加速度ジャイロのスレーブアドレス uint8_t addrM = 0b0001100<<1;//磁気センサのスレーブアドレス double G = 9.80665;//重力加速度 class mpu{//クラス宣言 //メンバの宣言 private: //外部から操作不可 public: //操作可能 char addr; int ac[3];//単位mV int gy[3];//単位mV int mg[3];//単位mV void ready(); void who(); void accel(int *ac); void gyro(int *gy); void magnet(int *mg); }; void mpu::ready(){ char data[7]; data[0]=0x00; addr = 0x6b; mpu9250.write(addr,data,1);//0x6bに0x00を書き込む data[0]=0x02; addr = 0x37; } void mpu::who(){ char data[7]; int i; addr = addrAG; for(i=0;i<2;i++){ data[0] = 0x75; //こいつを読んで, 0x71がかえってくる。 mpu9250.write( addr, data, 1,1);//内部レジスタを指定(1=1byte) mpu9250.read( addr,data, 1,0);//レジスタの読み取り uint8_t WHO = data[0]; if(WHO == 0x71){ printf("0x%x/WHO_I_AM is Yes\r\n",addr>>1); }else{ printf("0x%x/WHO_I_AM is NO\r\n",addr>>1); } addr = addrM; } } void mpu::accel(int *ac){ //加速度//スコープ解決演算子 char data[7]; //int ac[3];//単位mV data[0] = 0x3b; mpu9250.write(addrAG,data,1,1); mpu9250.read(addrAG,data,7,0); ac[0]=(short)data[0]<<8|(short)data[1]; ac[1]=(short)data[2]<<8|(short)data[3]; ac[2]=(short)data[4]<<8|(short)data[5]; } void mpu::gyro(int *gy){ //角速度//スコープ解決演算子 char data[7]; //int gy[3];//単位mV data[0] = 0x43; mpu9250.write(addrAG,data,1,1); mpu9250.read(addrAG,data,7,0); gy[0]=(short)data[0]<<8|(short)data[1]; gy[1]=(short)data[2]<<8|(short)data[3]; gy[2]=(short)data[4]<<8|(short)data[5]; } void mpu::magnet(int *mg){ //地磁気//スコープ解決演算子 char data[7]; //int mg[3];//単位mV data[0]=0x12; addr=0x0A; mpu9250.write(addr,data,1);//AD変換(8Hz)を行う。 data[0]=0x03; mpu9250.write(addrM,data,1,1); mpu9250.read(addrM,data,7,0); mg[0]=((short)data[1]<<8|(short)data[0]); mg[1]=((short)data[3]<<8|(short)data[2]); mg[2]=((short)data[5]<<8|(short)data[4]); } Serial pc(USBTX,USBRX); int main(){ mpu mpu; float AX,AY,AZ; float GX,GY,GZ; float MX,MY,MZ; mpu.ready(); mpu.who(); int ac[3];//単位mV int gy[3];//単位mV int mg[3];//単位mV while(1){ mpu.accel(ac); AX=(float)ac[0]; AY=(float)ac[1]; AZ=(float)ac[2]; mpu.gyro(gy); GX=(float)gy[0]; GY=(float)gy[1]; GZ=(float)gy[2]; mpu.magnet(mg); MX=(float)mg[0]; MY=(float)mg[1]; MZ=(float)mg[2]; printf("x%.3f ,y%.3f ,z%.3f ",AX,AY,AZ); printf("x%.3f ,y%.3f ,z%.3f ",GX,GY,GZ); printf("x%.3f ,y%.3f ,z%.3f\r\n",MX,MY,MZ); wait(0.01); } }