![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Minor fixes
Dependencies: LSM9DS1_Library SDFileSystem mbed nrf51_rtc
Fork of LSM303DLHTest by
Diff: main.cpp
- Revision:
- 9:61fcd186ac50
- Parent:
- 8:8f4d7f1c588f
- Child:
- 10:e7ab0493ed9f
--- a/main.cpp Wed Jul 20 21:39:19 2016 +0000 +++ b/main.cpp Thu Jul 21 20:35:36 2016 +0000 @@ -9,6 +9,7 @@ #include "nrf51_rtc.h" #define M_PI 3.14158 +//#define DEBUG 1 // Create objects Serial debug(USBTX,USBRX); @@ -22,12 +23,14 @@ Ticker flipper; // Assign interrupts to switches -InterruptIn btn1(p17); // Start sampling -InterruptIn btn2(p18); // Stop sampoling +InterruptIn int1(p12); // Start sampling +InterruptIn int2(p13); // Stop sampoling // LED definitions DigitalOut led1(LED1); DigitalOut led2(LED2); +DigitalOut dbg1(p16); +DigitalOut dbg2(p17); // Global variables int start = 0; @@ -39,6 +42,7 @@ { start = 1; stop = 0; + dbg2 = 1; } // Generated when button 1 is pressed on rising edge STOP @@ -46,6 +50,7 @@ { stop = 1; start = 0; + dbg2 = 0; } void parp( int times ) @@ -101,11 +106,10 @@ int i; debug.printf("\n\r"); - //2CreadBytes( 0xD6, 0x04, (uint8_t *)dest, 0x34 ); - - + I2CreadBytes( 0xD6, 0x04, (uint8_t *)dest, 0x34 ); + for( i = 0; i < 0x34; i++ ) { - I2CreadByte(0xD6, i + 0x04); + //I2CreadByte(0xD6, i + 0x04); switch( i + 0x04 ) { case 0x04: debug.printf("ACT_THS 0x04 %02x\n\r", dest[i]); @@ -261,12 +265,74 @@ debug.printf("Register Not Valid 0x%02x\n\r"); break; } - } - - } +//*********************************************************** +// file_rename: renames a file (via copy & delete). +// Moves data instead of adjusting the file name in the +// file directory. Checks to insure the file was renamed. +// Returns -1 = error; 0 = success +//*********************************************************** +int file_rename(const char *oldfname, const char *newfname) { + int retval = 0; + int ch; + + FILE *fpold = fopen(oldfname, "r"); // src file + FILE *fpnew = fopen(newfname, "w"); // dest file + + while (1) { // Copy src to dest + ch = fgetc(fpold); // until src EOF read. + if (ch == EOF) break; + fputc(ch, fpnew); + } + + fclose(fpnew); + fclose(fpold); + + fpnew = fopen(newfname, "r"); // Reopen dest to insure + if(fpnew == NULL) { // that it was created. + retval = (-1); // Return Error. + } + else { + fclose(fpnew); + remove(oldfname); // Remove original file. + retval = (0); // Return Success. + } + return (retval); +} + +//*********************************************************** +// file_copy: Copies a file +// Checks to insure destination file was created. +// Returns -1 = error; 0 = success +//*********************************************************** +int file_copy (const char *src, const char *dst) { + int retval = 0; + int ch; + + FILE *fpsrc = fopen(src, "r"); // src file + FILE *fpdst = fopen(dst, "w"); // dest file + + while (1) { // Copy src to dest + ch = fgetc(fpsrc); // until src EOF read. + if (ch == EOF) break; + fputc(ch, fpdst); + } + fclose(fpsrc); + fclose(fpdst); + + fpdst = fopen(dst, "r"); // Reopen dest to insure + if(fpdst == NULL) { // that it was created. + retval = (-1); // Return error. + } + else { + fclose(fpdst); + retval = (0); // Return success. + } + return (retval); +} + int main() { @@ -280,28 +346,40 @@ FILE *fpA; FILE *fpG; FILE *fpM; + FILE *test; + // debug pins + dbg1 = 0; + dbg2 = 0; // Attach functions to interrupts - btn1.rise(&start_smpl); - btn2.rise(&stop_smpl); flipper.attach(&flip, 1.0); // the address of the function to be attached (flip) and the interval (2 seconds) // Enable serial port debug.format(8,Serial::None,1); debug.baud(115200); - debug.printf("LSM303DLH Test\x0d\x0a"); +#ifdef DEBUG + debug.printf("LSM9DS1 Test\x0d\x0a"); +#endif // Initialize 9DOF //lol.begin(); if (!lol.begin()) { debug.printf("Failed to communicate with LSM9DS1.\n"); + wait(0.5); + while(1) { + led1 = !led1; + wait(0.5); + } + } else { + debug.printf("Communication with the LSM9DS1 successfully\n\r", filename); } + lol.calibrate(); - lol.configInt(XG_INT1, INT_DRDY_XL, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT1_CTRL (0x0C) + CTRL_REG8 (0x22) - lol.configInt(XG_INT2, INT_DRDY_G, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT2_CTRL (0x0D) + CTRL_REG8 (0x22) + lol.configInt(XG_INT1, INT1_IG_G, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT1_CTRL (0x0C) + CTRL_REG8 (0x22) + lol.configInt(XG_INT2, INT2_INACT, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT2_CTRL (0x0D) + CTRL_REG8 (0x22) - lol.configAccelInt(YHIE_XL|XHIE_XL, false); // INT_GEN_CFG_XL (06h) + lol.configAccelInt(ZHIE_XL|YHIE_XL|XHIE_XL, false); // INT_GEN_CFG_XL (06h) lol.configAccelThs((uint8_t)0x25, X_AXIS, (uint8_t)0x00, false); // INT_GEN_THS_X_XL (07h) lol.configAccelThs((uint8_t)0x25, Y_AXIS, (uint8_t)0x00, false); // INT_GEN_THS_Y_XL (08h) lol.configAccelThs((uint8_t)0x25, Z_AXIS, (uint8_t)0x00, false); // INT_GEN_THS_Z_XL (09h) @@ -311,7 +389,9 @@ lol.configGyroThs((int16_t )0x300, Y_AXIS, (uint8_t) 0x02, false); // INT_GEN_THS_Y_G (33h - 34h) lol.configGyroThs((int16_t )0x300, Z_AXIS, (uint8_t) 0x02, false); // INT_GEN_THS_Z_G (35h - 36h) + lol.configInactivity(0x0F, 0x20, true); +#ifdef DEBUG debug.printf( "\n\r"); debug.printf( "GyroIntSrc (14h) %02x\n\r", lol.getGyroIntSrc()); // INT_GEN_SRC_G (14h) debug.printf( "AccelIntSrc(26h) %02x\n\r", lol.getAccelIntSrc()); // INT_GEN_SRC_XL (26h) @@ -340,37 +420,57 @@ debug.printf( "INT_GEN_THS_ZL_G (36h) %02x\n\r", I2CreadByte(0xD6, 0x36)); debug.printf( "INT_GEN_DUR_G (37h) %02x\n\r", I2CreadByte(0xD6, 0x37)); - // Dump all registers +// Dump all registers DumpAccelGyroRegs(); // // Initialize current time if needed // printf("Enter current date and time:\n"); // printf("YYYY MM DD HH MM SS[enter]\n"); // scanf("%d %d %d %d %d %d", &t.tm_year, &t.tm_mon, &t.tm_mday // , &t.tm_hour, &t.tm_min, &t.tm_sec); - - // adjust for tm structure required values +#endif +// adjust for tm structure required values t.tm_year = t.tm_year - 1900; t.tm_mon = t.tm_mon - 1; - // set the time +// set the time rtc.set_time(mktime(&t)); + int1.fall(&start_smpl); + int2.fall(&stop_smpl); while(1) { - debug.printf("Press Button 1 to Start sampling\n\r"); - debug.printf("Press Button 2 to Stop sampling\n\r"); + //debug.printf("Press Button 1 to Start sampling\n\r"); + //debug.printf("Press Button 2 to Stop sampling\n\r"); // Check for button 1 pressed while(!start) { led1 = 1; } + dbg2 = 0; // Start sampling //led1 = 0; parp(5); +//#ifdef DEBUG debug.printf("Started sampling\n\r"); // Get the time and create a file with the number of seconds in hex appended +//#endif seconds = rtc.time(); + dbg1 = 1; sprintf(secs_str, "%s", ctime(&seconds)); - printf("Started at: %s\n\r", secs_str ); + printf("\n\rStarted at: %s\n\r\n\r", secs_str ); sprintf(filename, "/sd/latch9DOFA_%08x.csv",seconds); + + test = fopen("/sd/test_original.csv", "w"); + // Verify that file can be created + if ( test == NULL ) { + debug.printf("Cannot create file test_original.csv\n\r"); + wait(0.5); + while(1) { + led1 = !led1; + wait(0.5); + } + } else + debug.printf("File test_original.csv created successfully\n\r", filename); + + fpA = fopen(filename, "w"); // Verify that file can be created if ( fpA == NULL ) { @@ -408,7 +508,7 @@ } } else debug.printf("File %s created successfully\n\r", filename); - + dbg1 = 0; // Sample until button 2 is pressed while(!stop) { //led1 = 0; @@ -416,32 +516,49 @@ //I2CreadByte(0xD6, 0x27); if (lol.accelAvailable()) { lol.readAccel(); +#ifdef DEBUG debug.printf("ACC %d, %d, %d\n\r", lol.ax, lol.ay, lol.az); +#endif fprintf(fpA, "%d, %d, %d\n\r", lol.ax, lol.ay, lol.az); } //lol.getMagIntSrc(); // INT_SRC_M (31h) //I2CreadByte(0xD6, 0x27); if ( lol.magAvailable(X_AXIS) && lol.magAvailable(X_AXIS) && lol.magAvailable(X_AXIS)) { lol.readMag(); +#ifdef DEBUG debug.printf("MAG %d, %d, %d\n\r", lol.mx, lol.my, lol.mz); +#endif fprintf(fpM, "%d, %d, %d\n\r", lol.mx, lol.my, lol.mz); } //lol.getGyroIntSrc(); // INT_GEN_SRC_G (14h) if ( lol.gyroAvailable()) { lol.readGyro(); +#ifdef DEBUG debug.printf("GYR %d, %d, %d\n\r", lol.gx, lol.gy, lol.gz); +#endif fprintf(fpG, "%d, %d, %d\n\r", lol.gx, lol.gy, lol.gz); } //wait(0.1); } // Stop Sampling and close file parp(10); - led1 = 1; +//#ifdef DEBUG debug.printf("Stopped sampling\n\r"); - debug.printf("Results stored in %s\n\r", filename); + //#endif fclose(fpA); fclose(fpM); fclose(fpG); + fclose(test); + + int ret; + + ret = file_rename("/sd/test_original.csv","/sd/test_renamed.csv"); + + if(ret == 0) { + debug.printf("File renamed successfully"); + } else { + debug.printf("Error: unable to rename the file"); + } } }