![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Minor fixes
Dependencies: LSM9DS1_Library SDFileSystem mbed nrf51_rtc
Fork of LSM303DLHTest by
main.cpp@8:8f4d7f1c588f, 2016-07-20 (annotated)
- Committer:
- afmiee
- Date:
- Wed Jul 20 21:39:19 2016 +0000
- Revision:
- 8:8f4d7f1c588f
- Parent:
- 7:cbfdcc57f110
- Child:
- 9:61fcd186ac50
Have the interrupot pins INT1 and INT2 working for Data ready on accelerometer and on gyroscope respectively.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
afmiee | 5:b1a689c55f59 | 1 | // Latch Inc. |
afmiee | 5:b1a689c55f59 | 2 | // Antonio F Mondragon |
afmiee | 5:b1a689c55f59 | 3 | // 20160714 |
afmiee | 5:b1a689c55f59 | 4 | // for the Adafruit 9DOF Modulke and the Sparkfun microSD card shield |
tosihisa | 0:750784997b84 | 5 | |
tosihisa | 0:750784997b84 | 6 | #include "mbed.h" |
afmiee | 6:9db9f4bfaf98 | 7 | #include "LSM9DS1.h" |
afmiee | 5:b1a689c55f59 | 8 | #include "SDFileSystem.h" |
afmiee | 5:b1a689c55f59 | 9 | #include "nrf51_rtc.h" |
afmiee | 5:b1a689c55f59 | 10 | |
afmiee | 5:b1a689c55f59 | 11 | #define M_PI 3.14158 |
afmiee | 5:b1a689c55f59 | 12 | |
afmiee | 5:b1a689c55f59 | 13 | // Create objects |
afmiee | 5:b1a689c55f59 | 14 | Serial debug(USBTX,USBRX); |
afmiee | 5:b1a689c55f59 | 15 | // For Nordic |
afmiee | 6:9db9f4bfaf98 | 16 | LSM9DS1 lol(p30, p7, 0xD6, 0x3C); |
afmiee | 7:cbfdcc57f110 | 17 | I2C i2c(p30, p7); |
afmiee | 5:b1a689c55f59 | 18 | // Create the SD filesystem |
afmiee | 5:b1a689c55f59 | 19 | SDFileSystem sd(p25, p28, p29, p20, "sd"); // MOSI, MISO, SCLK, SSEL |
afmiee | 5:b1a689c55f59 | 20 | |
afmiee | 5:b1a689c55f59 | 21 | // Create a ticker to use the nRF51 RTC |
afmiee | 5:b1a689c55f59 | 22 | Ticker flipper; |
afmiee | 5:b1a689c55f59 | 23 | |
afmiee | 5:b1a689c55f59 | 24 | // Assign interrupts to switches |
afmiee | 5:b1a689c55f59 | 25 | InterruptIn btn1(p17); // Start sampling |
afmiee | 5:b1a689c55f59 | 26 | InterruptIn btn2(p18); // Stop sampoling |
afmiee | 5:b1a689c55f59 | 27 | |
afmiee | 5:b1a689c55f59 | 28 | // LED definitions |
afmiee | 5:b1a689c55f59 | 29 | DigitalOut led1(LED1); |
afmiee | 5:b1a689c55f59 | 30 | DigitalOut led2(LED2); |
afmiee | 5:b1a689c55f59 | 31 | |
afmiee | 5:b1a689c55f59 | 32 | // Global variables |
afmiee | 5:b1a689c55f59 | 33 | int start = 0; |
afmiee | 5:b1a689c55f59 | 34 | int stop = 0; |
afmiee | 5:b1a689c55f59 | 35 | |
tosihisa | 0:750784997b84 | 36 | |
afmiee | 5:b1a689c55f59 | 37 | // Generated when button 1 is pressed on rising edge START |
afmiee | 5:b1a689c55f59 | 38 | void start_smpl() |
afmiee | 5:b1a689c55f59 | 39 | { |
afmiee | 5:b1a689c55f59 | 40 | start = 1; |
afmiee | 5:b1a689c55f59 | 41 | stop = 0; |
afmiee | 5:b1a689c55f59 | 42 | } |
afmiee | 5:b1a689c55f59 | 43 | |
afmiee | 5:b1a689c55f59 | 44 | // Generated when button 1 is pressed on rising edge STOP |
afmiee | 5:b1a689c55f59 | 45 | void stop_smpl() |
afmiee | 5:b1a689c55f59 | 46 | { |
afmiee | 5:b1a689c55f59 | 47 | stop = 1; |
afmiee | 5:b1a689c55f59 | 48 | start = 0; |
afmiee | 5:b1a689c55f59 | 49 | } |
afmiee | 5:b1a689c55f59 | 50 | |
afmiee | 7:cbfdcc57f110 | 51 | void parp( int times ) |
afmiee | 7:cbfdcc57f110 | 52 | { |
afmiee | 7:cbfdcc57f110 | 53 | int i; |
afmiee | 7:cbfdcc57f110 | 54 | for( i = 0; i < times; i++) { |
afmiee | 7:cbfdcc57f110 | 55 | led1 = 0; |
afmiee | 7:cbfdcc57f110 | 56 | wait( 0.05); |
afmiee | 7:cbfdcc57f110 | 57 | led1 = 1; |
afmiee | 7:cbfdcc57f110 | 58 | wait( 0.05); |
afmiee | 7:cbfdcc57f110 | 59 | } |
afmiee | 7:cbfdcc57f110 | 60 | led2 = 1; |
afmiee | 7:cbfdcc57f110 | 61 | } |
afmiee | 7:cbfdcc57f110 | 62 | // Flipped every second |
afmiee | 5:b1a689c55f59 | 63 | void flip() |
afmiee | 5:b1a689c55f59 | 64 | { |
afmiee | 7:cbfdcc57f110 | 65 | led2 = 0; |
afmiee | 7:cbfdcc57f110 | 66 | wait(0.01); |
afmiee | 7:cbfdcc57f110 | 67 | led2 = 1; |
afmiee | 7:cbfdcc57f110 | 68 | } |
afmiee | 7:cbfdcc57f110 | 69 | |
afmiee | 7:cbfdcc57f110 | 70 | |
afmiee | 7:cbfdcc57f110 | 71 | uint8_t I2CreadByte(uint8_t address, uint8_t subAddress) |
afmiee | 7:cbfdcc57f110 | 72 | { |
afmiee | 7:cbfdcc57f110 | 73 | char data; |
afmiee | 7:cbfdcc57f110 | 74 | char temp= subAddress; |
afmiee | 7:cbfdcc57f110 | 75 | |
afmiee | 7:cbfdcc57f110 | 76 | i2c.write(address, &temp, 1); |
afmiee | 7:cbfdcc57f110 | 77 | int a = i2c.read(address, &data, 1); |
afmiee | 7:cbfdcc57f110 | 78 | return data; |
afmiee | 5:b1a689c55f59 | 79 | } |
afmiee | 5:b1a689c55f59 | 80 | |
afmiee | 8:8f4d7f1c588f | 81 | uint8_t I2CreadBytes(uint8_t address, uint8_t subAddress, uint8_t * dest, uint8_t count) |
afmiee | 8:8f4d7f1c588f | 82 | { |
afmiee | 8:8f4d7f1c588f | 83 | int i; |
afmiee | 8:8f4d7f1c588f | 84 | char temp_dest[count]; |
afmiee | 8:8f4d7f1c588f | 85 | char temp = subAddress; |
afmiee | 8:8f4d7f1c588f | 86 | i2c.write(address, &temp, 1); |
afmiee | 8:8f4d7f1c588f | 87 | i2c.read(address, temp_dest, count); |
afmiee | 8:8f4d7f1c588f | 88 | |
afmiee | 8:8f4d7f1c588f | 89 | //i2c doesn't take uint8_ts, but rather chars so do this nasty af conversion |
afmiee | 8:8f4d7f1c588f | 90 | for (i=0; i < count; i++) { |
afmiee | 8:8f4d7f1c588f | 91 | dest[i] = temp_dest[i]; |
afmiee | 8:8f4d7f1c588f | 92 | } |
afmiee | 8:8f4d7f1c588f | 93 | return count; |
afmiee | 8:8f4d7f1c588f | 94 | } |
afmiee | 8:8f4d7f1c588f | 95 | |
afmiee | 8:8f4d7f1c588f | 96 | |
afmiee | 8:8f4d7f1c588f | 97 | |
afmiee | 8:8f4d7f1c588f | 98 | void DumpAccelGyroRegs( void ) |
afmiee | 8:8f4d7f1c588f | 99 | { |
afmiee | 8:8f4d7f1c588f | 100 | char dest[ 0x34 ]; |
afmiee | 8:8f4d7f1c588f | 101 | int i; |
afmiee | 8:8f4d7f1c588f | 102 | |
afmiee | 8:8f4d7f1c588f | 103 | debug.printf("\n\r"); |
afmiee | 8:8f4d7f1c588f | 104 | //2CreadBytes( 0xD6, 0x04, (uint8_t *)dest, 0x34 ); |
afmiee | 8:8f4d7f1c588f | 105 | |
afmiee | 8:8f4d7f1c588f | 106 | |
afmiee | 8:8f4d7f1c588f | 107 | for( i = 0; i < 0x34; i++ ) { |
afmiee | 8:8f4d7f1c588f | 108 | I2CreadByte(0xD6, i + 0x04); |
afmiee | 8:8f4d7f1c588f | 109 | switch( i + 0x04 ) { |
afmiee | 8:8f4d7f1c588f | 110 | case 0x04: |
afmiee | 8:8f4d7f1c588f | 111 | debug.printf("ACT_THS 0x04 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 112 | break; |
afmiee | 8:8f4d7f1c588f | 113 | case 0x05: |
afmiee | 8:8f4d7f1c588f | 114 | debug.printf("ACT_DUR 0x05 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 115 | break; |
afmiee | 8:8f4d7f1c588f | 116 | case 0x06: |
afmiee | 8:8f4d7f1c588f | 117 | debug.printf("INT_GEN_CFG_XL 0x06 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 118 | break; |
afmiee | 8:8f4d7f1c588f | 119 | case 0x07: |
afmiee | 8:8f4d7f1c588f | 120 | debug.printf("INT_GEN_THS_X_XL 0x07 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 121 | break; |
afmiee | 8:8f4d7f1c588f | 122 | case 0x08: |
afmiee | 8:8f4d7f1c588f | 123 | debug.printf("INT_GEN_THS_Y_XL 0x08 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 124 | break; |
afmiee | 8:8f4d7f1c588f | 125 | case 0x09: |
afmiee | 8:8f4d7f1c588f | 126 | debug.printf("INT_GEN_THS_Z_XL 0x09 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 127 | break; |
afmiee | 8:8f4d7f1c588f | 128 | case 0x0A: |
afmiee | 8:8f4d7f1c588f | 129 | debug.printf("INT_GEN_DUR_XL 0x0A %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 130 | break; |
afmiee | 8:8f4d7f1c588f | 131 | case 0x0B: |
afmiee | 8:8f4d7f1c588f | 132 | debug.printf("REFERENCE_G 0x0B %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 133 | break; |
afmiee | 8:8f4d7f1c588f | 134 | case 0x0C: |
afmiee | 8:8f4d7f1c588f | 135 | debug.printf("INT1_CTRL 0x0C %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 136 | break; |
afmiee | 8:8f4d7f1c588f | 137 | case 0x0D: |
afmiee | 8:8f4d7f1c588f | 138 | debug.printf("INT2_CTRL 0x0D %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 139 | break; |
afmiee | 8:8f4d7f1c588f | 140 | case 0x0F: |
afmiee | 8:8f4d7f1c588f | 141 | debug.printf("WHO_AM_I_XG 0x0F %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 142 | break; |
afmiee | 8:8f4d7f1c588f | 143 | case 0x10: |
afmiee | 8:8f4d7f1c588f | 144 | debug.printf("CTRL_REG1_G 0x10 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 145 | break; |
afmiee | 8:8f4d7f1c588f | 146 | case 0x11: |
afmiee | 8:8f4d7f1c588f | 147 | debug.printf("CTRL_REG2_G 0x11 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 148 | break; |
afmiee | 8:8f4d7f1c588f | 149 | case 0x12: |
afmiee | 8:8f4d7f1c588f | 150 | debug.printf("CTRL_REG3_G 0x12 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 151 | break; |
afmiee | 8:8f4d7f1c588f | 152 | case 0x13: |
afmiee | 8:8f4d7f1c588f | 153 | debug.printf("ORIENT_CFG_G 0x13 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 154 | break; |
afmiee | 8:8f4d7f1c588f | 155 | case 0x14: |
afmiee | 8:8f4d7f1c588f | 156 | debug.printf("INT_GEN_SRC_G 0x14 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 157 | break; |
afmiee | 8:8f4d7f1c588f | 158 | case 0x15: |
afmiee | 8:8f4d7f1c588f | 159 | debug.printf("OUT_TEMP_L 0x15 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 160 | break; |
afmiee | 8:8f4d7f1c588f | 161 | case 0x16: |
afmiee | 8:8f4d7f1c588f | 162 | debug.printf("OUT_TEMP_H 0x16 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 163 | break; |
afmiee | 8:8f4d7f1c588f | 164 | case 0x17: |
afmiee | 8:8f4d7f1c588f | 165 | debug.printf("STATUS_REG_0 0x17 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 166 | break; |
afmiee | 8:8f4d7f1c588f | 167 | case 0x18: |
afmiee | 8:8f4d7f1c588f | 168 | debug.printf("OUT_X_L_G 0x18 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 169 | break; |
afmiee | 8:8f4d7f1c588f | 170 | case 0x19: |
afmiee | 8:8f4d7f1c588f | 171 | debug.printf("OUT_X_H_G 0x19 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 172 | break; |
afmiee | 8:8f4d7f1c588f | 173 | case 0x1A: |
afmiee | 8:8f4d7f1c588f | 174 | debug.printf("OUT_Y_L_G 0x1A %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 175 | break; |
afmiee | 8:8f4d7f1c588f | 176 | case 0x1B: |
afmiee | 8:8f4d7f1c588f | 177 | debug.printf("OUT_Y_H_G 0x1B %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 178 | break; |
afmiee | 8:8f4d7f1c588f | 179 | case 0x1C: |
afmiee | 8:8f4d7f1c588f | 180 | debug.printf("OUT_Z_L_G 0x1C %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 181 | break; |
afmiee | 8:8f4d7f1c588f | 182 | case 0x1D: |
afmiee | 8:8f4d7f1c588f | 183 | debug.printf("OUT_Z_H_G 0x1D %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 184 | break; |
afmiee | 8:8f4d7f1c588f | 185 | case 0x1E: |
afmiee | 8:8f4d7f1c588f | 186 | debug.printf("CTRL_REG4 0x1E %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 187 | break; |
afmiee | 8:8f4d7f1c588f | 188 | case 0x1F: |
afmiee | 8:8f4d7f1c588f | 189 | debug.printf("CTRL_REG5_XL 0x1F %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 190 | break; |
afmiee | 8:8f4d7f1c588f | 191 | case 0x20: |
afmiee | 8:8f4d7f1c588f | 192 | debug.printf("CTRL_REG6_XL 0x20 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 193 | break; |
afmiee | 8:8f4d7f1c588f | 194 | case 0x21: |
afmiee | 8:8f4d7f1c588f | 195 | debug.printf("CTRL_REG7_XL 0x21 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 196 | break; |
afmiee | 8:8f4d7f1c588f | 197 | case 0x22: |
afmiee | 8:8f4d7f1c588f | 198 | debug.printf("CTRL_REG8 0x22 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 199 | break; |
afmiee | 8:8f4d7f1c588f | 200 | case 0x23: |
afmiee | 8:8f4d7f1c588f | 201 | debug.printf("CTRL_REG9 0x23 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 202 | break; |
afmiee | 8:8f4d7f1c588f | 203 | case 0x24: |
afmiee | 8:8f4d7f1c588f | 204 | debug.printf("CTRL_REG10 0x24 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 205 | break; |
afmiee | 8:8f4d7f1c588f | 206 | case 0x26: |
afmiee | 8:8f4d7f1c588f | 207 | debug.printf("INT_GEN_SRC_XL 0x26 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 208 | break; |
afmiee | 8:8f4d7f1c588f | 209 | case 0x27: |
afmiee | 8:8f4d7f1c588f | 210 | debug.printf("STATUS_REG_1 0x27 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 211 | break; |
afmiee | 8:8f4d7f1c588f | 212 | case 0x28: |
afmiee | 8:8f4d7f1c588f | 213 | debug.printf("OUT_X_L_XL 0x28 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 214 | break; |
afmiee | 8:8f4d7f1c588f | 215 | case 0x29: |
afmiee | 8:8f4d7f1c588f | 216 | debug.printf("OUT_X_H_XL 0x29 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 217 | break; |
afmiee | 8:8f4d7f1c588f | 218 | case 0x2A: |
afmiee | 8:8f4d7f1c588f | 219 | debug.printf("OUT_Y_L_XL 0x2A %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 220 | break; |
afmiee | 8:8f4d7f1c588f | 221 | case 0x2B: |
afmiee | 8:8f4d7f1c588f | 222 | debug.printf("OUT_Y_H_XL 0x2B %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 223 | break; |
afmiee | 8:8f4d7f1c588f | 224 | case 0x2C: |
afmiee | 8:8f4d7f1c588f | 225 | debug.printf("OUT_Z_L_XL 0x2C %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 226 | break; |
afmiee | 8:8f4d7f1c588f | 227 | case 0x2D: |
afmiee | 8:8f4d7f1c588f | 228 | debug.printf("OUT_Z_H_XL 0x2D %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 229 | break; |
afmiee | 8:8f4d7f1c588f | 230 | case 0x2E: |
afmiee | 8:8f4d7f1c588f | 231 | debug.printf("FIFO_CTRL 0x2E %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 232 | break; |
afmiee | 8:8f4d7f1c588f | 233 | case 0x2F: |
afmiee | 8:8f4d7f1c588f | 234 | debug.printf("FIFO_SRC 0x2F %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 235 | break; |
afmiee | 8:8f4d7f1c588f | 236 | case 0x30: |
afmiee | 8:8f4d7f1c588f | 237 | debug.printf("INT_GEN_CFG_G 0x30 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 238 | break; |
afmiee | 8:8f4d7f1c588f | 239 | case 0x31: |
afmiee | 8:8f4d7f1c588f | 240 | debug.printf("INT_GEN_THS_XH_G 0x31 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 241 | break; |
afmiee | 8:8f4d7f1c588f | 242 | case 0x32: |
afmiee | 8:8f4d7f1c588f | 243 | debug.printf("INT_GEN_THS_XL_G 0x32 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 244 | break; |
afmiee | 8:8f4d7f1c588f | 245 | case 0x33: |
afmiee | 8:8f4d7f1c588f | 246 | debug.printf("INT_GEN_THS_YH_G 0x33 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 247 | break; |
afmiee | 8:8f4d7f1c588f | 248 | case 0x34: |
afmiee | 8:8f4d7f1c588f | 249 | debug.printf("INT_GEN_THS_YL_G 0x34 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 250 | break; |
afmiee | 8:8f4d7f1c588f | 251 | case 0x35: |
afmiee | 8:8f4d7f1c588f | 252 | debug.printf("INT_GEN_THS_ZH_G 0x35 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 253 | break; |
afmiee | 8:8f4d7f1c588f | 254 | case 0x36: |
afmiee | 8:8f4d7f1c588f | 255 | debug.printf("INT_GEN_THS_ZL_G 0x36 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 256 | break; |
afmiee | 8:8f4d7f1c588f | 257 | case 0x37: |
afmiee | 8:8f4d7f1c588f | 258 | debug.printf("INT_GEN_DUR_G 0x37 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 259 | break; |
afmiee | 8:8f4d7f1c588f | 260 | default: |
afmiee | 8:8f4d7f1c588f | 261 | debug.printf("Register Not Valid 0x%02x\n\r"); |
afmiee | 8:8f4d7f1c588f | 262 | break; |
afmiee | 8:8f4d7f1c588f | 263 | } |
afmiee | 8:8f4d7f1c588f | 264 | |
afmiee | 8:8f4d7f1c588f | 265 | } |
afmiee | 8:8f4d7f1c588f | 266 | |
afmiee | 8:8f4d7f1c588f | 267 | |
afmiee | 8:8f4d7f1c588f | 268 | } |
afmiee | 8:8f4d7f1c588f | 269 | |
afmiee | 8:8f4d7f1c588f | 270 | |
afmiee | 5:b1a689c55f59 | 271 | int main() |
afmiee | 5:b1a689c55f59 | 272 | { |
afmiee | 5:b1a689c55f59 | 273 | led1= 1; |
afmiee | 5:b1a689c55f59 | 274 | char filename[256]; |
afmiee | 5:b1a689c55f59 | 275 | char secs_str[256]; |
afmiee | 5:b1a689c55f59 | 276 | |
afmiee | 5:b1a689c55f59 | 277 | struct tm t; |
afmiee | 5:b1a689c55f59 | 278 | time_t seconds; |
tosihisa | 0:750784997b84 | 279 | |
afmiee | 8:8f4d7f1c588f | 280 | FILE *fpA; |
afmiee | 8:8f4d7f1c588f | 281 | FILE *fpG; |
afmiee | 8:8f4d7f1c588f | 282 | FILE *fpM; |
afmiee | 6:9db9f4bfaf98 | 283 | |
afmiee | 5:b1a689c55f59 | 284 | // Attach functions to interrupts |
afmiee | 5:b1a689c55f59 | 285 | btn1.rise(&start_smpl); |
afmiee | 5:b1a689c55f59 | 286 | btn2.rise(&stop_smpl); |
afmiee | 5:b1a689c55f59 | 287 | flipper.attach(&flip, 1.0); // the address of the function to be attached (flip) and the interval (2 seconds) |
afmiee | 6:9db9f4bfaf98 | 288 | |
afmiee | 5:b1a689c55f59 | 289 | // Enable serial port |
afmiee | 5:b1a689c55f59 | 290 | debug.format(8,Serial::None,1); |
afmiee | 5:b1a689c55f59 | 291 | debug.baud(115200); |
afmiee | 5:b1a689c55f59 | 292 | debug.printf("LSM303DLH Test\x0d\x0a"); |
afmiee | 5:b1a689c55f59 | 293 | |
afmiee | 6:9db9f4bfaf98 | 294 | // Initialize 9DOF |
afmiee | 7:cbfdcc57f110 | 295 | //lol.begin(); |
afmiee | 6:9db9f4bfaf98 | 296 | if (!lol.begin()) { |
afmiee | 6:9db9f4bfaf98 | 297 | debug.printf("Failed to communicate with LSM9DS1.\n"); |
afmiee | 6:9db9f4bfaf98 | 298 | } |
afmiee | 6:9db9f4bfaf98 | 299 | lol.calibrate(); |
afmiee | 6:9db9f4bfaf98 | 300 | |
afmiee | 8:8f4d7f1c588f | 301 | lol.configInt(XG_INT1, INT_DRDY_XL, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT1_CTRL (0x0C) + CTRL_REG8 (0x22) |
afmiee | 8:8f4d7f1c588f | 302 | lol.configInt(XG_INT2, INT_DRDY_G, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT2_CTRL (0x0D) + CTRL_REG8 (0x22) |
afmiee | 7:cbfdcc57f110 | 303 | |
afmiee | 7:cbfdcc57f110 | 304 | lol.configAccelInt(YHIE_XL|XHIE_XL, false); // INT_GEN_CFG_XL (06h) |
afmiee | 7:cbfdcc57f110 | 305 | lol.configAccelThs((uint8_t)0x25, X_AXIS, (uint8_t)0x00, false); // INT_GEN_THS_X_XL (07h) |
afmiee | 7:cbfdcc57f110 | 306 | lol.configAccelThs((uint8_t)0x25, Y_AXIS, (uint8_t)0x00, false); // INT_GEN_THS_Y_XL (08h) |
afmiee | 7:cbfdcc57f110 | 307 | lol.configAccelThs((uint8_t)0x25, Z_AXIS, (uint8_t)0x00, false); // INT_GEN_THS_Z_XL (09h) |
afmiee | 7:cbfdcc57f110 | 308 | |
afmiee | 8:8f4d7f1c588f | 309 | lol.configGyroInt(ZHIE_G|YHIE_G|XHIE_G, false, false); // INT_GEN_CFG_G (30h) |
afmiee | 8:8f4d7f1c588f | 310 | lol.configGyroThs((int16_t )0x300, X_AXIS, (uint8_t) 0x02, false); // INT_GEN_THS_X_G (31h - 32h) |
afmiee | 8:8f4d7f1c588f | 311 | lol.configGyroThs((int16_t )0x300, Y_AXIS, (uint8_t) 0x02, false); // INT_GEN_THS_Y_G (33h - 34h) |
afmiee | 8:8f4d7f1c588f | 312 | lol.configGyroThs((int16_t )0x300, Z_AXIS, (uint8_t) 0x02, false); // INT_GEN_THS_Z_G (35h - 36h) |
afmiee | 8:8f4d7f1c588f | 313 | |
afmiee | 8:8f4d7f1c588f | 314 | |
afmiee | 7:cbfdcc57f110 | 315 | debug.printf( "\n\r"); |
afmiee | 7:cbfdcc57f110 | 316 | debug.printf( "GyroIntSrc (14h) %02x\n\r", lol.getGyroIntSrc()); // INT_GEN_SRC_G (14h) |
afmiee | 7:cbfdcc57f110 | 317 | debug.printf( "AccelIntSrc(26h) %02x\n\r", lol.getAccelIntSrc()); // INT_GEN_SRC_XL (26h) |
afmiee | 7:cbfdcc57f110 | 318 | debug.printf( "MagIntSrc (31h) %02x\n\r", lol.getMagIntSrc()); // INT_SRC_M (31h) |
afmiee | 7:cbfdcc57f110 | 319 | debug.printf( "Inactivity (17h) %02x\n\r", lol.getInactivity()); // STATUS_REG (17h) |
afmiee | 7:cbfdcc57f110 | 320 | |
afmiee | 7:cbfdcc57f110 | 321 | debug.printf( "INT1_CTRL (0Ch) %02x\n\r", I2CreadByte(0xD6, 0x0C)); |
afmiee | 8:8f4d7f1c588f | 322 | debug.printf( "INT2_CTRL (0Dh) %02x\n\r", I2CreadByte(0xD6, 0x0D)); |
afmiee | 7:cbfdcc57f110 | 323 | debug.printf( "CTRL_REG8 (22h) %02x\n\r", I2CreadByte(0xD6, 0x22)); |
afmiee | 8:8f4d7f1c588f | 324 | debug.printf( "STATUS_REG (27h) %02x\n\r", I2CreadByte(0xD6, 0x27)); |
afmiee | 7:cbfdcc57f110 | 325 | debug.printf( "\n\r"); |
afmiee | 7:cbfdcc57f110 | 326 | debug.printf( "INT_GEN_CFG_XL (06h) %02x\n\r", I2CreadByte(0xD6, 0x06)); |
afmiee | 7:cbfdcc57f110 | 327 | debug.printf( "INT_GEN_SRC_XL (26h) %02x\n\r", I2CreadByte(0xD6, 0x26)); |
afmiee | 7:cbfdcc57f110 | 328 | debug.printf( "INT_GEN_THS_X_XL (07h) %02x\n\r", I2CreadByte(0xD6, 0x07)); |
afmiee | 7:cbfdcc57f110 | 329 | debug.printf( "INT_GEN_THS_Y_XL (08h) %02x\n\r", I2CreadByte(0xD6, 0x08)); |
afmiee | 7:cbfdcc57f110 | 330 | debug.printf( "INT_GEN_THS_Z_XL (09h) %02x\n\r", I2CreadByte(0xD6, 0x09)); |
afmiee | 7:cbfdcc57f110 | 331 | debug.printf( "INT_GEN_DUR_XL (0ah) %02x\n\r", I2CreadByte(0xD6, 0x0a)); |
afmiee | 7:cbfdcc57f110 | 332 | debug.printf( "\n\r"); |
afmiee | 7:cbfdcc57f110 | 333 | debug.printf( "INT_GEN_CFG_G (30h) %02x\n\r", I2CreadByte(0xD6, 0x30)); |
afmiee | 7:cbfdcc57f110 | 334 | debug.printf( "INT_GEN_SRC_G (14h) %02x\n\r", I2CreadByte(0xD6, 0x14)); |
afmiee | 7:cbfdcc57f110 | 335 | debug.printf( "INT_GEN_THS_XH_G (31h) %02x\n\r", I2CreadByte(0xD6, 0x31)); |
afmiee | 7:cbfdcc57f110 | 336 | debug.printf( "INT_GEN_THS_XL_G (32h) %02x\n\r", I2CreadByte(0xD6, 0x32)); |
afmiee | 7:cbfdcc57f110 | 337 | debug.printf( "INT_GEN_THS_YH_G (33h) %02x\n\r", I2CreadByte(0xD6, 0x33)); |
afmiee | 7:cbfdcc57f110 | 338 | debug.printf( "INT_GEN_THS_YL_G (34h) %02x\n\r", I2CreadByte(0xD6, 0x34)); |
afmiee | 7:cbfdcc57f110 | 339 | debug.printf( "INT_GEN_THS_ZH_G (35h) %02x\n\r", I2CreadByte(0xD6, 0x35)); |
afmiee | 7:cbfdcc57f110 | 340 | debug.printf( "INT_GEN_THS_ZL_G (36h) %02x\n\r", I2CreadByte(0xD6, 0x36)); |
afmiee | 7:cbfdcc57f110 | 341 | debug.printf( "INT_GEN_DUR_G (37h) %02x\n\r", I2CreadByte(0xD6, 0x37)); |
afmiee | 7:cbfdcc57f110 | 342 | |
afmiee | 8:8f4d7f1c588f | 343 | // Dump all registers |
afmiee | 8:8f4d7f1c588f | 344 | DumpAccelGyroRegs(); |
afmiee | 6:9db9f4bfaf98 | 345 | // // Initialize current time if needed |
afmiee | 5:b1a689c55f59 | 346 | // printf("Enter current date and time:\n"); |
afmiee | 5:b1a689c55f59 | 347 | // printf("YYYY MM DD HH MM SS[enter]\n"); |
afmiee | 5:b1a689c55f59 | 348 | // scanf("%d %d %d %d %d %d", &t.tm_year, &t.tm_mon, &t.tm_mday |
afmiee | 5:b1a689c55f59 | 349 | // , &t.tm_hour, &t.tm_min, &t.tm_sec); |
afmiee | 5:b1a689c55f59 | 350 | |
afmiee | 5:b1a689c55f59 | 351 | // adjust for tm structure required values |
afmiee | 5:b1a689c55f59 | 352 | t.tm_year = t.tm_year - 1900; |
afmiee | 5:b1a689c55f59 | 353 | t.tm_mon = t.tm_mon - 1; |
afmiee | 5:b1a689c55f59 | 354 | |
afmiee | 5:b1a689c55f59 | 355 | // set the time |
afmiee | 5:b1a689c55f59 | 356 | rtc.set_time(mktime(&t)); |
afmiee | 5:b1a689c55f59 | 357 | |
afmiee | 5:b1a689c55f59 | 358 | while(1) { |
afmiee | 5:b1a689c55f59 | 359 | debug.printf("Press Button 1 to Start sampling\n\r"); |
afmiee | 5:b1a689c55f59 | 360 | debug.printf("Press Button 2 to Stop sampling\n\r"); |
afmiee | 5:b1a689c55f59 | 361 | // Check for button 1 pressed |
afmiee | 5:b1a689c55f59 | 362 | while(!start) { |
afmiee | 5:b1a689c55f59 | 363 | led1 = 1; |
afmiee | 5:b1a689c55f59 | 364 | } |
afmiee | 5:b1a689c55f59 | 365 | // Start sampling |
afmiee | 7:cbfdcc57f110 | 366 | //led1 = 0; |
afmiee | 7:cbfdcc57f110 | 367 | parp(5); |
afmiee | 5:b1a689c55f59 | 368 | debug.printf("Started sampling\n\r"); |
afmiee | 5:b1a689c55f59 | 369 | // Get the time and create a file with the number of seconds in hex appended |
afmiee | 6:9db9f4bfaf98 | 370 | seconds = rtc.time(); |
afmiee | 5:b1a689c55f59 | 371 | sprintf(secs_str, "%s", ctime(&seconds)); |
afmiee | 5:b1a689c55f59 | 372 | printf("Started at: %s\n\r", secs_str ); |
afmiee | 8:8f4d7f1c588f | 373 | sprintf(filename, "/sd/latch9DOFA_%08x.csv",seconds); |
afmiee | 8:8f4d7f1c588f | 374 | fpA = fopen(filename, "w"); |
afmiee | 5:b1a689c55f59 | 375 | // Verify that file can be created |
afmiee | 8:8f4d7f1c588f | 376 | if ( fpA == NULL ) { |
afmiee | 8:8f4d7f1c588f | 377 | debug.printf("Cannot create file %s\n\r", filename); |
afmiee | 8:8f4d7f1c588f | 378 | wait(0.5); |
afmiee | 8:8f4d7f1c588f | 379 | while(1) { |
afmiee | 8:8f4d7f1c588f | 380 | led1 = !led1; |
afmiee | 8:8f4d7f1c588f | 381 | wait(0.5); |
afmiee | 8:8f4d7f1c588f | 382 | } |
afmiee | 8:8f4d7f1c588f | 383 | } else |
afmiee | 8:8f4d7f1c588f | 384 | debug.printf("File %s created successfully\n\r", filename); |
afmiee | 8:8f4d7f1c588f | 385 | |
afmiee | 8:8f4d7f1c588f | 386 | sprintf(filename, "/sd/latch9DOFG_%08x.csv",seconds); |
afmiee | 8:8f4d7f1c588f | 387 | fpG = fopen(filename, "w"); |
afmiee | 8:8f4d7f1c588f | 388 | // Verify that file can be created |
afmiee | 8:8f4d7f1c588f | 389 | if ( fpG == NULL ) { |
afmiee | 8:8f4d7f1c588f | 390 | debug.printf("Cannot create file %s\n\r", filename); |
afmiee | 8:8f4d7f1c588f | 391 | wait(0.5); |
afmiee | 8:8f4d7f1c588f | 392 | while(1) { |
afmiee | 8:8f4d7f1c588f | 393 | led1 = !led1; |
afmiee | 8:8f4d7f1c588f | 394 | wait(0.5); |
afmiee | 8:8f4d7f1c588f | 395 | } |
afmiee | 8:8f4d7f1c588f | 396 | } else |
afmiee | 8:8f4d7f1c588f | 397 | debug.printf("File %s created successfully\n\r", filename); |
afmiee | 8:8f4d7f1c588f | 398 | |
afmiee | 8:8f4d7f1c588f | 399 | sprintf(filename, "/sd/latch9DOFM_%08x.csv",seconds); |
afmiee | 8:8f4d7f1c588f | 400 | fpM = fopen(filename, "w"); |
afmiee | 8:8f4d7f1c588f | 401 | // Verify that file can be created |
afmiee | 8:8f4d7f1c588f | 402 | if ( fpM == NULL ) { |
afmiee | 5:b1a689c55f59 | 403 | debug.printf("Cannot create file %s\n\r", filename); |
afmiee | 5:b1a689c55f59 | 404 | wait(0.5); |
afmiee | 5:b1a689c55f59 | 405 | while(1) { |
afmiee | 5:b1a689c55f59 | 406 | led1 = !led1; |
afmiee | 5:b1a689c55f59 | 407 | wait(0.5); |
afmiee | 5:b1a689c55f59 | 408 | } |
afmiee | 5:b1a689c55f59 | 409 | } else |
afmiee | 5:b1a689c55f59 | 410 | debug.printf("File %s created successfully\n\r", filename); |
afmiee | 6:9db9f4bfaf98 | 411 | |
afmiee | 6:9db9f4bfaf98 | 412 | // Sample until button 2 is pressed |
afmiee | 5:b1a689c55f59 | 413 | while(!stop) { |
afmiee | 7:cbfdcc57f110 | 414 | //led1 = 0; |
afmiee | 8:8f4d7f1c588f | 415 | //lol.getAccelIntSrc(); // INT_GEN_SRC_XL (26h) |
afmiee | 8:8f4d7f1c588f | 416 | //I2CreadByte(0xD6, 0x27); |
afmiee | 8:8f4d7f1c588f | 417 | if (lol.accelAvailable()) { |
afmiee | 8:8f4d7f1c588f | 418 | lol.readAccel(); |
afmiee | 8:8f4d7f1c588f | 419 | debug.printf("ACC %d, %d, %d\n\r", lol.ax, lol.ay, lol.az); |
afmiee | 8:8f4d7f1c588f | 420 | fprintf(fpA, "%d, %d, %d\n\r", lol.ax, lol.ay, lol.az); |
afmiee | 8:8f4d7f1c588f | 421 | } |
afmiee | 8:8f4d7f1c588f | 422 | //lol.getMagIntSrc(); // INT_SRC_M (31h) |
afmiee | 8:8f4d7f1c588f | 423 | //I2CreadByte(0xD6, 0x27); |
afmiee | 8:8f4d7f1c588f | 424 | if ( lol.magAvailable(X_AXIS) && lol.magAvailable(X_AXIS) && lol.magAvailable(X_AXIS)) { |
afmiee | 8:8f4d7f1c588f | 425 | lol.readMag(); |
afmiee | 8:8f4d7f1c588f | 426 | debug.printf("MAG %d, %d, %d\n\r", lol.mx, lol.my, lol.mz); |
afmiee | 8:8f4d7f1c588f | 427 | fprintf(fpM, "%d, %d, %d\n\r", lol.mx, lol.my, lol.mz); |
afmiee | 8:8f4d7f1c588f | 428 | } |
afmiee | 8:8f4d7f1c588f | 429 | //lol.getGyroIntSrc(); // INT_GEN_SRC_G (14h) |
afmiee | 8:8f4d7f1c588f | 430 | if ( lol.gyroAvailable()) { |
afmiee | 8:8f4d7f1c588f | 431 | lol.readGyro(); |
afmiee | 8:8f4d7f1c588f | 432 | debug.printf("GYR %d, %d, %d\n\r", lol.gx, lol.gy, lol.gz); |
afmiee | 8:8f4d7f1c588f | 433 | fprintf(fpG, "%d, %d, %d\n\r", lol.gx, lol.gy, lol.gz); |
afmiee | 8:8f4d7f1c588f | 434 | } |
afmiee | 8:8f4d7f1c588f | 435 | //wait(0.1); |
afmiee | 5:b1a689c55f59 | 436 | } |
afmiee | 5:b1a689c55f59 | 437 | // Stop Sampling and close file |
afmiee | 7:cbfdcc57f110 | 438 | parp(10); |
afmiee | 5:b1a689c55f59 | 439 | led1 = 1; |
afmiee | 5:b1a689c55f59 | 440 | debug.printf("Stopped sampling\n\r"); |
afmiee | 5:b1a689c55f59 | 441 | debug.printf("Results stored in %s\n\r", filename); |
afmiee | 8:8f4d7f1c588f | 442 | fclose(fpA); |
afmiee | 8:8f4d7f1c588f | 443 | fclose(fpM); |
afmiee | 8:8f4d7f1c588f | 444 | fclose(fpG); |
afmiee | 6:9db9f4bfaf98 | 445 | } |
tosihisa | 4:3c677edffb13 | 446 | } |
afmiee | 7:cbfdcc57f110 | 447 | |
afmiee | 7:cbfdcc57f110 | 448 | |
afmiee | 7:cbfdcc57f110 | 449 |