posilani dat

Dependencies:   FatFileSystemCpp mbed PowerControl USBHostLite

Revision:
2:f623d1815dc4
Parent:
1:3ec5f7df2410
Child:
4:030c7726c7dc
--- a/main.cpp	Fri Mar 13 19:56:57 2015 +0000
+++ b/main.cpp	Fri Mar 13 21:36:33 2015 +0000
@@ -6,6 +6,7 @@
 #include "SDCard.h"
 #include "L3GD20.h"
 #include "adc.h"
+#include "utils.h"
 #include "RF.h"
 #include <stdio.h>
 
@@ -13,6 +14,7 @@
 #define PERIOD              0.01                            // Setting the period of measuring, 0.01 menas 100 times per second
 #define SIZE                1000                            // Setting number of instance in array - for saving to SD card
 
+
 #define SAVING_START 'S'
 #define SAVING_STOP 'E'
 #define TRANSFER_START 'T'
@@ -51,7 +53,7 @@
 DigitalOut led_working(LED3); 
 DigitalOut led_saving(LED4); 
 
-static volatile uint64_t absolute = 1;                         // Variable for numbering saved data
+static volatile uint64_t absolute = 0;                         // Variable for numbering saved data
 volatile int relative = 0;
 volatile short swimmer_id = 0;
 
@@ -105,7 +107,9 @@
  */
 void measuring(void)
 {
-
+    char buffer[BUFFER_SIZE];
+    int pos = 0;
+    
     // At the beginning, global variable i is set to 1
     // Accelerometr
     // i is total order variable
@@ -155,16 +159,23 @@
 
     if ( absolute % SIZE == 0 ) {
         led_saving = !led_saving;
-        FILE *fp = fopen(fname, "a");
+        FILE *fp = fopen(fname, "ab");
         if (fp == NULL) {
             printf("\nUnable to append data to file %s\r\n", fname);
             return;
         }
 
         for (int k = 0; k < SIZE; k++) {
-            fprintf(fp, "%d ",absolute-SIZE+k);
-            fprintf(fp, "%d %d %d ",acc_x[k], acc_y[k], acc_z[k]);
-            fprintf(fp, "%f %f %f\n",gyro_x[k],gyro_y[k],gyro_z[k]);
+            pos = absolute-SIZE+k;
+            toBytes(buffer, &pos, sizeof(int));
+            toBytes(buffer+sizeof(int), &acc_x[k], sizeof(int));
+            toBytes(buffer+sizeof(int)*2, &acc_y[k], sizeof(int));
+            toBytes(buffer+sizeof(int)*3, &acc_z[k], sizeof(int));
+            toBytes(buffer+sizeof(int)*4, &gyro_x[k], sizeof(float));
+            toBytes(buffer+sizeof(int)*4+sizeof(float), &gyro_y[k], sizeof(float));
+            toBytes(buffer+sizeof(int)*4+sizeof(float)*2, &gyro_z[k], sizeof(float));
+            
+            fwrite(buffer, 1, BUFFER_SIZE, fp); 
         }
         fclose(fp);  
         relative = 0;                     
@@ -214,18 +225,14 @@
         case SAVING_START:
             leds_off();
             
-            fp = fopen(fname, "w");
+            fp = fopen(fname, "wb");
             if(fp == NULL) {
                 leds_error();
                 printf("Unable to open file %s for writing\r\n", fname);
                 break;
             }
-
-            fprintf(fp, "NEW Data from nRF\n");
-            fprintf(fp, "i Acc_x Acc_y Acc_z Gyro_x Gyro_y Gyro_z\n");
-            fclose(fp);
-                              
-            absolute = 1;
+                       
+            absolute = 0;
             relative = 0;     
             //run saving function            
             Saving_Ticker.attach(&measuring, PERIOD);
@@ -248,13 +255,20 @@
                 break;
             }
             //append data left in buffers
-            int base = (absolute - (absolute%SIZE) < 0) ? 0 : absolute - (absolute%SIZE);
+            int base = ((absolute - (absolute%SIZE)) < 0) ? 0 : absolute - (absolute%SIZE);
             for (int k = 0; k < relative; k++) {
-                fprintf(fp, "%d ", base+k);
-                fprintf(fp, "%d %d %d ",acc_x[k], acc_y[k], acc_z[k]);
-                fprintf(fp, "%f %f %f\n",gyro_x[k],gyro_y[k],gyro_z[k]);
+                char buffer[BUFFER_SIZE];
+                int pos = base+k;
+                toBytes(buffer, &pos, sizeof(int));
+                toBytes(buffer+sizeof(int), &acc_x[k], sizeof(int));
+                toBytes(buffer+sizeof(int)*2, &acc_y[k], sizeof(int));
+                toBytes(buffer+sizeof(int)*3, &acc_z[k], sizeof(int));
+                toBytes(buffer+sizeof(int)*4, &gyro_x[k], sizeof(float));
+                toBytes(buffer+sizeof(int)*4+sizeof(float), &gyro_y[k], sizeof(float));
+                toBytes(buffer+sizeof(int)*4+sizeof(float)*2, &gyro_z[k], sizeof(float));
+            
+                fwrite(buffer, 1, BUFFER_SIZE, fp); 
             }
-            fprintf(fp, "End of DATA\n");
             fclose(fp);
             
             //and finally, move to the next swimmer id