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@20:03a3357de805, 2015-01-11 (annotated)
- Committer:
- mlimbird
- Date:
- Sun Jan 11 18:07:15 2015 +0000
- Revision:
- 20:03a3357de805
- Parent:
- 19:76632ff3e9fc
- Child:
- 22:dbd5c4af83d6
About to add header files for talking to the 9DOF chip to allow for easy implementation.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mlimbird | 0:80725699690f | 1 | #include "mbed.h" |
mlimbird | 0:80725699690f | 2 | |
mlimbird | 20:03a3357de805 | 3 | //Accelerometer addresses |
mlimbird | 14:762baad15486 | 4 | #define ADXL345_ADDRESS_W (0xA6) |
mlimbird | 14:762baad15486 | 5 | #define ADXL345_ADDRESS_R (0xA7) |
mlimbird | 8:c64f76d4deff | 6 | #define ADXL345_REGISTER_XLSB (0x32) |
mlimbird | 8:c64f76d4deff | 7 | #define ADXL_REGISTER_PWRCTL (0x2D) |
mlimbird | 11:65ae1cf6f7d9 | 8 | #define ADXL_PWRCTL_MEASURE (0x01 << 3) |
mlimbird | 8:c64f76d4deff | 9 | |
mlimbird | 20:03a3357de805 | 10 | //Gyroscope addresses |
mlimbird | 16:1121b66ef27b | 11 | #define ITG3200_ADDRESS_W (0xD0) |
mlimbird | 16:1121b66ef27b | 12 | #define ITG3200_ADDRESS_R (0xD1) |
mlimbird | 8:c64f76d4deff | 13 | #define ITG3200_REGISTER_XMSB (0x1D) |
mlimbird | 8:c64f76d4deff | 14 | #define ITG3200_REGISTER_DLPF_FS (0x16) |
mlimbird | 8:c64f76d4deff | 15 | #define ITG3200_FULLSCALE (0x03 << 3) |
mlimbird | 8:c64f76d4deff | 16 | #define ITG3200_42HZ (0x03) |
mlimbird | 8:c64f76d4deff | 17 | |
mlimbird | 20:03a3357de805 | 18 | //3-Axis Digital Compass IC addresses |
mlimbird | 19:76632ff3e9fc | 19 | #define HMC5883_ADDRESS_W (0x3C) |
mlimbird | 19:76632ff3e9fc | 20 | #define HMC5883_ADDRESS_R (0x3D) |
mlimbird | 19:76632ff3e9fc | 21 | #define HMC5883_REGISTER_XMSB (0x03) |
mlimbird | 19:76632ff3e9fc | 22 | #define HMC5883_REGISTER_MEASMODE (0x02) |
mlimbird | 19:76632ff3e9fc | 23 | #define HMC5883_MEASMODE_CONT (0x00) |
mlimbird | 8:c64f76d4deff | 24 | |
mlimbird | 20:03a3357de805 | 25 | //establish I2C connections |
mlimbird | 11:65ae1cf6f7d9 | 26 | I2C i2c( p9, p10 ); // sda, scl |
mlimbird | 8:c64f76d4deff | 27 | |
mlimbird | 20:03a3357de805 | 28 | //Declare functions |
mlimbird | 11:65ae1cf6f7d9 | 29 | void init_adxl345(); |
mlimbird | 13:83bea035c658 | 30 | void read_adxl345(); |
mlimbird | 16:1121b66ef27b | 31 | void init_itg3200(); |
mlimbird | 16:1121b66ef27b | 32 | void read_itg3200(); |
mlimbird | 19:76632ff3e9fc | 33 | void init_hmc5883(); |
mlimbird | 19:76632ff3e9fc | 34 | void read_hmc5883(); |
mlimbird | 8:c64f76d4deff | 35 | |
mlimbird | 20:03a3357de805 | 36 | //establish serial communications with computer via usb |
mlimbird | 8:c64f76d4deff | 37 | Serial pc(USBTX, USBRX); //tx, rx |
mlimbird | 8:c64f76d4deff | 38 | |
mlimbird | 20:03a3357de805 | 39 | //arrays to store data from 9DOF |
mlimbird | 12:509ed716bd58 | 40 | int accelerometer_data[3]; |
mlimbird | 16:1121b66ef27b | 41 | int gyro_data[3]; |
mlimbird | 19:76632ff3e9fc | 42 | int magnetometer_data[3]; |
mlimbird | 8:c64f76d4deff | 43 | |
mlimbird | 0:80725699690f | 44 | int main() { |
mlimbird | 8:c64f76d4deff | 45 | |
mlimbird | 20:03a3357de805 | 46 | //initialize each IC |
mlimbird | 20:03a3357de805 | 47 | //init_adxl345(); |
mlimbird | 16:1121b66ef27b | 48 | init_itg3200(); |
mlimbird | 20:03a3357de805 | 49 | //init_hmc5883(); |
mlimbird | 9:331dbf3b341d | 50 | |
mlimbird | 12:509ed716bd58 | 51 | while(1) { |
mlimbird | 20:03a3357de805 | 52 | //read from each IC |
mlimbird | 16:1121b66ef27b | 53 | //read_adxl345(); |
mlimbird | 20:03a3357de805 | 54 | read_itg3200(); |
mlimbird | 20:03a3357de805 | 55 | //read_hmc5883(); |
mlimbird | 0:80725699690f | 56 | } |
mlimbird | 0:80725699690f | 57 | } |
mlimbird | 8:c64f76d4deff | 58 | |
mlimbird | 20:03a3357de805 | 59 | //This function initializes the Digital Accelerometer ADXL345 |
mlimbird | 8:c64f76d4deff | 60 | void init_adxl345() { |
mlimbird | 11:65ae1cf6f7d9 | 61 | char data[2]; |
mlimbird | 11:65ae1cf6f7d9 | 62 | data[0] = ADXL_REGISTER_PWRCTL; |
mlimbird | 11:65ae1cf6f7d9 | 63 | data[1] = ADXL_PWRCTL_MEASURE; |
mlimbird | 8:c64f76d4deff | 64 | |
mlimbird | 14:762baad15486 | 65 | i2c.write(ADXL345_ADDRESS_W, data, 2); // first part of data is the register |
mlimbird | 8:c64f76d4deff | 66 | |
mlimbird | 14:762baad15486 | 67 | i2c.write(ADXL345_ADDRESS_W, data, 1); |
mlimbird | 14:762baad15486 | 68 | i2c.read(ADXL345_ADDRESS_R, data, 2); |
mlimbird | 20:03a3357de805 | 69 | |
mlimbird | 12:509ed716bd58 | 70 | pc.printf("%i\n",(unsigned int)data); |
mlimbird | 8:c64f76d4deff | 71 | } |
mlimbird | 8:c64f76d4deff | 72 | |
mlimbird | 8:c64f76d4deff | 73 | void read_adxl345() { |
mlimbird | 12:509ed716bd58 | 74 | char bytes[6]; |
mlimbird | 8:c64f76d4deff | 75 | memset(bytes,0,6); |
mlimbird | 12:509ed716bd58 | 76 | bytes[0] = ADXL345_REGISTER_XLSB; |
mlimbird | 12:509ed716bd58 | 77 | |
mlimbird | 14:762baad15486 | 78 | i2c.write(ADXL345_ADDRESS_W, bytes, 1); |
mlimbird | 14:762baad15486 | 79 | i2c.read(ADXL345_ADDRESS_R, bytes, 6); |
mlimbird | 8:c64f76d4deff | 80 | |
mlimbird | 8:c64f76d4deff | 81 | for (int i=0;i<3;++i) { |
mlimbird | 8:c64f76d4deff | 82 | accelerometer_data[i] = (int)bytes[2*i] + (((int)bytes[2*i + 1]) << 8); |
mlimbird | 8:c64f76d4deff | 83 | } |
mlimbird | 13:83bea035c658 | 84 | |
mlimbird | 13:83bea035c658 | 85 | pc.printf("ACCEL: %i\t%i\t%i", accelerometer_data[0], accelerometer_data[1], accelerometer_data[2]); |
mlimbird | 8:c64f76d4deff | 86 | } |
mlimbird | 8:c64f76d4deff | 87 | |
mlimbird | 16:1121b66ef27b | 88 | |
mlimbird | 8:c64f76d4deff | 89 | void init_itg3200() { |
mlimbird | 16:1121b66ef27b | 90 | char data[2]; |
mlimbird | 16:1121b66ef27b | 91 | data[0] = ITG3200_REGISTER_DLPF_FS; |
mlimbird | 18:7066655957b3 | 92 | data[1] = ITG3200_FULLSCALE | ITG3200_42HZ; //bitwise or |
mlimbird | 8:c64f76d4deff | 93 | |
mlimbird | 18:7066655957b3 | 94 | pc.printf("Fullscale : %i, 42HZ : %i\n", ITG3200_FULLSCALE, ITG3200_42HZ); |
mlimbird | 18:7066655957b3 | 95 | pc.printf("Bitwise Or : %i\n", (unsigned int)data[1]); |
mlimbird | 18:7066655957b3 | 96 | |
mlimbird | 16:1121b66ef27b | 97 | i2c.write(ITG3200_ADDRESS_W, data,2); |
mlimbird | 20:03a3357de805 | 98 | |
mlimbird | 20:03a3357de805 | 99 | i2c.write(ITG3200_ADDRESS_W, data,1); |
mlimbird | 20:03a3357de805 | 100 | i2c.read(ITG3200_ADDRESS_R, data, 2); |
mlimbird | 8:c64f76d4deff | 101 | |
mlimbird | 16:1121b66ef27b | 102 | pc.printf("%i\n",(unsigned int)data); |
mlimbird | 8:c64f76d4deff | 103 | } |
mlimbird | 8:c64f76d4deff | 104 | |
mlimbird | 8:c64f76d4deff | 105 | void read_itg3200() { |
mlimbird | 16:1121b66ef27b | 106 | char bytes[6]; |
mlimbird | 8:c64f76d4deff | 107 | memset(bytes,0,6); |
mlimbird | 16:1121b66ef27b | 108 | bytes[0] = ITG3200_REGISTER_XMSB; |
mlimbird | 8:c64f76d4deff | 109 | |
mlimbird | 16:1121b66ef27b | 110 | i2c.write(ITG3200_ADDRESS_W, bytes, 1); |
mlimbird | 16:1121b66ef27b | 111 | i2c.read(ITG3200_ADDRESS_R, bytes, 6); |
mlimbird | 16:1121b66ef27b | 112 | |
mlimbird | 8:c64f76d4deff | 113 | for (int i=0;i<3;++i) { |
mlimbird | 8:c64f76d4deff | 114 | gyro_data[i] = (int)bytes[2*i + 1] + (((int)bytes[2*i]) << 8); |
mlimbird | 8:c64f76d4deff | 115 | } |
mlimbird | 16:1121b66ef27b | 116 | |
mlimbird | 16:1121b66ef27b | 117 | pc.printf("GYRO: %i\t%i\t%i", gyro_data[0], gyro_data[1], gyro_data[2]); |
mlimbird | 8:c64f76d4deff | 118 | } |
mlimbird | 19:76632ff3e9fc | 119 | |
mlimbird | 19:76632ff3e9fc | 120 | void init_hmc5883() { |
mlimbird | 19:76632ff3e9fc | 121 | char data[2]; |
mlimbird | 19:76632ff3e9fc | 122 | data[0] = HMC5883_REGISTER_MEASMODE; |
mlimbird | 19:76632ff3e9fc | 123 | data[1] = HMC5883_MEASMODE_CONT; |
mlimbird | 8:c64f76d4deff | 124 | |
mlimbird | 19:76632ff3e9fc | 125 | i2c.write(HMC5883_ADDRESS_W, data, 2); |
mlimbird | 19:76632ff3e9fc | 126 | i2c.read(HMC5883_ADDRESS_R, data, 1); |
mlimbird | 19:76632ff3e9fc | 127 | |
mlimbird | 19:76632ff3e9fc | 128 | pc.printf("%i\n",(unsigned int)data); |
mlimbird | 8:c64f76d4deff | 129 | } |
mlimbird | 8:c64f76d4deff | 130 | |
mlimbird | 19:76632ff3e9fc | 131 | void read_hmc5883() { |
mlimbird | 19:76632ff3e9fc | 132 | char bytes[6]; |
mlimbird | 8:c64f76d4deff | 133 | memset(bytes,0,6); |
mlimbird | 19:76632ff3e9fc | 134 | bytes[0] = HMC5883_REGISTER_XMSB; |
mlimbird | 8:c64f76d4deff | 135 | |
mlimbird | 19:76632ff3e9fc | 136 | i2c.write(HMC5883_ADDRESS_W, bytes, 1); |
mlimbird | 19:76632ff3e9fc | 137 | i2c.read(HMC5883_ADDRESS_R, bytes, 6); |
mlimbird | 8:c64f76d4deff | 138 | |
mlimbird | 8:c64f76d4deff | 139 | for (int i=0;i<3;++i) { |
mlimbird | 8:c64f76d4deff | 140 | magnetometer_data[i] = (int)bytes[2*i + 1] + (((int)bytes[2*i]) << 8); |
mlimbird | 8:c64f76d4deff | 141 | } |
mlimbird | 19:76632ff3e9fc | 142 | |
mlimbird | 19:76632ff3e9fc | 143 | pc.printf("Magnet: %i\t%i\t%i", magnetometer_data[0], magnetometer_data[1], magnetometer_data[2]); |
mlimbird | 19:76632ff3e9fc | 144 | } |