Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@1:04b7521f737d, 2021-12-06 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |