コウスケ スズキ
/
20224222
i2c 2
main.cpp
- Committer:
- kosukesuzuki
- Date:
- 2022-04-22
- Revision:
- 0:bf86efb237ca
- Child:
- 1:b38a436a0059
File content as of revision 0:bf86efb237ca:
/* MPU9250をi2c通信してみた。 1バイトずつ送受信する場合は、スタートコンディション・ストップコンディションなどのアドレス送信などの制御が必要です。 連続だったら、いいらしい。(参照 https://os.mbed.com/users/okini3939/notebook/I2C_jp/ ) 「マスターが受信する」によって、取得するため 1.slave address(スレーブアドレス→内部レジスタ) 2.ack(受信) 3.data1(8bits) 4.ack=1(送信) 5.data2(8bits) 6.ack=1(送信) (参照 http://www.picfun.com/c15.html ) */ #include "mbed.h" Serial pc(USBTX,USBRX); I2C i2c(p9, p10); const int addr = 0xD0; //加速度とジャイロのスレーブアドレス short int xl,xh; //x軸の加速度 short int yl,yh; //y軸の加速度 short int zl,zh; int main() { i2c.frequency(100000); pc.printf("Start!!\r\n"); while(1) { //x軸加速度取得 //1.slave address(スレーブアドレス→内部レジスタ) i2c.start(); i2c.write(addr);// slaveアドレス i2c.write(0x3b);// 内部レジスタ(59) i2c.stop(); //2.ack=0(受信) i2c.start(); i2c.read(false); //ack(受信) //3.data1(8bits) i2c.write(0x3c);//data1(60)1 i2c.stop(); //4.ack=0(送信) i2c.start(); i2c.write(addr|0x01); //ack=1(送信) xh = i2c.read(0);//data取り出す i2c.stop(); i2c.start(); //5.data2(8bits) i2c.write(0x3d);//data2(61)2 //6.ack=1(送信) i2c.write(addr|0x01); //ack=1(受信) xl = i2c.read(0);//data取り出す i2c.stop(); //以下2~6を繰り返す。 //y軸加速度取得 i2c.start(); i2c.read(false); //ack(受信) i2c.write(0x3e); //data(62)3 i2c.stop(); i2c.start(); i2c.write(addr|0x01); //ack=1(送信) yh = i2c.read(0);//data取り出す i2c.stop(); i2c.start(); i2c.write(0x3f); //data(63)4 i2c.write(addr|0x01); //ack=1(送信) yl = i2c.read(0);//data取り出す i2c.stop(); //z軸加速度取得 i2c.start(); i2c.read(false); //ack(受信) i2c.write(0x40); //data(64)5 i2c.stop(); i2c.start(); i2c.write(addr|0x01); //ack=1(送信) zh = i2c.read(0);//data取り出す i2c.stop(); i2c.start(); i2c.write(0x41); //data(65)6 i2c.write(addr|0x01); //ack=1(送信) zl = i2c.read(0);//data取り出す i2c.stop(); double acc_ax = short((xh<<8) | (xl)); double acc_ay = short((yh<<8) | (yl)); double acc_az = short((zh<<8) | (zl)); double AX = (acc_ax)*2/32768*9.81; double AY = (acc_ay)*2/32768*9.81; double AZ = (acc_az)*2/32768*9.81; pc.printf("%f %f %f\r\n",AX,AY,AZ); wait(0.01); } }