posilani dat
Dependencies: FatFileSystemCpp mbed PowerControl USBHostLite
Diff: main.cpp
- 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