Yamaguchi Atsushi / Mbed 2 deprecated l3gd20

Dependencies:   mbed

Committer:
yamaguchiatsushi
Date:
Mon Dec 06 06:40:40 2021 +0000
Revision:
1:04b7521f737d
Parent:
0:950c605f154f
Child:
2:0eff70bb95df
all gyro output is 0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yamaguchiatsushi 0:950c605f154f 1 # include<mbed.h>
yamaguchiatsushi 0:950c605f154f 2
yamaguchiatsushi 1:04b7521f737d 3 I2C i2c(D4, D5);//sda,scl
yamaguchiatsushi 1:04b7521f737d 4 Serial pc(USBTX,USBRX);
yamaguchiatsushi 0:950c605f154f 5
yamaguchiatsushi 0:950c605f154f 6 void main()
yamaguchiatsushi 0:950c605f154f 7 {
yamaguchiatsushi 1:04b7521f737d 8 /*
yamaguchiatsushi 0:950c605f154f 9 // Create I2C bus
yamaguchiatsushi 0:950c605f154f 10 int file;
yamaguchiatsushi 1:04b7521f737d 11 //ここから下6行はいらないかも
yamaguchiatsushi 0:950c605f154f 12 char *bus = "/dev/i2c-1";
yamaguchiatsushi 0:950c605f154f 13 if((file = open(bus, O_RDWR)) < 0)
yamaguchiatsushi 0:950c605f154f 14 {
yamaguchiatsushi 0:950c605f154f 15 printf("Failed to open the bus. \n");
yamaguchiatsushi 0:950c605f154f 16 exit(1);
yamaguchiatsushi 0:950c605f154f 17 }
yamaguchiatsushi 1:04b7521f737d 18
yamaguchiatsushi 0:950c605f154f 19 // Get I2C device, L3GD20 I2C address is 0x6A(106)
yamaguchiatsushi 0:950c605f154f 20 // ioctl(file, I2C_SLAVE, 0x6A);
yamaguchiatsushi 1:04b7521f737d 21 slave.address(0x6A); //1101010のことやと思うからSA0をGNDにつなげばいいと思う
yamaguchiatsushi 0:950c605f154f 22 int i = slave.receive();
yamaguchiatsushi 1:04b7521f737d 23 */
yamaguchiatsushi 1:04b7521f737d 24 const int addr = 0x6A;
yamaguchiatsushi 0:950c605f154f 25 // Enable X, Y, Z-Axis and disable Power down mode(0x0F)
yamaguchiatsushi 0:950c605f154f 26 char config[2] = {0};
yamaguchiatsushi 0:950c605f154f 27 config[0] = 0x20;
yamaguchiatsushi 0:950c605f154f 28 config[1] = 0x0F;
yamaguchiatsushi 1:04b7521f737d 29 i2c.write(addr, config, 2);
yamaguchiatsushi 0:950c605f154f 30 // Full scale range, 2000 dps(0x30)
yamaguchiatsushi 0:950c605f154f 31 config[0] = 0x23;
yamaguchiatsushi 0:950c605f154f 32 config[1] = 0x30;
yamaguchiatsushi 1:04b7521f737d 33 i2c.write(addr, config, 2);
yamaguchiatsushi 0:950c605f154f 34 wait(1);
yamaguchiatsushi 0:950c605f154f 35
yamaguchiatsushi 0:950c605f154f 36 // Read 6 bytes of data
yamaguchiatsushi 0:950c605f154f 37 // lsb first
yamaguchiatsushi 0:950c605f154f 38 // Read xGyro lsb data from register(0x28)
yamaguchiatsushi 0:950c605f154f 39 char reg[1] = {0x28};
yamaguchiatsushi 1:04b7521f737d 40 i2c.write(addr, reg, 1);
yamaguchiatsushi 0:950c605f154f 41 char data[1] = {0};
yamaguchiatsushi 1:04b7521f737d 42 if(i2c.read(addr, data, 1) != 1)
yamaguchiatsushi 0:950c605f154f 43 {
yamaguchiatsushi 0:950c605f154f 44 printf("Error : Input/Output Error \n");
yamaguchiatsushi 0:950c605f154f 45 exit(1);
yamaguchiatsushi 0:950c605f154f 46 }
yamaguchiatsushi 0:950c605f154f 47 char data_0 = data[0];
yamaguchiatsushi 0:950c605f154f 48
yamaguchiatsushi 0:950c605f154f 49 // Read xGyro msb data from register(0x29)
yamaguchiatsushi 0:950c605f154f 50 reg[0] = 0x29;
yamaguchiatsushi 1:04b7521f737d 51 i2c.write(addr, reg, 1);
yamaguchiatsushi 1:04b7521f737d 52 i2c.read(addr, data, 1);
yamaguchiatsushi 0:950c605f154f 53 char data_1 = data[0];
yamaguchiatsushi 0:950c605f154f 54
yamaguchiatsushi 0:950c605f154f 55 // Read yGyro lsb data from register(0x2A)
yamaguchiatsushi 0:950c605f154f 56 reg[0] = 0x2A;
yamaguchiatsushi 1:04b7521f737d 57 i2c.write(addr, reg, 1);
yamaguchiatsushi 1:04b7521f737d 58 i2c.read(addr, data, 1);
yamaguchiatsushi 0:950c605f154f 59 char data_2 = data[0];
yamaguchiatsushi 0:950c605f154f 60
yamaguchiatsushi 0:950c605f154f 61 // Read yGyro msb data from register(0x2B)
yamaguchiatsushi 0:950c605f154f 62 reg[0] = 0x2B;
yamaguchiatsushi 1:04b7521f737d 63 i2c.write(addr, reg, 1);
yamaguchiatsushi 1:04b7521f737d 64 i2c.read(addr, data, 1);
yamaguchiatsushi 0:950c605f154f 65 char data_3 = data[0];
yamaguchiatsushi 0:950c605f154f 66
yamaguchiatsushi 0:950c605f154f 67 // Read zGyro lsb data from register(0x2C)
yamaguchiatsushi 0:950c605f154f 68 reg[0] = 0x2C;
yamaguchiatsushi 1:04b7521f737d 69 i2c.write(addr, reg, 1);
yamaguchiatsushi 1:04b7521f737d 70 i2c.read(addr, data, 1);
yamaguchiatsushi 0:950c605f154f 71 char data_4 = data[0];
yamaguchiatsushi 0:950c605f154f 72
yamaguchiatsushi 0:950c605f154f 73 // Read zGyro msb data from register(0x2D)
yamaguchiatsushi 0:950c605f154f 74 reg[0] = 0x2D;
yamaguchiatsushi 1:04b7521f737d 75 i2c.write(addr, reg, 1);
yamaguchiatsushi 1:04b7521f737d 76 i2c.read(addr, data, 1);
yamaguchiatsushi 0:950c605f154f 77 char data_5 = data[0];
yamaguchiatsushi 0:950c605f154f 78
yamaguchiatsushi 0:950c605f154f 79 // Convert the data
yamaguchiatsushi 0:950c605f154f 80 int xGyro = (data_1 * 256 + data_0);
yamaguchiatsushi 0:950c605f154f 81 if(xGyro > 32767)
yamaguchiatsushi 0:950c605f154f 82 {
yamaguchiatsushi 0:950c605f154f 83 xGyro -= 65536;
yamaguchiatsushi 0:950c605f154f 84 }
yamaguchiatsushi 0:950c605f154f 85
yamaguchiatsushi 0:950c605f154f 86 int yGyro = (data_3 * 256 + data_2);
yamaguchiatsushi 0:950c605f154f 87 if(yGyro > 32767)
yamaguchiatsushi 0:950c605f154f 88 {
yamaguchiatsushi 0:950c605f154f 89 yGyro -= 65536;
yamaguchiatsushi 0:950c605f154f 90 }
yamaguchiatsushi 0:950c605f154f 91
yamaguchiatsushi 0:950c605f154f 92 int zGyro = (data_5 * 256 + data_4);
yamaguchiatsushi 0:950c605f154f 93 if(zGyro > 32767)
yamaguchiatsushi 0:950c605f154f 94 {
yamaguchiatsushi 0:950c605f154f 95 zGyro -= 65536;
yamaguchiatsushi 0:950c605f154f 96 }
yamaguchiatsushi 0:950c605f154f 97
yamaguchiatsushi 0:950c605f154f 98 // Output data to screen
yamaguchiatsushi 1:04b7521f737d 99 while(1){
yamaguchiatsushi 0:950c605f154f 100 printf("Rotation in X-Axis : %d \n", xGyro);
yamaguchiatsushi 0:950c605f154f 101 printf("Rotation in Y-Axis : %d \n", yGyro);
yamaguchiatsushi 0:950c605f154f 102 printf("Rotation in Z-Axis : %d \n", zGyro);
yamaguchiatsushi 1:04b7521f737d 103 wait(0.5);
yamaguchiatsushi 1:04b7521f737d 104 }
yamaguchiatsushi 1:04b7521f737d 105
yamaguchiatsushi 0:950c605f154f 106 }