Minor fixes

Dependencies:   LSM9DS1_Library SDFileSystem mbed nrf51_rtc

Fork of LSM303DLHTest by Toshihisa T

Revision:
9:61fcd186ac50
Parent:
8:8f4d7f1c588f
Child:
10:e7ab0493ed9f
diff -r 8f4d7f1c588f -r 61fcd186ac50 main.cpp
--- 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");
+        }
     }
 }