Minor fixes

Dependencies:   LSM9DS1_Library SDFileSystem mbed nrf51_rtc

Fork of LSM303DLHTest by Toshihisa T

Committer:
afmiee
Date:
Thu Jul 21 20:35:36 2016 +0000
Revision:
9:61fcd186ac50
Parent:
8:8f4d7f1c588f
Child:
10:e7ab0493ed9f
Starts and stops automatically with the gyroscope interrupt and the inactivity interrupt. Creating the files takes too long. Will be fixed by creating temporary files and then renaming them.

Who changed what in which revision?

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