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@16:1121b66ef27b, 2015-01-11 (annotated)
- Committer:
- mlimbird
- Date:
- Sun Jan 11 06:15:22 2015 +0000
- Revision:
- 16:1121b66ef27b
- Parent:
- 14:762baad15486
- Child:
- 18:7066655957b3
Gyroscope now transmits info.
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 | 8:c64f76d4deff | 3 | //Accelerometer |
| 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 | 8:c64f76d4deff | 10 | //Gyroscope |
| 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 | 8:c64f76d4deff | 18 | //3-Axis Digital Compass IC |
| mlimbird | 8:c64f76d4deff | 19 | #define HMC5843_ADDRESS (0x3C >> 1) |
| mlimbird | 8:c64f76d4deff | 20 | #define HMC5843_REGISTER_XMSB (0x03) |
| mlimbird | 8:c64f76d4deff | 21 | #define HMC5843_REGISTER_MEASMODE (0x02) |
| mlimbird | 8:c64f76d4deff | 22 | #define HMC5843_MEASMODE_CONT (0x00) |
| mlimbird | 8:c64f76d4deff | 23 | |
| mlimbird | 11:65ae1cf6f7d9 | 24 | I2C i2c( p9, p10 ); // sda, scl |
| mlimbird | 8:c64f76d4deff | 25 | |
| mlimbird | 11:65ae1cf6f7d9 | 26 | void init_adxl345(); |
| mlimbird | 13:83bea035c658 | 27 | void read_adxl345(); |
| mlimbird | 16:1121b66ef27b | 28 | void init_itg3200(); |
| mlimbird | 16:1121b66ef27b | 29 | void read_itg3200(); |
| mlimbird | 8:c64f76d4deff | 30 | //void init_hmc5843(); |
| mlimbird | 8:c64f76d4deff | 31 | |
| mlimbird | 8:c64f76d4deff | 32 | Serial pc(USBTX, USBRX); //tx, rx |
| mlimbird | 8:c64f76d4deff | 33 | |
| mlimbird | 12:509ed716bd58 | 34 | int accelerometer_data[3]; |
| mlimbird | 16:1121b66ef27b | 35 | int gyro_data[3]; |
| mlimbird | 12:509ed716bd58 | 36 | //int magnetometer_data[3]; |
| mlimbird | 8:c64f76d4deff | 37 | |
| mlimbird | 9:331dbf3b341d | 38 | PwmOut led(LED1); |
| mlimbird | 9:331dbf3b341d | 39 | |
| mlimbird | 9:331dbf3b341d | 40 | float brightness = 0.0; |
| mlimbird | 0:80725699690f | 41 | |
| mlimbird | 0:80725699690f | 42 | int main() { |
| mlimbird | 8:c64f76d4deff | 43 | |
| mlimbird | 11:65ae1cf6f7d9 | 44 | init_adxl345(); |
| mlimbird | 8:c64f76d4deff | 45 | //init_hmc5843(); |
| mlimbird | 16:1121b66ef27b | 46 | init_itg3200(); |
| mlimbird | 7:4377556c2d5b | 47 | |
| mlimbird | 12:509ed716bd58 | 48 | //pc.printf("Press 'u' to turn LED1 brightness up, 'd' to turn it down.\n"); |
| mlimbird | 9:331dbf3b341d | 49 | |
| mlimbird | 12:509ed716bd58 | 50 | while(1) { |
| mlimbird | 12:509ed716bd58 | 51 | /* |
| mlimbird | 9:331dbf3b341d | 52 | char c = pc.getc(); |
| mlimbird | 9:331dbf3b341d | 53 | if((c == 'u') && (brightness < 0.5)) { |
| mlimbird | 9:331dbf3b341d | 54 | brightness += 0.01; |
| mlimbird | 9:331dbf3b341d | 55 | led = brightness; |
| mlimbird | 9:331dbf3b341d | 56 | } |
| mlimbird | 9:331dbf3b341d | 57 | if((c == 'd') && (brightness > 0.0)) { |
| mlimbird | 9:331dbf3b341d | 58 | brightness -= 0.01; |
| mlimbird | 9:331dbf3b341d | 59 | led = brightness; |
| mlimbird | 9:331dbf3b341d | 60 | } |
| mlimbird | 12:509ed716bd58 | 61 | */ |
| mlimbird | 16:1121b66ef27b | 62 | //read_adxl345(); |
| mlimbird | 16:1121b66ef27b | 63 | read_itg3200(); |
| mlimbird | 7:4377556c2d5b | 64 | |
| mlimbird | 0:80725699690f | 65 | } |
| mlimbird | 0:80725699690f | 66 | } |
| mlimbird | 8:c64f76d4deff | 67 | |
| mlimbird | 8:c64f76d4deff | 68 | void init_adxl345() { |
| mlimbird | 11:65ae1cf6f7d9 | 69 | char data[2]; |
| mlimbird | 11:65ae1cf6f7d9 | 70 | data[0] = ADXL_REGISTER_PWRCTL; |
| mlimbird | 11:65ae1cf6f7d9 | 71 | data[1] = ADXL_PWRCTL_MEASURE; |
| mlimbird | 8:c64f76d4deff | 72 | |
| mlimbird | 14:762baad15486 | 73 | i2c.write(ADXL345_ADDRESS_W, data, 2); // first part of data is the register |
| mlimbird | 11:65ae1cf6f7d9 | 74 | |
| mlimbird | 11:65ae1cf6f7d9 | 75 | wait(0.5); |
| mlimbird | 8:c64f76d4deff | 76 | |
| mlimbird | 14:762baad15486 | 77 | i2c.write(ADXL345_ADDRESS_W, data, 1); |
| mlimbird | 14:762baad15486 | 78 | i2c.read(ADXL345_ADDRESS_R, data, 2); |
| mlimbird | 12:509ed716bd58 | 79 | pc.printf("%i\n",(unsigned int)data); |
| mlimbird | 8:c64f76d4deff | 80 | } |
| mlimbird | 8:c64f76d4deff | 81 | |
| mlimbird | 8:c64f76d4deff | 82 | void read_adxl345() { |
| mlimbird | 12:509ed716bd58 | 83 | char bytes[6]; |
| mlimbird | 8:c64f76d4deff | 84 | memset(bytes,0,6); |
| mlimbird | 12:509ed716bd58 | 85 | bytes[0] = ADXL345_REGISTER_XLSB; |
| mlimbird | 12:509ed716bd58 | 86 | |
| mlimbird | 14:762baad15486 | 87 | i2c.write(ADXL345_ADDRESS_W, bytes, 1); |
| mlimbird | 14:762baad15486 | 88 | i2c.read(ADXL345_ADDRESS_R, bytes, 6); |
| mlimbird | 8:c64f76d4deff | 89 | |
| mlimbird | 8:c64f76d4deff | 90 | for (int i=0;i<3;++i) { |
| mlimbird | 8:c64f76d4deff | 91 | accelerometer_data[i] = (int)bytes[2*i] + (((int)bytes[2*i + 1]) << 8); |
| mlimbird | 8:c64f76d4deff | 92 | } |
| mlimbird | 13:83bea035c658 | 93 | |
| mlimbird | 13:83bea035c658 | 94 | pc.printf("ACCEL: %i\t%i\t%i", accelerometer_data[0], accelerometer_data[1], accelerometer_data[2]); |
| mlimbird | 8:c64f76d4deff | 95 | } |
| mlimbird | 8:c64f76d4deff | 96 | |
| mlimbird | 16:1121b66ef27b | 97 | |
| mlimbird | 8:c64f76d4deff | 98 | void init_itg3200() { |
| mlimbird | 16:1121b66ef27b | 99 | char data[2]; |
| mlimbird | 16:1121b66ef27b | 100 | data[0] = ITG3200_REGISTER_DLPF_FS; |
| mlimbird | 16:1121b66ef27b | 101 | data[1] = ITG3200_FULLSCALE | ITG3200_42HZ; |
| mlimbird | 8:c64f76d4deff | 102 | |
| mlimbird | 16:1121b66ef27b | 103 | i2c.write(ITG3200_ADDRESS_W, data,2); |
| mlimbird | 8:c64f76d4deff | 104 | |
| mlimbird | 16:1121b66ef27b | 105 | i2c.read(ITG3200_ADDRESS_R, data, 1); |
| mlimbird | 8:c64f76d4deff | 106 | |
| mlimbird | 16:1121b66ef27b | 107 | pc.printf("%i\n",(unsigned int)data); |
| mlimbird | 8:c64f76d4deff | 108 | } |
| mlimbird | 8:c64f76d4deff | 109 | |
| mlimbird | 8:c64f76d4deff | 110 | void read_itg3200() { |
| mlimbird | 16:1121b66ef27b | 111 | char bytes[6]; |
| mlimbird | 8:c64f76d4deff | 112 | memset(bytes,0,6); |
| mlimbird | 16:1121b66ef27b | 113 | bytes[0] = ITG3200_REGISTER_XMSB; |
| mlimbird | 8:c64f76d4deff | 114 | |
| mlimbird | 16:1121b66ef27b | 115 | i2c.write(ITG3200_ADDRESS_W, bytes, 1); |
| mlimbird | 16:1121b66ef27b | 116 | i2c.read(ITG3200_ADDRESS_R, bytes, 6); |
| mlimbird | 16:1121b66ef27b | 117 | |
| mlimbird | 8:c64f76d4deff | 118 | for (int i=0;i<3;++i) { |
| mlimbird | 8:c64f76d4deff | 119 | gyro_data[i] = (int)bytes[2*i + 1] + (((int)bytes[2*i]) << 8); |
| mlimbird | 8:c64f76d4deff | 120 | } |
| mlimbird | 16:1121b66ef27b | 121 | |
| mlimbird | 16:1121b66ef27b | 122 | pc.printf("GYRO: %i\t%i\t%i", gyro_data[0], gyro_data[1], gyro_data[2]); |
| mlimbird | 8:c64f76d4deff | 123 | } |
| mlimbird | 16:1121b66ef27b | 124 | /* |
| mlimbird | 8:c64f76d4deff | 125 | void init_hmc5843() { |
| mlimbird | 8:c64f76d4deff | 126 | bytes data = 0; |
| mlimbird | 8:c64f76d4deff | 127 | |
| mlimbird | 8:c64f76d4deff | 128 | i2c_write(HMC5843_ADDRESS, HMC5843_REGISTER_MEASMODE, HMC5843_MEASMODE_CONT); |
| mlimbird | 8:c64f76d4deff | 129 | |
| mlimbird | 8:c64f76d4deff | 130 | i2c_read(HMC5843_ADDRESS, HMC5843_REGISTER_MEASMODE, 1, &data); |
| mlimbird | 8:c64f76d4deff | 131 | Serial.println((unsigned int)data); |
| mlimbird | 8:c64f76d4deff | 132 | } |
| mlimbird | 8:c64f76d4deff | 133 | |
| mlimbird | 8:c64f76d4deff | 134 | void read_hmc5843() { |
| mlimbird | 8:c64f76d4deff | 135 | bytes bytes[6]; |
| mlimbird | 8:c64f76d4deff | 136 | memset(bytes,0,6); |
| mlimbird | 8:c64f76d4deff | 137 | |
| mlimbird | 8:c64f76d4deff | 138 | i2c_read(HMC5843_ADDRESS, HMC5843_REGISTER_XMSB, 6, bytes); |
| mlimbird | 8:c64f76d4deff | 139 | |
| mlimbird | 8:c64f76d4deff | 140 | for (int i=0;i<3;++i) { |
| mlimbird | 8:c64f76d4deff | 141 | magnetometer_data[i] = (int)bytes[2*i + 1] + (((int)bytes[2*i]) << 8); |
| mlimbird | 8:c64f76d4deff | 142 | } |
| mlimbird | 8:c64f76d4deff | 143 | } |
| mlimbird | 8:c64f76d4deff | 144 | */ |