Minor fixes
Dependencies: LSM9DS1_Library SDFileSystem mbed nrf51_rtc
Fork of LSM303DLHTest by
main.cpp@10:e7ab0493ed9f, 2016-07-26 (annotated)
- Committer:
- afmiee
- Date:
- Tue Jul 26 21:18:15 2016 +0000
- Revision:
- 10:e7ab0493ed9f
- Parent:
- 9:61fcd186ac50
- Child:
- 11:a246c67d44b0
Works automatically, still needs the thresholds and durations to be tuned. Uses accelerator interrupt on INT1 and inactivity on INT2.
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 | 10:e7ab0493ed9f | 10 | //#include "utilities.h" |
afmiee | 5:b1a689c55f59 | 11 | |
afmiee | 5:b1a689c55f59 | 12 | #define M_PI 3.14158 |
afmiee | 10:e7ab0493ed9f | 13 | #define DEBUG 1 |
afmiee | 10:e7ab0493ed9f | 14 | |
afmiee | 10:e7ab0493ed9f | 15 | // define threshold and Duration registers for interrupts |
afmiee | 10:e7ab0493ed9f | 16 | #define ACT_THS_REG 0x10 // 0x04 |
afmiee | 10:e7ab0493ed9f | 17 | #define ACT_DUR_REG 0x02 // 0x05 |
afmiee | 5:b1a689c55f59 | 18 | |
afmiee | 10:e7ab0493ed9f | 19 | #define INT_GEN_THS_X_XL_REG 0x10 // 0x07 |
afmiee | 10:e7ab0493ed9f | 20 | #define INT_GEN_THS_Y_YL_REG 0xFF // 0x08 |
afmiee | 10:e7ab0493ed9f | 21 | #define INT_GEN_THS_Z_XL_REG 0x10 // 0x09 |
afmiee | 10:e7ab0493ed9f | 22 | #define INT_GEN_DUR_XL_REG 0x00 // 0x0A |
afmiee | 10:e7ab0493ed9f | 23 | |
afmiee | 10:e7ab0493ed9f | 24 | #define INT_GEN_THS_XHL_G_REG 0x0300 // 0x31-32 |
afmiee | 10:e7ab0493ed9f | 25 | #define INT_GEN_THS_YHL_G_REG 0x0300 // 0x33-34 |
afmiee | 10:e7ab0493ed9f | 26 | #define INT_GEN_THS_ZHL_G_REG 0x0300 // 0x35-36 |
afmiee | 10:e7ab0493ed9f | 27 | #define INT_GEN_DUR_G_REG 0x02 // 0x37 |
afmiee | 10:e7ab0493ed9f | 28 | |
afmiee | 10:e7ab0493ed9f | 29 | typedef unsigned long int ulint; |
afmiee | 5:b1a689c55f59 | 30 | // Create objects |
afmiee | 5:b1a689c55f59 | 31 | Serial debug(USBTX,USBRX); |
afmiee | 5:b1a689c55f59 | 32 | // For Nordic |
afmiee | 6:9db9f4bfaf98 | 33 | LSM9DS1 lol(p30, p7, 0xD6, 0x3C); |
afmiee | 7:cbfdcc57f110 | 34 | I2C i2c(p30, p7); |
afmiee | 10:e7ab0493ed9f | 35 | |
afmiee | 5:b1a689c55f59 | 36 | // Create the SD filesystem |
afmiee | 5:b1a689c55f59 | 37 | SDFileSystem sd(p25, p28, p29, p20, "sd"); // MOSI, MISO, SCLK, SSEL |
afmiee | 5:b1a689c55f59 | 38 | |
afmiee | 5:b1a689c55f59 | 39 | // Create a ticker to use the nRF51 RTC |
afmiee | 5:b1a689c55f59 | 40 | Ticker flipper; |
afmiee | 5:b1a689c55f59 | 41 | |
afmiee | 5:b1a689c55f59 | 42 | // Assign interrupts to switches |
afmiee | 9:61fcd186ac50 | 43 | InterruptIn int1(p12); // Start sampling |
afmiee | 9:61fcd186ac50 | 44 | InterruptIn int2(p13); // Stop sampoling |
afmiee | 5:b1a689c55f59 | 45 | |
afmiee | 5:b1a689c55f59 | 46 | // LED definitions |
afmiee | 5:b1a689c55f59 | 47 | DigitalOut led1(LED1); |
afmiee | 5:b1a689c55f59 | 48 | DigitalOut led2(LED2); |
afmiee | 9:61fcd186ac50 | 49 | DigitalOut dbg1(p16); |
afmiee | 9:61fcd186ac50 | 50 | DigitalOut dbg2(p17); |
afmiee | 5:b1a689c55f59 | 51 | |
afmiee | 5:b1a689c55f59 | 52 | // Global variables |
afmiee | 5:b1a689c55f59 | 53 | int start = 0; |
afmiee | 5:b1a689c55f59 | 54 | int stop = 0; |
afmiee | 10:e7ab0493ed9f | 55 | time_t seconds; |
afmiee | 5:b1a689c55f59 | 56 | |
afmiee | 10:e7ab0493ed9f | 57 | FILE *fpA; |
afmiee | 10:e7ab0493ed9f | 58 | FILE *fpG; |
afmiee | 10:e7ab0493ed9f | 59 | FILE *fpM; |
afmiee | 7:cbfdcc57f110 | 60 | |
afmiee | 10:e7ab0493ed9f | 61 | char filename[80]; |
afmiee | 10:e7ab0493ed9f | 62 | char secs_str[80]; |
afmiee | 7:cbfdcc57f110 | 63 | |
afmiee | 7:cbfdcc57f110 | 64 | uint8_t I2CreadByte(uint8_t address, uint8_t subAddress) |
afmiee | 7:cbfdcc57f110 | 65 | { |
afmiee | 7:cbfdcc57f110 | 66 | char data; |
afmiee | 7:cbfdcc57f110 | 67 | char temp= subAddress; |
afmiee | 7:cbfdcc57f110 | 68 | |
afmiee | 7:cbfdcc57f110 | 69 | i2c.write(address, &temp, 1); |
afmiee | 7:cbfdcc57f110 | 70 | int a = i2c.read(address, &data, 1); |
afmiee | 7:cbfdcc57f110 | 71 | return data; |
afmiee | 5:b1a689c55f59 | 72 | } |
afmiee | 5:b1a689c55f59 | 73 | |
afmiee | 8:8f4d7f1c588f | 74 | uint8_t I2CreadBytes(uint8_t address, uint8_t subAddress, uint8_t * dest, uint8_t count) |
afmiee | 8:8f4d7f1c588f | 75 | { |
afmiee | 8:8f4d7f1c588f | 76 | int i; |
afmiee | 8:8f4d7f1c588f | 77 | char temp_dest[count]; |
afmiee | 8:8f4d7f1c588f | 78 | char temp = subAddress; |
afmiee | 8:8f4d7f1c588f | 79 | i2c.write(address, &temp, 1); |
afmiee | 8:8f4d7f1c588f | 80 | i2c.read(address, temp_dest, count); |
afmiee | 8:8f4d7f1c588f | 81 | |
afmiee | 8:8f4d7f1c588f | 82 | //i2c doesn't take uint8_ts, but rather chars so do this nasty af conversion |
afmiee | 8:8f4d7f1c588f | 83 | for (i=0; i < count; i++) { |
afmiee | 8:8f4d7f1c588f | 84 | dest[i] = temp_dest[i]; |
afmiee | 8:8f4d7f1c588f | 85 | } |
afmiee | 8:8f4d7f1c588f | 86 | return count; |
afmiee | 8:8f4d7f1c588f | 87 | } |
afmiee | 10:e7ab0493ed9f | 88 | //*********************************************************** |
afmiee | 10:e7ab0493ed9f | 89 | // file_rename: renames a file (via copy & delete). |
afmiee | 10:e7ab0493ed9f | 90 | // Moves data instead of adjusting the file name in the |
afmiee | 10:e7ab0493ed9f | 91 | // file directory. Checks to insure the file was renamed. |
afmiee | 10:e7ab0493ed9f | 92 | // Returns -1 = error; 0 = success |
afmiee | 10:e7ab0493ed9f | 93 | //*********************************************************** |
afmiee | 10:e7ab0493ed9f | 94 | int file_rename(const char *oldfname, const char *newfname) |
afmiee | 10:e7ab0493ed9f | 95 | { |
afmiee | 10:e7ab0493ed9f | 96 | int retval = 0; |
afmiee | 10:e7ab0493ed9f | 97 | int ch; |
afmiee | 8:8f4d7f1c588f | 98 | |
afmiee | 10:e7ab0493ed9f | 99 | FILE *fpold = fopen(oldfname, "r"); // src file |
afmiee | 10:e7ab0493ed9f | 100 | FILE *fpnew = fopen(newfname, "w"); // dest file |
afmiee | 8:8f4d7f1c588f | 101 | |
afmiee | 10:e7ab0493ed9f | 102 | while (1) { // Copy src to dest |
afmiee | 10:e7ab0493ed9f | 103 | ch = fgetc(fpold); // until src EOF read. |
afmiee | 10:e7ab0493ed9f | 104 | if (ch == EOF) break; |
afmiee | 10:e7ab0493ed9f | 105 | fputc(ch, fpnew); |
afmiee | 10:e7ab0493ed9f | 106 | } |
afmiee | 10:e7ab0493ed9f | 107 | |
afmiee | 10:e7ab0493ed9f | 108 | fclose(fpnew); |
afmiee | 10:e7ab0493ed9f | 109 | fclose(fpold); |
afmiee | 10:e7ab0493ed9f | 110 | |
afmiee | 10:e7ab0493ed9f | 111 | fpnew = fopen(newfname, "r"); // Reopen dest to insure |
afmiee | 10:e7ab0493ed9f | 112 | if(fpnew == NULL) { // that it was created. |
afmiee | 10:e7ab0493ed9f | 113 | retval = (-1); // Return Error. |
afmiee | 10:e7ab0493ed9f | 114 | } else { |
afmiee | 10:e7ab0493ed9f | 115 | fclose(fpnew); |
afmiee | 10:e7ab0493ed9f | 116 | remove(oldfname); // Remove original file. |
afmiee | 10:e7ab0493ed9f | 117 | retval = (0); // Return Success. |
afmiee | 10:e7ab0493ed9f | 118 | } |
afmiee | 10:e7ab0493ed9f | 119 | return (retval); |
afmiee | 10:e7ab0493ed9f | 120 | } |
afmiee | 10:e7ab0493ed9f | 121 | |
afmiee | 10:e7ab0493ed9f | 122 | //*********************************************************** |
afmiee | 10:e7ab0493ed9f | 123 | // file_copy: Copies a file |
afmiee | 10:e7ab0493ed9f | 124 | // Checks to insure destination file was created. |
afmiee | 10:e7ab0493ed9f | 125 | // Returns -1 = error; 0 = success |
afmiee | 10:e7ab0493ed9f | 126 | //*********************************************************** |
afmiee | 10:e7ab0493ed9f | 127 | int file_copy (const char *src, const char *dst) |
afmiee | 10:e7ab0493ed9f | 128 | { |
afmiee | 10:e7ab0493ed9f | 129 | int retval = 0; |
afmiee | 10:e7ab0493ed9f | 130 | int ch; |
afmiee | 10:e7ab0493ed9f | 131 | |
afmiee | 10:e7ab0493ed9f | 132 | FILE *fpsrc = fopen(src, "r"); // src file |
afmiee | 10:e7ab0493ed9f | 133 | FILE *fpdst = fopen(dst, "w"); // dest file |
afmiee | 10:e7ab0493ed9f | 134 | |
afmiee | 10:e7ab0493ed9f | 135 | while (1) { // Copy src to dest |
afmiee | 10:e7ab0493ed9f | 136 | ch = fgetc(fpsrc); // until src EOF read. |
afmiee | 10:e7ab0493ed9f | 137 | if (ch == EOF) break; |
afmiee | 10:e7ab0493ed9f | 138 | fputc(ch, fpdst); |
afmiee | 10:e7ab0493ed9f | 139 | } |
afmiee | 10:e7ab0493ed9f | 140 | fclose(fpsrc); |
afmiee | 10:e7ab0493ed9f | 141 | fclose(fpdst); |
afmiee | 10:e7ab0493ed9f | 142 | |
afmiee | 10:e7ab0493ed9f | 143 | fpdst = fopen(dst, "r"); // Reopen dest to insure |
afmiee | 10:e7ab0493ed9f | 144 | if(fpdst == NULL) { // that it was created. |
afmiee | 10:e7ab0493ed9f | 145 | retval = (-1); // Return error. |
afmiee | 10:e7ab0493ed9f | 146 | } else { |
afmiee | 10:e7ab0493ed9f | 147 | fclose(fpdst); |
afmiee | 10:e7ab0493ed9f | 148 | retval = (0); // Return success. |
afmiee | 10:e7ab0493ed9f | 149 | } |
afmiee | 10:e7ab0493ed9f | 150 | return (retval); |
afmiee | 10:e7ab0493ed9f | 151 | } |
afmiee | 10:e7ab0493ed9f | 152 | // Generated when button 1 is pressed on rising edge START |
afmiee | 10:e7ab0493ed9f | 153 | // Modified to be generated by Interrupt 1 |
afmiee | 10:e7ab0493ed9f | 154 | void start_smpl() |
afmiee | 10:e7ab0493ed9f | 155 | { |
afmiee | 10:e7ab0493ed9f | 156 | //lol.readAccel(); |
afmiee | 10:e7ab0493ed9f | 157 | start = 1; |
afmiee | 10:e7ab0493ed9f | 158 | stop = 0; |
afmiee | 10:e7ab0493ed9f | 159 | //dbg2 = 1; |
afmiee | 10:e7ab0493ed9f | 160 | } |
afmiee | 10:e7ab0493ed9f | 161 | |
afmiee | 10:e7ab0493ed9f | 162 | // Generated when button 1 is pressed on rising edge STOP |
afmiee | 10:e7ab0493ed9f | 163 | // Modified to be generated by Interrupt 2 |
afmiee | 10:e7ab0493ed9f | 164 | void stop_smpl() |
afmiee | 10:e7ab0493ed9f | 165 | { |
afmiee | 10:e7ab0493ed9f | 166 | stop = 1; |
afmiee | 10:e7ab0493ed9f | 167 | start = 0; |
afmiee | 10:e7ab0493ed9f | 168 | //dbg2 = 0; |
afmiee | 10:e7ab0493ed9f | 169 | } |
afmiee | 10:e7ab0493ed9f | 170 | |
afmiee | 10:e7ab0493ed9f | 171 | void parp( int times ) |
afmiee | 10:e7ab0493ed9f | 172 | { |
afmiee | 10:e7ab0493ed9f | 173 | int i; |
afmiee | 10:e7ab0493ed9f | 174 | for( i = 0; i < times; i++) { |
afmiee | 10:e7ab0493ed9f | 175 | led1 = 0; |
afmiee | 10:e7ab0493ed9f | 176 | wait( 0.05); |
afmiee | 10:e7ab0493ed9f | 177 | led1 = 1; |
afmiee | 10:e7ab0493ed9f | 178 | wait( 0.05); |
afmiee | 10:e7ab0493ed9f | 179 | } |
afmiee | 10:e7ab0493ed9f | 180 | led2 = 1; |
afmiee | 10:e7ab0493ed9f | 181 | } |
afmiee | 10:e7ab0493ed9f | 182 | // Flipped every second |
afmiee | 10:e7ab0493ed9f | 183 | void flip() |
afmiee | 10:e7ab0493ed9f | 184 | { |
afmiee | 10:e7ab0493ed9f | 185 | led2 = 0; |
afmiee | 10:e7ab0493ed9f | 186 | wait(0.01); |
afmiee | 10:e7ab0493ed9f | 187 | led2 = 1; |
afmiee | 10:e7ab0493ed9f | 188 | if ( !stop ) { |
afmiee | 10:e7ab0493ed9f | 189 | led1 = 0; |
afmiee | 10:e7ab0493ed9f | 190 | wait(0.01); |
afmiee | 10:e7ab0493ed9f | 191 | led1 = 1; |
afmiee | 10:e7ab0493ed9f | 192 | } |
afmiee | 10:e7ab0493ed9f | 193 | } |
afmiee | 10:e7ab0493ed9f | 194 | |
afmiee | 10:e7ab0493ed9f | 195 | void print_config_int_registers( void ) |
afmiee | 10:e7ab0493ed9f | 196 | { |
afmiee | 10:e7ab0493ed9f | 197 | #ifdef DEBUG |
afmiee | 10:e7ab0493ed9f | 198 | debug.printf( "\n\r"); |
afmiee | 10:e7ab0493ed9f | 199 | debug.printf( "INT1_CTRL (0Ch) %02x\n\r", I2CreadByte(0xD6, 0x0C)); |
afmiee | 10:e7ab0493ed9f | 200 | debug.printf( "INT2_CTRL (0Dh) %02x\n\r", I2CreadByte(0xD6, 0x0D)); |
afmiee | 10:e7ab0493ed9f | 201 | debug.printf( "CTRL_REG8 (22h) %02x\n\r", I2CreadByte(0xD6, 0x22)); |
afmiee | 10:e7ab0493ed9f | 202 | debug.printf( "STATUS_REG (27h) %02x\n\r", I2CreadByte(0xD6, 0x27)); |
afmiee | 10:e7ab0493ed9f | 203 | debug.printf( "\n\r"); |
afmiee | 10:e7ab0493ed9f | 204 | debug.printf( "INT_GEN_CFG_XL (06h) %02x\n\r", I2CreadByte(0xD6, 0x06)); |
afmiee | 10:e7ab0493ed9f | 205 | debug.printf( "INT_GEN_SRC_XL (26h) %02x\n\r", I2CreadByte(0xD6, 0x26)); |
afmiee | 10:e7ab0493ed9f | 206 | debug.printf( "INT_GEN_THS_X_XL (07h) %02x\n\r", I2CreadByte(0xD6, 0x07)); |
afmiee | 10:e7ab0493ed9f | 207 | debug.printf( "INT_GEN_THS_Y_XL (08h) %02x\n\r", I2CreadByte(0xD6, 0x08)); |
afmiee | 10:e7ab0493ed9f | 208 | debug.printf( "INT_GEN_THS_Z_XL (09h) %02x\n\r", I2CreadByte(0xD6, 0x09)); |
afmiee | 10:e7ab0493ed9f | 209 | debug.printf( "INT_GEN_DUR_XL (0ah) %02x\n\r", I2CreadByte(0xD6, 0x0a)); |
afmiee | 10:e7ab0493ed9f | 210 | debug.printf( "\n\r"); |
afmiee | 10:e7ab0493ed9f | 211 | debug.printf( "INT_GEN_CFG_G (30h) %02x\n\r", I2CreadByte(0xD6, 0x30)); |
afmiee | 10:e7ab0493ed9f | 212 | debug.printf( "INT_GEN_SRC_G (14h) %02x\n\r", I2CreadByte(0xD6, 0x14)); |
afmiee | 10:e7ab0493ed9f | 213 | debug.printf( "INT_GEN_THS_XH_G (31h) %02x\n\r", I2CreadByte(0xD6, 0x31)); |
afmiee | 10:e7ab0493ed9f | 214 | debug.printf( "INT_GEN_THS_XL_G (32h) %02x\n\r", I2CreadByte(0xD6, 0x32)); |
afmiee | 10:e7ab0493ed9f | 215 | debug.printf( "INT_GEN_THS_YH_G (33h) %02x\n\r", I2CreadByte(0xD6, 0x33)); |
afmiee | 10:e7ab0493ed9f | 216 | debug.printf( "INT_GEN_THS_YL_G (34h) %02x\n\r", I2CreadByte(0xD6, 0x34)); |
afmiee | 10:e7ab0493ed9f | 217 | debug.printf( "INT_GEN_THS_ZH_G (35h) %02x\n\r", I2CreadByte(0xD6, 0x35)); |
afmiee | 10:e7ab0493ed9f | 218 | debug.printf( "INT_GEN_THS_ZL_G (36h) %02x\n\r", I2CreadByte(0xD6, 0x36)); |
afmiee | 10:e7ab0493ed9f | 219 | debug.printf( "INT_GEN_DUR_G (37h) %02x\n\r", I2CreadByte(0xD6, 0x37)); |
afmiee | 10:e7ab0493ed9f | 220 | #endif |
afmiee | 10:e7ab0493ed9f | 221 | } |
afmiee | 10:e7ab0493ed9f | 222 | |
afmiee | 10:e7ab0493ed9f | 223 | void open_temp_files( void ) |
afmiee | 10:e7ab0493ed9f | 224 | { |
afmiee | 10:e7ab0493ed9f | 225 | fpA = fopen("/sd/ACC.csv", "w"); |
afmiee | 10:e7ab0493ed9f | 226 | // Verify that file can be created |
afmiee | 10:e7ab0493ed9f | 227 | if ( fpA == NULL ) { |
afmiee | 10:e7ab0493ed9f | 228 | debug.printf("Cannot create file ACC.csv\n\r"); |
afmiee | 10:e7ab0493ed9f | 229 | wait(0.5); |
afmiee | 10:e7ab0493ed9f | 230 | while(1) { |
afmiee | 10:e7ab0493ed9f | 231 | led1 = !led1; |
afmiee | 10:e7ab0493ed9f | 232 | wait(0.5); |
afmiee | 10:e7ab0493ed9f | 233 | } |
afmiee | 10:e7ab0493ed9f | 234 | } else |
afmiee | 10:e7ab0493ed9f | 235 | debug.printf("File ACC.csv created successfully\n\r"); |
afmiee | 10:e7ab0493ed9f | 236 | |
afmiee | 10:e7ab0493ed9f | 237 | fpG = fopen("/sd/GYR.csv", "w"); |
afmiee | 10:e7ab0493ed9f | 238 | // Verify that file can be created |
afmiee | 10:e7ab0493ed9f | 239 | if ( fpG == NULL ) { |
afmiee | 10:e7ab0493ed9f | 240 | debug.printf("Cannot create file GYR.csv\n\r"); |
afmiee | 10:e7ab0493ed9f | 241 | wait(0.5); |
afmiee | 10:e7ab0493ed9f | 242 | while(1) { |
afmiee | 10:e7ab0493ed9f | 243 | led1 = !led1; |
afmiee | 10:e7ab0493ed9f | 244 | wait(0.5); |
afmiee | 10:e7ab0493ed9f | 245 | } |
afmiee | 10:e7ab0493ed9f | 246 | } else |
afmiee | 10:e7ab0493ed9f | 247 | debug.printf("File GYR.csv created successfully\n\r"); |
afmiee | 10:e7ab0493ed9f | 248 | |
afmiee | 10:e7ab0493ed9f | 249 | fpM = fopen("/sd/MAG.csv", "w"); |
afmiee | 10:e7ab0493ed9f | 250 | // Verify that file can be created |
afmiee | 10:e7ab0493ed9f | 251 | if ( fpM == NULL ) { |
afmiee | 10:e7ab0493ed9f | 252 | debug.printf("Cannot create file MAG.csv\n\r"); |
afmiee | 10:e7ab0493ed9f | 253 | wait(0.5); |
afmiee | 10:e7ab0493ed9f | 254 | while(1) { |
afmiee | 10:e7ab0493ed9f | 255 | led1 = !led1; |
afmiee | 10:e7ab0493ed9f | 256 | wait(0.5); |
afmiee | 10:e7ab0493ed9f | 257 | } |
afmiee | 10:e7ab0493ed9f | 258 | } else |
afmiee | 10:e7ab0493ed9f | 259 | debug.printf("File MAG.csv created successfully\n\r"); |
afmiee | 10:e7ab0493ed9f | 260 | } |
afmiee | 10:e7ab0493ed9f | 261 | |
afmiee | 10:e7ab0493ed9f | 262 | void rename_files( void ) |
afmiee | 10:e7ab0493ed9f | 263 | { |
afmiee | 10:e7ab0493ed9f | 264 | sprintf(filename, "/sd/latch9DOFA_%08x.csv",seconds); |
afmiee | 10:e7ab0493ed9f | 265 | if((file_rename("/sd/ACC.csv",filename )) == 0) { |
afmiee | 10:e7ab0493ed9f | 266 | debug.printf("File ACC.csv renamed successfully to %s\n\r", filename); |
afmiee | 10:e7ab0493ed9f | 267 | } else { |
afmiee | 10:e7ab0493ed9f | 268 | debug.printf("Error: unable to rename the file ACC.csv"); |
afmiee | 10:e7ab0493ed9f | 269 | } |
afmiee | 10:e7ab0493ed9f | 270 | sprintf(filename, "/sd/latch9DOFM_%08x.csv",seconds); |
afmiee | 10:e7ab0493ed9f | 271 | if((file_rename("/sd/MAG.csv",filename )) == 0) { |
afmiee | 10:e7ab0493ed9f | 272 | debug.printf("File MAG.csv renamed successfully to %s\n\r", filename); |
afmiee | 10:e7ab0493ed9f | 273 | } else { |
afmiee | 10:e7ab0493ed9f | 274 | debug.printf("Error: unable to rename the file MAG.csv"); |
afmiee | 10:e7ab0493ed9f | 275 | } |
afmiee | 10:e7ab0493ed9f | 276 | sprintf(filename, "/sd/latch9DOFG_%08x.csv",seconds); |
afmiee | 10:e7ab0493ed9f | 277 | if((file_rename("/sd/GYR.csv",filename )) == 0) { |
afmiee | 10:e7ab0493ed9f | 278 | debug.printf("File GYR.csv renamed successfully to %s\n\r", filename); |
afmiee | 10:e7ab0493ed9f | 279 | } else { |
afmiee | 10:e7ab0493ed9f | 280 | debug.printf("Error: unable to rename the file GYR.csv"); |
afmiee | 10:e7ab0493ed9f | 281 | } |
afmiee | 10:e7ab0493ed9f | 282 | } |
afmiee | 10:e7ab0493ed9f | 283 | |
afmiee | 10:e7ab0493ed9f | 284 | int main() |
afmiee | 10:e7ab0493ed9f | 285 | { |
afmiee | 10:e7ab0493ed9f | 286 | led1= 1; |
afmiee | 10:e7ab0493ed9f | 287 | |
afmiee | 10:e7ab0493ed9f | 288 | struct tm t; |
afmiee | 10:e7ab0493ed9f | 289 | // debug pins |
afmiee | 10:e7ab0493ed9f | 290 | dbg1 = 0; |
afmiee | 10:e7ab0493ed9f | 291 | dbg2 = 0; |
afmiee | 10:e7ab0493ed9f | 292 | |
afmiee | 10:e7ab0493ed9f | 293 | // Attach functions to interrupts |
afmiee | 10:e7ab0493ed9f | 294 | flipper.attach(&flip, 1.0); // the address of the function to be attached (flip) and the interval (2 seconds) |
afmiee | 10:e7ab0493ed9f | 295 | |
afmiee | 10:e7ab0493ed9f | 296 | // Enable serial port |
afmiee | 10:e7ab0493ed9f | 297 | debug.format(8,Serial::None,1); |
afmiee | 10:e7ab0493ed9f | 298 | debug.baud(115200); |
afmiee | 10:e7ab0493ed9f | 299 | #ifdef DEBUG |
afmiee | 10:e7ab0493ed9f | 300 | debug.printf("LSM9DS1 Test\x0d\x0a"); |
afmiee | 10:e7ab0493ed9f | 301 | #endif |
afmiee | 10:e7ab0493ed9f | 302 | |
afmiee | 10:e7ab0493ed9f | 303 | // Initialize 9DOF |
afmiee | 10:e7ab0493ed9f | 304 | if (!lol.begin()) { |
afmiee | 10:e7ab0493ed9f | 305 | debug.printf("Failed to communicate with LSM9DS1.\n"); |
afmiee | 10:e7ab0493ed9f | 306 | wait(0.5); |
afmiee | 10:e7ab0493ed9f | 307 | while(1) { |
afmiee | 10:e7ab0493ed9f | 308 | led1 = !led1; |
afmiee | 10:e7ab0493ed9f | 309 | wait(0.5); |
afmiee | 10:e7ab0493ed9f | 310 | } |
afmiee | 10:e7ab0493ed9f | 311 | } else { |
afmiee | 10:e7ab0493ed9f | 312 | debug.printf("Communication with the LSM9DS1 successfully\n\r"); |
afmiee | 10:e7ab0493ed9f | 313 | } |
afmiee | 10:e7ab0493ed9f | 314 | |
afmiee | 10:e7ab0493ed9f | 315 | lol.calibrate(true); |
afmiee | 10:e7ab0493ed9f | 316 | //lol.getStatus(); |
afmiee | 10:e7ab0493ed9f | 317 | //lol.getAccelIntSrc(); |
afmiee | 10:e7ab0493ed9f | 318 | //lol.readAccel(); |
afmiee | 10:e7ab0493ed9f | 319 | //lol.readGyro(); |
afmiee | 10:e7ab0493ed9f | 320 | |
afmiee | 10:e7ab0493ed9f | 321 | lol.configAccelThs((uint8_t)INT_GEN_THS_X_XL_REG, X_AXIS, (uint8_t)INT_GEN_DUR_XL_REG, false); // INT_GEN_THS_X_XL (07h) |
afmiee | 10:e7ab0493ed9f | 322 | lol.configAccelThs((uint8_t)INT_GEN_THS_Y_YL_REG, Y_AXIS, (uint8_t)INT_GEN_DUR_XL_REG, false); // INT_GEN_THS_Y_XL (08h) |
afmiee | 10:e7ab0493ed9f | 323 | lol.configAccelThs((uint8_t)INT_GEN_THS_Z_XL_REG, Z_AXIS, (uint8_t)INT_GEN_DUR_XL_REG, false); // INT_GEN_THS_Z_XL (09h) |
afmiee | 10:e7ab0493ed9f | 324 | |
afmiee | 10:e7ab0493ed9f | 325 | lol.configGyroThs((int16_t )INT_GEN_THS_XHL_G_REG, X_AXIS, (uint8_t) INT_GEN_DUR_G_REG, false); // INT_GEN_THS_X_G (31h - 32h) |
afmiee | 10:e7ab0493ed9f | 326 | lol.configGyroThs((int16_t )INT_GEN_THS_YHL_G_REG, Y_AXIS, (uint8_t) INT_GEN_DUR_G_REG, false); // INT_GEN_THS_Y_G (33h - 34h) |
afmiee | 10:e7ab0493ed9f | 327 | lol.configGyroThs((int16_t )INT_GEN_THS_ZHL_G_REG, Z_AXIS, (uint8_t) INT_GEN_DUR_G_REG, false); // INT_GEN_THS_Z_G (35h - 36h) |
afmiee | 10:e7ab0493ed9f | 328 | //lol.configGyroInt(ZHIE_G|YHIE_G|XHIE_G, false, false); // INT_GEN_CFG_G (30h) |
afmiee | 10:e7ab0493ed9f | 329 | |
afmiee | 10:e7ab0493ed9f | 330 | lol.configInt(XG_INT1, 0, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT1_CTRL (0x0C) + CTRL_REG8 (0x22) |
afmiee | 10:e7ab0493ed9f | 331 | lol.configInt(XG_INT2, 0, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT1_CTRL (0x0C) + CTRL_REG8 (0x22) |
afmiee | 10:e7ab0493ed9f | 332 | #ifdef DEBUG |
afmiee | 10:e7ab0493ed9f | 333 | print_config_int_registers(); |
afmiee | 10:e7ab0493ed9f | 334 | #endif |
afmiee | 10:e7ab0493ed9f | 335 | // Dump all registers |
afmiee | 10:e7ab0493ed9f | 336 | //DumpAccelGyroRegs(); |
afmiee | 10:e7ab0493ed9f | 337 | // // Initialize current time if needed |
afmiee | 10:e7ab0493ed9f | 338 | // printf("Enter current date and time:\n"); |
afmiee | 10:e7ab0493ed9f | 339 | // printf("YYYY MM DD HH MM SS[enter]\n"); |
afmiee | 10:e7ab0493ed9f | 340 | // scanf("%d %d %d %d %d %d", &t.tm_year, &t.tm_mon, &t.tm_mday |
afmiee | 10:e7ab0493ed9f | 341 | // , &t.tm_hour, &t.tm_min, &t.tm_sec); |
afmiee | 10:e7ab0493ed9f | 342 | |
afmiee | 10:e7ab0493ed9f | 343 | // adjust for tm structure required values |
afmiee | 10:e7ab0493ed9f | 344 | t.tm_year = t.tm_year - 1900; |
afmiee | 10:e7ab0493ed9f | 345 | t.tm_mon = t.tm_mon - 1; |
afmiee | 10:e7ab0493ed9f | 346 | |
afmiee | 10:e7ab0493ed9f | 347 | // set the time |
afmiee | 10:e7ab0493ed9f | 348 | rtc.set_time(mktime(&t)); |
afmiee | 10:e7ab0493ed9f | 349 | // Set the interrupt service routines |
afmiee | 10:e7ab0493ed9f | 350 | int1.fall(&start_smpl); |
afmiee | 10:e7ab0493ed9f | 351 | int2.fall(&stop_smpl); |
afmiee | 10:e7ab0493ed9f | 352 | |
afmiee | 10:e7ab0493ed9f | 353 | // Wait for the start Signal generated by the accelerometer interrupt |
afmiee | 10:e7ab0493ed9f | 354 | lol.configAccelInt(ZHIE_XL|YHIE_XL|XHIE_XL, false); // INT_GEN_CFG_XL (06h) |
afmiee | 10:e7ab0493ed9f | 355 | lol.configInt(XG_INT1, INT1_IG_XL, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT1_CTRL (0x0C) + CTRL_REG8 (0x22) |
afmiee | 10:e7ab0493ed9f | 356 | lol.configInactivity(ACT_THS_REG, ACT_DUR_REG, true); |
afmiee | 10:e7ab0493ed9f | 357 | lol.configInt(XG_INT2, INT2_INACT, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT2_CTRL (0x0D) + CTRL_REG8 (0x22) |
afmiee | 10:e7ab0493ed9f | 358 | |
afmiee | 10:e7ab0493ed9f | 359 | while(1) { |
afmiee | 10:e7ab0493ed9f | 360 | // Check for button 1 pressed |
afmiee | 10:e7ab0493ed9f | 361 | #ifdef DEBUG |
afmiee | 10:e7ab0493ed9f | 362 | debug.printf( "\n\r"); |
afmiee | 10:e7ab0493ed9f | 363 | debug.printf( "Status (27h) %02x\n\r", lol.getStatus()); // STATUS_REG (27h) |
afmiee | 10:e7ab0493ed9f | 364 | debug.printf( "GyroIntSrc (14h) %02x\n\r", lol.getGyroIntSrc()); // INT_GEN_SRC_G (14h) |
afmiee | 10:e7ab0493ed9f | 365 | debug.printf( "AccelIntSrc(26h) %02x\n\r", lol.getAccelIntSrc()); // INT_GEN_SRC_XL (26h) |
afmiee | 10:e7ab0493ed9f | 366 | debug.printf( "MagIntSrc (31h) %02x\n\r", lol.getMagIntSrc()); // INT_SRC_M (31h) |
afmiee | 10:e7ab0493ed9f | 367 | debug.printf( "Inactivity (17h) %02x\n\r", lol.getInactivity()); // STATUS_REG (17h) |
afmiee | 10:e7ab0493ed9f | 368 | debug.printf( "\n\r"); |
afmiee | 10:e7ab0493ed9f | 369 | #endif |
afmiee | 10:e7ab0493ed9f | 370 | // Wait for the start Signal generated by the accelerometer interrupt |
afmiee | 10:e7ab0493ed9f | 371 | //lol.configAccelInt(ZHIE_XL|YHIE_XL|XHIE_XL, false); // INT_GEN_CFG_XL (06h) |
afmiee | 10:e7ab0493ed9f | 372 | //lol.configInt(XG_INT1, INT1_IG_XL, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT1_CTRL (0x0C) + CTRL_REG8 (0x22) |
afmiee | 10:e7ab0493ed9f | 373 | //lol.configInactivity(ACT_THS_REG, ACT_DUR_REG, true); |
afmiee | 10:e7ab0493ed9f | 374 | //lol.configInt(XG_INT2, INT2_INACT, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT2_CTRL (0x0D) + CTRL_REG8 (0x22) |
afmiee | 10:e7ab0493ed9f | 375 | |
afmiee | 10:e7ab0493ed9f | 376 | #ifdef DEBUG |
afmiee | 10:e7ab0493ed9f | 377 | print_config_int_registers(); |
afmiee | 10:e7ab0493ed9f | 378 | #endif |
afmiee | 10:e7ab0493ed9f | 379 | open_temp_files(); |
afmiee | 10:e7ab0493ed9f | 380 | start = 0; |
afmiee | 10:e7ab0493ed9f | 381 | while(!start) { |
afmiee | 10:e7ab0493ed9f | 382 | led1 = 1; |
afmiee | 10:e7ab0493ed9f | 383 | } |
afmiee | 10:e7ab0493ed9f | 384 | dbg1 = 1; |
afmiee | 10:e7ab0493ed9f | 385 | // Disable the interrupt |
afmiee | 10:e7ab0493ed9f | 386 | //lol.configAccelInt(0, false); // INT_GEN_CFG_XL (06h) |
afmiee | 10:e7ab0493ed9f | 387 | //lol.configInt(XG_INT1, 0, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT1_CTRL (0x0C) + CTRL_REG8 (0x22) |
afmiee | 10:e7ab0493ed9f | 388 | // Read the interrupt to clear it |
afmiee | 10:e7ab0493ed9f | 389 | //lol.getStatus(); |
afmiee | 10:e7ab0493ed9f | 390 | // lol.getAccelIntSrc(); |
afmiee | 10:e7ab0493ed9f | 391 | //lol.readAccel(); |
afmiee | 10:e7ab0493ed9f | 392 | //lol.getGyroIntSrc(); |
afmiee | 10:e7ab0493ed9f | 393 | //lol.readGyro(); |
afmiee | 10:e7ab0493ed9f | 394 | |
afmiee | 10:e7ab0493ed9f | 395 | dbg1 = 0; |
afmiee | 10:e7ab0493ed9f | 396 | // Start sampling |
afmiee | 10:e7ab0493ed9f | 397 | //led1 = 0; |
afmiee | 10:e7ab0493ed9f | 398 | //parp(5); |
afmiee | 10:e7ab0493ed9f | 399 | #ifdef DEBUG |
afmiee | 10:e7ab0493ed9f | 400 | debug.printf("Started sampling\n\r"); |
afmiee | 10:e7ab0493ed9f | 401 | // Get the time and create a file with the number of seconds in hex appended |
afmiee | 10:e7ab0493ed9f | 402 | #endif |
afmiee | 10:e7ab0493ed9f | 403 | seconds = rtc.time(); |
afmiee | 10:e7ab0493ed9f | 404 | |
afmiee | 10:e7ab0493ed9f | 405 | sprintf(secs_str, "%s", ctime(&seconds)); |
afmiee | 10:e7ab0493ed9f | 406 | #ifdef DEBUG |
afmiee | 10:e7ab0493ed9f | 407 | debug.printf("\n\rStarted at: %s\n\r\n\r", secs_str ); |
afmiee | 10:e7ab0493ed9f | 408 | #endif |
afmiee | 10:e7ab0493ed9f | 409 | // program inactivity timer |
afmiee | 10:e7ab0493ed9f | 410 | |
afmiee | 10:e7ab0493ed9f | 411 | //lol.configInactivity(ACT_THS_REG, ACT_DUR_REG, true); |
afmiee | 10:e7ab0493ed9f | 412 | //lol.configInt(XG_INT2, INT2_INACT, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT2_CTRL (0x0D) + CTRL_REG8 (0x22) |
afmiee | 10:e7ab0493ed9f | 413 | // Execute until inctivity timer is triggered |
afmiee | 10:e7ab0493ed9f | 414 | #ifdef DEBUG |
afmiee | 10:e7ab0493ed9f | 415 | print_config_int_registers(); |
afmiee | 10:e7ab0493ed9f | 416 | #endif |
afmiee | 10:e7ab0493ed9f | 417 | while(!stop) { |
afmiee | 10:e7ab0493ed9f | 418 | dbg2 = 1; |
afmiee | 10:e7ab0493ed9f | 419 | if (lol.accelAvailable()) { |
afmiee | 10:e7ab0493ed9f | 420 | lol.readAccel(); |
afmiee | 10:e7ab0493ed9f | 421 | #ifdef DEBUG |
afmiee | 10:e7ab0493ed9f | 422 | debug.printf("ACC %d, %d, %d\n\r", lol.ax, lol.ay, lol.az); |
afmiee | 10:e7ab0493ed9f | 423 | #endif |
afmiee | 10:e7ab0493ed9f | 424 | fprintf(fpA, "%d, %d, %d\n\r", lol.ax, lol.ay, lol.az); |
afmiee | 10:e7ab0493ed9f | 425 | } |
afmiee | 10:e7ab0493ed9f | 426 | if ( lol.magAvailable(X_AXIS) && lol.magAvailable(Y_AXIS) && lol.magAvailable(Z_AXIS)) { |
afmiee | 10:e7ab0493ed9f | 427 | lol.readMag(); |
afmiee | 10:e7ab0493ed9f | 428 | #ifdef DEBUG |
afmiee | 10:e7ab0493ed9f | 429 | debug.printf("MAG %d, %d, %d\n\r", lol.mx, lol.my, lol.mz); |
afmiee | 10:e7ab0493ed9f | 430 | #endif |
afmiee | 10:e7ab0493ed9f | 431 | fprintf(fpM, "%d, %d, %d\n\r", lol.mx, lol.my, lol.mz); |
afmiee | 10:e7ab0493ed9f | 432 | } |
afmiee | 10:e7ab0493ed9f | 433 | if ( lol.gyroAvailable()) { |
afmiee | 10:e7ab0493ed9f | 434 | lol.readGyro(); |
afmiee | 10:e7ab0493ed9f | 435 | #ifdef DEBUG |
afmiee | 10:e7ab0493ed9f | 436 | debug.printf("GYR %d, %d, %d\n\r", lol.gx, lol.gy, lol.gz); |
afmiee | 10:e7ab0493ed9f | 437 | #endif |
afmiee | 10:e7ab0493ed9f | 438 | fprintf(fpG, "%d, %d, %d\n\r", lol.gx, lol.gy, lol.gz); |
afmiee | 10:e7ab0493ed9f | 439 | } |
afmiee | 10:e7ab0493ed9f | 440 | } |
afmiee | 10:e7ab0493ed9f | 441 | dbg2 = 0; |
afmiee | 10:e7ab0493ed9f | 442 | //lol.configInt(XG_INT2, 0, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT2_CTRL (0x0D) + CTRL_REG8 (0x22) |
afmiee | 10:e7ab0493ed9f | 443 | |
afmiee | 10:e7ab0493ed9f | 444 | // Stop Sampling and close file |
afmiee | 10:e7ab0493ed9f | 445 | parp(10); |
afmiee | 10:e7ab0493ed9f | 446 | #ifdef DEBUG |
afmiee | 10:e7ab0493ed9f | 447 | debug.printf("Stopped sampling\n\r"); |
afmiee | 10:e7ab0493ed9f | 448 | #endif |
afmiee | 10:e7ab0493ed9f | 449 | fclose(fpA); |
afmiee | 10:e7ab0493ed9f | 450 | fclose(fpM); |
afmiee | 10:e7ab0493ed9f | 451 | fclose(fpG); |
afmiee | 10:e7ab0493ed9f | 452 | rename_files(); |
afmiee | 10:e7ab0493ed9f | 453 | } |
afmiee | 10:e7ab0493ed9f | 454 | } |
afmiee | 8:8f4d7f1c588f | 455 | |
afmiee | 8:8f4d7f1c588f | 456 | void DumpAccelGyroRegs( void ) |
afmiee | 8:8f4d7f1c588f | 457 | { |
afmiee | 8:8f4d7f1c588f | 458 | char dest[ 0x34 ]; |
afmiee | 8:8f4d7f1c588f | 459 | int i; |
afmiee | 8:8f4d7f1c588f | 460 | |
afmiee | 8:8f4d7f1c588f | 461 | debug.printf("\n\r"); |
afmiee | 9:61fcd186ac50 | 462 | I2CreadBytes( 0xD6, 0x04, (uint8_t *)dest, 0x34 ); |
afmiee | 9:61fcd186ac50 | 463 | |
afmiee | 8:8f4d7f1c588f | 464 | for( i = 0; i < 0x34; i++ ) { |
afmiee | 9:61fcd186ac50 | 465 | //I2CreadByte(0xD6, i + 0x04); |
afmiee | 8:8f4d7f1c588f | 466 | switch( i + 0x04 ) { |
afmiee | 8:8f4d7f1c588f | 467 | case 0x04: |
afmiee | 8:8f4d7f1c588f | 468 | debug.printf("ACT_THS 0x04 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 469 | break; |
afmiee | 8:8f4d7f1c588f | 470 | case 0x05: |
afmiee | 8:8f4d7f1c588f | 471 | debug.printf("ACT_DUR 0x05 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 472 | break; |
afmiee | 8:8f4d7f1c588f | 473 | case 0x06: |
afmiee | 8:8f4d7f1c588f | 474 | debug.printf("INT_GEN_CFG_XL 0x06 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 475 | break; |
afmiee | 8:8f4d7f1c588f | 476 | case 0x07: |
afmiee | 8:8f4d7f1c588f | 477 | debug.printf("INT_GEN_THS_X_XL 0x07 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 478 | break; |
afmiee | 8:8f4d7f1c588f | 479 | case 0x08: |
afmiee | 8:8f4d7f1c588f | 480 | debug.printf("INT_GEN_THS_Y_XL 0x08 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 481 | break; |
afmiee | 8:8f4d7f1c588f | 482 | case 0x09: |
afmiee | 8:8f4d7f1c588f | 483 | debug.printf("INT_GEN_THS_Z_XL 0x09 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 484 | break; |
afmiee | 8:8f4d7f1c588f | 485 | case 0x0A: |
afmiee | 8:8f4d7f1c588f | 486 | debug.printf("INT_GEN_DUR_XL 0x0A %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 487 | break; |
afmiee | 8:8f4d7f1c588f | 488 | case 0x0B: |
afmiee | 8:8f4d7f1c588f | 489 | debug.printf("REFERENCE_G 0x0B %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 490 | break; |
afmiee | 8:8f4d7f1c588f | 491 | case 0x0C: |
afmiee | 8:8f4d7f1c588f | 492 | debug.printf("INT1_CTRL 0x0C %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 493 | break; |
afmiee | 8:8f4d7f1c588f | 494 | case 0x0D: |
afmiee | 8:8f4d7f1c588f | 495 | debug.printf("INT2_CTRL 0x0D %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 496 | break; |
afmiee | 8:8f4d7f1c588f | 497 | case 0x0F: |
afmiee | 8:8f4d7f1c588f | 498 | debug.printf("WHO_AM_I_XG 0x0F %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 499 | break; |
afmiee | 8:8f4d7f1c588f | 500 | case 0x10: |
afmiee | 8:8f4d7f1c588f | 501 | debug.printf("CTRL_REG1_G 0x10 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 502 | break; |
afmiee | 8:8f4d7f1c588f | 503 | case 0x11: |
afmiee | 8:8f4d7f1c588f | 504 | debug.printf("CTRL_REG2_G 0x11 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 505 | break; |
afmiee | 8:8f4d7f1c588f | 506 | case 0x12: |
afmiee | 8:8f4d7f1c588f | 507 | debug.printf("CTRL_REG3_G 0x12 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 508 | break; |
afmiee | 8:8f4d7f1c588f | 509 | case 0x13: |
afmiee | 8:8f4d7f1c588f | 510 | debug.printf("ORIENT_CFG_G 0x13 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 511 | break; |
afmiee | 8:8f4d7f1c588f | 512 | case 0x14: |
afmiee | 8:8f4d7f1c588f | 513 | debug.printf("INT_GEN_SRC_G 0x14 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 514 | break; |
afmiee | 8:8f4d7f1c588f | 515 | case 0x15: |
afmiee | 8:8f4d7f1c588f | 516 | debug.printf("OUT_TEMP_L 0x15 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 517 | break; |
afmiee | 8:8f4d7f1c588f | 518 | case 0x16: |
afmiee | 8:8f4d7f1c588f | 519 | debug.printf("OUT_TEMP_H 0x16 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 520 | break; |
afmiee | 8:8f4d7f1c588f | 521 | case 0x17: |
afmiee | 8:8f4d7f1c588f | 522 | debug.printf("STATUS_REG_0 0x17 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 523 | break; |
afmiee | 8:8f4d7f1c588f | 524 | case 0x18: |
afmiee | 8:8f4d7f1c588f | 525 | debug.printf("OUT_X_L_G 0x18 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 526 | break; |
afmiee | 8:8f4d7f1c588f | 527 | case 0x19: |
afmiee | 8:8f4d7f1c588f | 528 | debug.printf("OUT_X_H_G 0x19 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 529 | break; |
afmiee | 8:8f4d7f1c588f | 530 | case 0x1A: |
afmiee | 8:8f4d7f1c588f | 531 | debug.printf("OUT_Y_L_G 0x1A %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 532 | break; |
afmiee | 8:8f4d7f1c588f | 533 | case 0x1B: |
afmiee | 8:8f4d7f1c588f | 534 | debug.printf("OUT_Y_H_G 0x1B %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 535 | break; |
afmiee | 8:8f4d7f1c588f | 536 | case 0x1C: |
afmiee | 8:8f4d7f1c588f | 537 | debug.printf("OUT_Z_L_G 0x1C %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 538 | break; |
afmiee | 8:8f4d7f1c588f | 539 | case 0x1D: |
afmiee | 8:8f4d7f1c588f | 540 | debug.printf("OUT_Z_H_G 0x1D %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 541 | break; |
afmiee | 8:8f4d7f1c588f | 542 | case 0x1E: |
afmiee | 8:8f4d7f1c588f | 543 | debug.printf("CTRL_REG4 0x1E %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 544 | break; |
afmiee | 8:8f4d7f1c588f | 545 | case 0x1F: |
afmiee | 8:8f4d7f1c588f | 546 | debug.printf("CTRL_REG5_XL 0x1F %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 547 | break; |
afmiee | 8:8f4d7f1c588f | 548 | case 0x20: |
afmiee | 8:8f4d7f1c588f | 549 | debug.printf("CTRL_REG6_XL 0x20 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 550 | break; |
afmiee | 8:8f4d7f1c588f | 551 | case 0x21: |
afmiee | 8:8f4d7f1c588f | 552 | debug.printf("CTRL_REG7_XL 0x21 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 553 | break; |
afmiee | 8:8f4d7f1c588f | 554 | case 0x22: |
afmiee | 8:8f4d7f1c588f | 555 | debug.printf("CTRL_REG8 0x22 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 556 | break; |
afmiee | 8:8f4d7f1c588f | 557 | case 0x23: |
afmiee | 8:8f4d7f1c588f | 558 | debug.printf("CTRL_REG9 0x23 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 559 | break; |
afmiee | 8:8f4d7f1c588f | 560 | case 0x24: |
afmiee | 8:8f4d7f1c588f | 561 | debug.printf("CTRL_REG10 0x24 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 562 | break; |
afmiee | 8:8f4d7f1c588f | 563 | case 0x26: |
afmiee | 8:8f4d7f1c588f | 564 | debug.printf("INT_GEN_SRC_XL 0x26 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 565 | break; |
afmiee | 8:8f4d7f1c588f | 566 | case 0x27: |
afmiee | 8:8f4d7f1c588f | 567 | debug.printf("STATUS_REG_1 0x27 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 568 | break; |
afmiee | 8:8f4d7f1c588f | 569 | case 0x28: |
afmiee | 8:8f4d7f1c588f | 570 | debug.printf("OUT_X_L_XL 0x28 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 571 | break; |
afmiee | 8:8f4d7f1c588f | 572 | case 0x29: |
afmiee | 8:8f4d7f1c588f | 573 | debug.printf("OUT_X_H_XL 0x29 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 574 | break; |
afmiee | 8:8f4d7f1c588f | 575 | case 0x2A: |
afmiee | 8:8f4d7f1c588f | 576 | debug.printf("OUT_Y_L_XL 0x2A %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 577 | break; |
afmiee | 8:8f4d7f1c588f | 578 | case 0x2B: |
afmiee | 8:8f4d7f1c588f | 579 | debug.printf("OUT_Y_H_XL 0x2B %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 580 | break; |
afmiee | 8:8f4d7f1c588f | 581 | case 0x2C: |
afmiee | 8:8f4d7f1c588f | 582 | debug.printf("OUT_Z_L_XL 0x2C %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 583 | break; |
afmiee | 8:8f4d7f1c588f | 584 | case 0x2D: |
afmiee | 8:8f4d7f1c588f | 585 | debug.printf("OUT_Z_H_XL 0x2D %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 586 | break; |
afmiee | 8:8f4d7f1c588f | 587 | case 0x2E: |
afmiee | 8:8f4d7f1c588f | 588 | debug.printf("FIFO_CTRL 0x2E %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 589 | break; |
afmiee | 8:8f4d7f1c588f | 590 | case 0x2F: |
afmiee | 8:8f4d7f1c588f | 591 | debug.printf("FIFO_SRC 0x2F %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 592 | break; |
afmiee | 8:8f4d7f1c588f | 593 | case 0x30: |
afmiee | 8:8f4d7f1c588f | 594 | debug.printf("INT_GEN_CFG_G 0x30 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 595 | break; |
afmiee | 8:8f4d7f1c588f | 596 | case 0x31: |
afmiee | 8:8f4d7f1c588f | 597 | debug.printf("INT_GEN_THS_XH_G 0x31 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 598 | break; |
afmiee | 8:8f4d7f1c588f | 599 | case 0x32: |
afmiee | 8:8f4d7f1c588f | 600 | debug.printf("INT_GEN_THS_XL_G 0x32 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 601 | break; |
afmiee | 8:8f4d7f1c588f | 602 | case 0x33: |
afmiee | 8:8f4d7f1c588f | 603 | debug.printf("INT_GEN_THS_YH_G 0x33 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 604 | break; |
afmiee | 8:8f4d7f1c588f | 605 | case 0x34: |
afmiee | 8:8f4d7f1c588f | 606 | debug.printf("INT_GEN_THS_YL_G 0x34 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 607 | break; |
afmiee | 8:8f4d7f1c588f | 608 | case 0x35: |
afmiee | 8:8f4d7f1c588f | 609 | debug.printf("INT_GEN_THS_ZH_G 0x35 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 610 | break; |
afmiee | 8:8f4d7f1c588f | 611 | case 0x36: |
afmiee | 8:8f4d7f1c588f | 612 | debug.printf("INT_GEN_THS_ZL_G 0x36 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 613 | break; |
afmiee | 8:8f4d7f1c588f | 614 | case 0x37: |
afmiee | 8:8f4d7f1c588f | 615 | debug.printf("INT_GEN_DUR_G 0x37 %02x\n\r", dest[i]); |
afmiee | 8:8f4d7f1c588f | 616 | break; |
afmiee | 8:8f4d7f1c588f | 617 | default: |
afmiee | 8:8f4d7f1c588f | 618 | debug.printf("Register Not Valid 0x%02x\n\r"); |
afmiee | 8:8f4d7f1c588f | 619 | break; |
afmiee | 8:8f4d7f1c588f | 620 | } |
afmiee | 8:8f4d7f1c588f | 621 | } |
afmiee | 8:8f4d7f1c588f | 622 | } |
afmiee | 8:8f4d7f1c588f | 623 | |
afmiee | 8:8f4d7f1c588f | 624 | |
afmiee | 5:b1a689c55f59 | 625 | |
afmiee | 10:e7ab0493ed9f | 626 | #define DEPTH 64 |
afmiee | 10:e7ab0493ed9f | 627 | #define DEPP2 6 |
afmiee | 9:61fcd186ac50 | 628 | |
afmiee | 9:61fcd186ac50 | 629 | |
afmiee | 10:e7ab0493ed9f | 630 | ulint mag_vec( int ax, int ay, int az ) |
afmiee | 10:e7ab0493ed9f | 631 | { |
afmiee | 10:e7ab0493ed9f | 632 | static int x[DEPTH]; |
afmiee | 10:e7ab0493ed9f | 633 | static int y[DEPTH]; |
afmiee | 10:e7ab0493ed9f | 634 | static int z[DEPTH]; |
afmiee | 8:8f4d7f1c588f | 635 | |
afmiee | 10:e7ab0493ed9f | 636 | int i; |
afmiee | 10:e7ab0493ed9f | 637 | int sx,sy,sz; |
afmiee | 10:e7ab0493ed9f | 638 | |
afmiee | 10:e7ab0493ed9f | 639 | x[0] = ax; |
afmiee | 10:e7ab0493ed9f | 640 | y[0] = ay; |
afmiee | 10:e7ab0493ed9f | 641 | z[0] = az; |
afmiee | 10:e7ab0493ed9f | 642 | sx = 0; |
afmiee | 10:e7ab0493ed9f | 643 | sy = 0; |
afmiee | 10:e7ab0493ed9f | 644 | sz = 0; |
afmiee | 8:8f4d7f1c588f | 645 | |
afmiee | 10:e7ab0493ed9f | 646 | for( i = 0; i < DEPTH; i++ ) { |
afmiee | 10:e7ab0493ed9f | 647 | sx+= x[i]; |
afmiee | 10:e7ab0493ed9f | 648 | sy+= y[i]; |
afmiee | 10:e7ab0493ed9f | 649 | sz+= z[i]; |
afmiee | 10:e7ab0493ed9f | 650 | } |
afmiee | 10:e7ab0493ed9f | 651 | sx >>= DEPP2; |
afmiee | 10:e7ab0493ed9f | 652 | sy >>= DEPP2; |
afmiee | 10:e7ab0493ed9f | 653 | sz >>= DEPP2; |
afmiee | 9:61fcd186ac50 | 654 | |
afmiee | 10:e7ab0493ed9f | 655 | for( i = 0; i < DEPTH-1; i++ ) { |
afmiee | 10:e7ab0493ed9f | 656 | x[i+1] = x[i]; |
afmiee | 10:e7ab0493ed9f | 657 | y[i+1] = y[i]; |
afmiee | 10:e7ab0493ed9f | 658 | z[i+1] = z[i]; |
afmiee | 6:9db9f4bfaf98 | 659 | } |
afmiee | 10:e7ab0493ed9f | 660 | return( (ulint)(sx*sx + sy*sy + sz*sz) ); |
tosihisa | 4:3c677edffb13 | 661 | } |
afmiee | 7:cbfdcc57f110 | 662 | |
afmiee | 7:cbfdcc57f110 | 663 | |
afmiee | 10:e7ab0493ed9f | 664 | ulint maxvec( ulint vec, int reset ) |
afmiee | 10:e7ab0493ed9f | 665 | { |
afmiee | 10:e7ab0493ed9f | 666 | ulint static max; |
afmiee | 7:cbfdcc57f110 | 667 | |
afmiee | 10:e7ab0493ed9f | 668 | if( reset == 0 ) |
afmiee | 10:e7ab0493ed9f | 669 | max = 0; |
afmiee | 10:e7ab0493ed9f | 670 | |
afmiee | 10:e7ab0493ed9f | 671 | if ( vec > max ) { |
afmiee | 10:e7ab0493ed9f | 672 | max = vec; |
afmiee | 10:e7ab0493ed9f | 673 | } |
afmiee | 10:e7ab0493ed9f | 674 | return( max ); |
afmiee | 10:e7ab0493ed9f | 675 | } |
afmiee | 10:e7ab0493ed9f | 676 | |
afmiee | 10:e7ab0493ed9f | 677 | ulint minvec( ulint vec, int reset ) |
afmiee | 10:e7ab0493ed9f | 678 | { |
afmiee | 10:e7ab0493ed9f | 679 | ulint static min; |
afmiee | 10:e7ab0493ed9f | 680 | if ( reset == 0) |
afmiee | 10:e7ab0493ed9f | 681 | min = 0xFFFFFFFF; |
afmiee | 10:e7ab0493ed9f | 682 | |
afmiee | 10:e7ab0493ed9f | 683 | if ( vec < min ) { |
afmiee | 10:e7ab0493ed9f | 684 | min = vec; |
afmiee | 10:e7ab0493ed9f | 685 | } |
afmiee | 10:e7ab0493ed9f | 686 | return( min ); |
afmiee | 10:e7ab0493ed9f | 687 | |
afmiee | 10:e7ab0493ed9f | 688 | } |
afmiee | 10:e7ab0493ed9f | 689 | |
afmiee | 10:e7ab0493ed9f | 690 |