コウスケ スズキ / Mbed 2 deprecated mpu9250test

Dependencies:   mbed

Committer:
kosukesuzuki
Date:
Mon Dec 12 11:10:42 2022 +0000
Revision:
0:0ad7e1d9fb12
mpu9250

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kosukesuzuki 0:0ad7e1d9fb12 1 #include "mbed.h"
kosukesuzuki 0:0ad7e1d9fb12 2
kosukesuzuki 0:0ad7e1d9fb12 3 I2C i2c(p9,p10);
kosukesuzuki 0:0ad7e1d9fb12 4 Serial pc(USBTX,USBRX);
kosukesuzuki 0:0ad7e1d9fb12 5
kosukesuzuki 0:0ad7e1d9fb12 6 //スレーブアドレス
kosukesuzuki 0:0ad7e1d9fb12 7 uint8_t addrAG = 0b1101001<<1;//AD0=H(VDDIOにした)/7bitであるため. 右にズラして,左に0を追加することで, 8bitにする。 加速度ジャイロのスレーブアドレス
kosukesuzuki 0:0ad7e1d9fb12 8 uint8_t addrM = 0b0001100<<1;//磁気センサのスレーブアドレス
kosukesuzuki 0:0ad7e1d9fb12 9
kosukesuzuki 0:0ad7e1d9fb12 10 //メモ
kosukesuzuki 0:0ad7e1d9fb12 11 //1byte=8bit(char)
kosukesuzuki 0:0ad7e1d9fb12 12 //2byte=16bit(int(shortも))
kosukesuzuki 0:0ad7e1d9fb12 13
kosukesuzuki 0:0ad7e1d9fb12 14 int main() {
kosukesuzuki 0:0ad7e1d9fb12 15 int i,val; //valは1or0などの確認用
kosukesuzuki 0:0ad7e1d9fb12 16 uint8_t addr,addr1;
kosukesuzuki 0:0ad7e1d9fb12 17 char cmd[1];//charはmbedのi2c使用であるため。
kosukesuzuki 0:0ad7e1d9fb12 18
kosukesuzuki 0:0ad7e1d9fb12 19 //セッシング(スリーブモード解除)
kosukesuzuki 0:0ad7e1d9fb12 20 i2c.start();
kosukesuzuki 0:0ad7e1d9fb12 21 cmd[0]=0x00;
kosukesuzuki 0:0ad7e1d9fb12 22 addr1 = 0x6b;
kosukesuzuki 0:0ad7e1d9fb12 23 i2c.write(addr1,cmd,1);//0x6bに0x00を書き込む
kosukesuzuki 0:0ad7e1d9fb12 24 cmd[0]=0x02;
kosukesuzuki 0:0ad7e1d9fb12 25 addr1 = 0x37;
kosukesuzuki 0:0ad7e1d9fb12 26 i2c.write(addr1,cmd,1);//0x37に0x02を書き込む
kosukesuzuki 0:0ad7e1d9fb12 27
kosukesuzuki 0:0ad7e1d9fb12 28 //who I amで正常か?を判断する。実際, 加速度・ジャイロと地磁気の二つを確認している。
kosukesuzuki 0:0ad7e1d9fb12 29 addr = addrAG;
kosukesuzuki 0:0ad7e1d9fb12 30 for(i=0;i<2;i++){
kosukesuzuki 0:0ad7e1d9fb12 31 cmd[0] = 0x75; //こいつを読んで, 0x71がかえってくる。
kosukesuzuki 0:0ad7e1d9fb12 32 val=i2c.write( addr, cmd, 1);//内部レジスタを指定(1=1byte)
kosukesuzuki 0:0ad7e1d9fb12 33 //printf("val=%d",val);
kosukesuzuki 0:0ad7e1d9fb12 34 char v;
kosukesuzuki 0:0ad7e1d9fb12 35 val=i2c.read( addr, &v, 1);//レジスタの読み取り
kosukesuzuki 0:0ad7e1d9fb12 36 uint8_t WHO = v;
kosukesuzuki 0:0ad7e1d9fb12 37 //printf("val=%d, 0x%x",val,WHO);
kosukesuzuki 0:0ad7e1d9fb12 38 if(WHO == 0x71){
kosukesuzuki 0:0ad7e1d9fb12 39 printf("0x%x/WHO_I_AM is Yes\r\n",addr>>1);
kosukesuzuki 0:0ad7e1d9fb12 40 }else{
kosukesuzuki 0:0ad7e1d9fb12 41 printf("0x%x/WHO_I_AM is NO\r\n",addr>>1);
kosukesuzuki 0:0ad7e1d9fb12 42 }
kosukesuzuki 0:0ad7e1d9fb12 43 addr = addrM;
kosukesuzuki 0:0ad7e1d9fb12 44 }
kosukesuzuki 0:0ad7e1d9fb12 45
kosukesuzuki 0:0ad7e1d9fb12 46 //加速度・ジャイロ
kosukesuzuki 0:0ad7e1d9fb12 47 //0x3bからの14byteに含まれる。そのデータを読む。一つのデータは16bit(=2byte)となるため, 2つのchar(8bit)として分けることができる。 short intなども可ではある。
kosukesuzuki 0:0ad7e1d9fb12 48 //加速度x:0x3b[0],0x3c[1] y:0x3d[3],0x3e[4] z:0x3f[5],0x40[6] (0x41[7],0x42[8]は違うデータ)
kosukesuzuki 0:0ad7e1d9fb12 49 //角速度x:0x43[9],0x44[10] y:0x45[11],0x46[12] z:0x47[13],0x48[14]
kosukesuzuki 0:0ad7e1d9fb12 50 //上位8bitが先に並んでいる。
kosukesuzuki 0:0ad7e1d9fb12 51
kosukesuzuki 0:0ad7e1d9fb12 52 char data[14];
kosukesuzuki 0:0ad7e1d9fb12 53 data[0] = 0x3b;
kosukesuzuki 0:0ad7e1d9fb12 54 val=i2c.write(addrAG,data,1);
kosukesuzuki 0:0ad7e1d9fb12 55 //printf("%d",val);
kosukesuzuki 0:0ad7e1d9fb12 56 val=i2c.read(addrAG,data,14);
kosukesuzuki 0:0ad7e1d9fb12 57 //printf("%d\r\n",val);
kosukesuzuki 0:0ad7e1d9fb12 58
kosukesuzuki 0:0ad7e1d9fb12 59
kosukesuzuki 0:0ad7e1d9fb12 60 i2c.stop();
kosukesuzuki 0:0ad7e1d9fb12 61 }