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@0:950c605f154f, 2021-12-02 (annotated)
- Committer:
- yamaguchiatsushi
- Date:
- Thu Dec 02 01:55:51 2021 +0000
- Revision:
- 0:950c605f154f
- Child:
- 1:04b7521f737d
update for mbed
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 | 0:950c605f154f | 3 | I2CSlave slave(D9, D10); |
| yamaguchiatsushi | 0:950c605f154f | 4 | |
| yamaguchiatsushi | 0:950c605f154f | 5 | void main() |
| yamaguchiatsushi | 0:950c605f154f | 6 | { |
| yamaguchiatsushi | 0:950c605f154f | 7 | // Create I2C bus |
| yamaguchiatsushi | 0:950c605f154f | 8 | int file; |
| yamaguchiatsushi | 0:950c605f154f | 9 | char *bus = "/dev/i2c-1"; |
| yamaguchiatsushi | 0:950c605f154f | 10 | if((file = open(bus, O_RDWR)) < 0) |
| yamaguchiatsushi | 0:950c605f154f | 11 | { |
| yamaguchiatsushi | 0:950c605f154f | 12 | printf("Failed to open the bus. \n"); |
| yamaguchiatsushi | 0:950c605f154f | 13 | exit(1); |
| yamaguchiatsushi | 0:950c605f154f | 14 | } |
| yamaguchiatsushi | 0:950c605f154f | 15 | // Get I2C device, L3GD20 I2C address is 0x6A(106) |
| yamaguchiatsushi | 0:950c605f154f | 16 | // ioctl(file, I2C_SLAVE, 0x6A); |
| yamaguchiatsushi | 0:950c605f154f | 17 | slave.address(0x6A); |
| yamaguchiatsushi | 0:950c605f154f | 18 | int i = slave.receive(); |
| yamaguchiatsushi | 0:950c605f154f | 19 | |
| yamaguchiatsushi | 0:950c605f154f | 20 | // Enable X, Y, Z-Axis and disable Power down mode(0x0F) |
| yamaguchiatsushi | 0:950c605f154f | 21 | char config[2] = {0}; |
| yamaguchiatsushi | 0:950c605f154f | 22 | config[0] = 0x20; |
| yamaguchiatsushi | 0:950c605f154f | 23 | config[1] = 0x0F; |
| yamaguchiatsushi | 0:950c605f154f | 24 | write(file, config, 2); |
| yamaguchiatsushi | 0:950c605f154f | 25 | // Full scale range, 2000 dps(0x30) |
| yamaguchiatsushi | 0:950c605f154f | 26 | config[0] = 0x23; |
| yamaguchiatsushi | 0:950c605f154f | 27 | config[1] = 0x30; |
| yamaguchiatsushi | 0:950c605f154f | 28 | write(file, config, 2); |
| yamaguchiatsushi | 0:950c605f154f | 29 | wait(1); |
| yamaguchiatsushi | 0:950c605f154f | 30 | |
| yamaguchiatsushi | 0:950c605f154f | 31 | // Read 6 bytes of data |
| yamaguchiatsushi | 0:950c605f154f | 32 | // lsb first |
| yamaguchiatsushi | 0:950c605f154f | 33 | // Read xGyro lsb data from register(0x28) |
| yamaguchiatsushi | 0:950c605f154f | 34 | char reg[1] = {0x28}; |
| yamaguchiatsushi | 0:950c605f154f | 35 | write(file, reg, 1); |
| yamaguchiatsushi | 0:950c605f154f | 36 | char data[1] = {0}; |
| yamaguchiatsushi | 0:950c605f154f | 37 | if(read(file, data, 1) != 1) |
| yamaguchiatsushi | 0:950c605f154f | 38 | { |
| yamaguchiatsushi | 0:950c605f154f | 39 | printf("Error : Input/Output Error \n"); |
| yamaguchiatsushi | 0:950c605f154f | 40 | exit(1); |
| yamaguchiatsushi | 0:950c605f154f | 41 | } |
| yamaguchiatsushi | 0:950c605f154f | 42 | char data_0 = data[0]; |
| yamaguchiatsushi | 0:950c605f154f | 43 | |
| yamaguchiatsushi | 0:950c605f154f | 44 | // Read xGyro msb data from register(0x29) |
| yamaguchiatsushi | 0:950c605f154f | 45 | reg[0] = 0x29; |
| yamaguchiatsushi | 0:950c605f154f | 46 | write(file, reg, 1); |
| yamaguchiatsushi | 0:950c605f154f | 47 | read(file, data, 1); |
| yamaguchiatsushi | 0:950c605f154f | 48 | char data_1 = data[0]; |
| yamaguchiatsushi | 0:950c605f154f | 49 | |
| yamaguchiatsushi | 0:950c605f154f | 50 | // Read yGyro lsb data from register(0x2A) |
| yamaguchiatsushi | 0:950c605f154f | 51 | reg[0] = 0x2A; |
| yamaguchiatsushi | 0:950c605f154f | 52 | write(file, reg, 1); |
| yamaguchiatsushi | 0:950c605f154f | 53 | read(file, data, 1); |
| yamaguchiatsushi | 0:950c605f154f | 54 | char data_2 = data[0]; |
| yamaguchiatsushi | 0:950c605f154f | 55 | |
| yamaguchiatsushi | 0:950c605f154f | 56 | // Read yGyro msb data from register(0x2B) |
| yamaguchiatsushi | 0:950c605f154f | 57 | reg[0] = 0x2B; |
| yamaguchiatsushi | 0:950c605f154f | 58 | write(file, reg, 1); |
| yamaguchiatsushi | 0:950c605f154f | 59 | read(file, data, 1); |
| yamaguchiatsushi | 0:950c605f154f | 60 | char data_3 = data[0]; |
| yamaguchiatsushi | 0:950c605f154f | 61 | |
| yamaguchiatsushi | 0:950c605f154f | 62 | // Read zGyro lsb data from register(0x2C) |
| yamaguchiatsushi | 0:950c605f154f | 63 | reg[0] = 0x2C; |
| yamaguchiatsushi | 0:950c605f154f | 64 | write(file, reg, 1); |
| yamaguchiatsushi | 0:950c605f154f | 65 | read(file, data, 1); |
| yamaguchiatsushi | 0:950c605f154f | 66 | char data_4 = data[0]; |
| yamaguchiatsushi | 0:950c605f154f | 67 | |
| yamaguchiatsushi | 0:950c605f154f | 68 | // Read zGyro msb data from register(0x2D) |
| yamaguchiatsushi | 0:950c605f154f | 69 | reg[0] = 0x2D; |
| yamaguchiatsushi | 0:950c605f154f | 70 | write(file, reg, 1); |
| yamaguchiatsushi | 0:950c605f154f | 71 | read(file, data, 1); |
| yamaguchiatsushi | 0:950c605f154f | 72 | char data_5 = data[0]; |
| yamaguchiatsushi | 0:950c605f154f | 73 | |
| yamaguchiatsushi | 0:950c605f154f | 74 | // Convert the data |
| yamaguchiatsushi | 0:950c605f154f | 75 | int xGyro = (data_1 * 256 + data_0); |
| yamaguchiatsushi | 0:950c605f154f | 76 | if(xGyro > 32767) |
| yamaguchiatsushi | 0:950c605f154f | 77 | { |
| yamaguchiatsushi | 0:950c605f154f | 78 | xGyro -= 65536; |
| yamaguchiatsushi | 0:950c605f154f | 79 | } |
| yamaguchiatsushi | 0:950c605f154f | 80 | |
| yamaguchiatsushi | 0:950c605f154f | 81 | int yGyro = (data_3 * 256 + data_2); |
| yamaguchiatsushi | 0:950c605f154f | 82 | if(yGyro > 32767) |
| yamaguchiatsushi | 0:950c605f154f | 83 | { |
| yamaguchiatsushi | 0:950c605f154f | 84 | yGyro -= 65536; |
| yamaguchiatsushi | 0:950c605f154f | 85 | } |
| yamaguchiatsushi | 0:950c605f154f | 86 | |
| yamaguchiatsushi | 0:950c605f154f | 87 | int zGyro = (data_5 * 256 + data_4); |
| yamaguchiatsushi | 0:950c605f154f | 88 | if(zGyro > 32767) |
| yamaguchiatsushi | 0:950c605f154f | 89 | { |
| yamaguchiatsushi | 0:950c605f154f | 90 | zGyro -= 65536; |
| yamaguchiatsushi | 0:950c605f154f | 91 | } |
| yamaguchiatsushi | 0:950c605f154f | 92 | |
| yamaguchiatsushi | 0:950c605f154f | 93 | // Output data to screen |
| yamaguchiatsushi | 0:950c605f154f | 94 | printf("Rotation in X-Axis : %d \n", xGyro); |
| yamaguchiatsushi | 0:950c605f154f | 95 | printf("Rotation in Y-Axis : %d \n", yGyro); |
| yamaguchiatsushi | 0:950c605f154f | 96 | printf("Rotation in Z-Axis : %d \n", zGyro); |
| yamaguchiatsushi | 0:950c605f154f | 97 | } |