Bender Robotics / Mbed 2 deprecated PLAUCI_full

Dependencies:   FatFileSystemCpp mbed PowerControl USBHostLite

Committer:
jkaderka
Date:
Wed Apr 29 08:01:37 2015 +0000
Revision:
9:8839ecc02e0e
Parent:
8:ae5319de2c33
Child:
10:fdf9ca254549
Comments added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jkaderka 9:8839ecc02e0e 1 /*
jkaderka 9:8839ecc02e0e 2 * Connects to wifi and listen on ip given by dhcp on port 2000
jkaderka 9:8839ecc02e0e 3 *
jkaderka 9:8839ecc02e0e 4 * Commands are send in for #X where X is from {S,E,T,R}, all commands are
jkaderka 9:8839ecc02e0e 5 * confirmed by mbed by sending #A
jkaderka 9:8839ecc02e0e 6 *
jkaderka 9:8839ecc02e0e 7 * Use #S to start saving data, #E to stop saving. This can be done repeatedly,
jkaderka 9:8839ecc02e0e 8 * mbed saves the data into separated files and generates new swimmer id
jkaderka 9:8839ecc02e0e 9 * At the end, use #T to start data transfer, the format of transmitted data is:
jkaderka 9:8839ecc02e0e 10 *
jkaderka 9:8839ecc02e0e 11 * Header for each swimmer:
jkaderka 9:8839ecc02e0e 12 * (int) -1 (int) -1 (int) swimmer_id
jkaderka 9:8839ecc02e0e 13 * Data itself
jkaderka 9:8839ecc02e0e 14 * (char) 0xAA (int) count 3*(short) acc 3*(float) gyro
jkaderka 9:8839ecc02e0e 15 * End of swimmer block
jkaderka 9:8839ecc02e0e 16 * (int) -1 (int) -1
jkaderka 9:8839ecc02e0e 17 *
jkaderka 9:8839ecc02e0e 18 * where count is number starting on 0, incremented on every packet
jkaderka 9:8839ecc02e0e 19 * 0xAA is a sync byte used to avoid confusion when some bytes are lost during
jkaderka 9:8839ecc02e0e 20 * transmission (UART on faster reates seems to be unstable)
jkaderka 9:8839ecc02e0e 21 */
jkaderka 0:16fd37cf4a7c 22 #include "mbed.h"
jkaderka 0:16fd37cf4a7c 23 #include "L3GD20_init.h"
jkaderka 0:16fd37cf4a7c 24 #include "math.h"
jkaderka 0:16fd37cf4a7c 25 #include "stdint.h"
jkaderka 0:16fd37cf4a7c 26 #include "DirHandle.h"
jkaderka 0:16fd37cf4a7c 27 #include "SDCard.h"
jkaderka 0:16fd37cf4a7c 28 #include "L3GD20.h"
jkaderka 0:16fd37cf4a7c 29 #include "adc.h"
jkaderka 2:f623d1815dc4 30 #include "utils.h"
jkaderka 4:030c7726c7dc 31 #include "wifi.h"
jkaderka 0:16fd37cf4a7c 32 #include <stdio.h>
jkaderka 0:16fd37cf4a7c 33
jkaderka 9:8839ecc02e0e 34 /* credentials for wifi */
jkaderka 8:ae5319de2c33 35 #define SSID "BRNET"
jkaderka 8:ae5319de2c33 36 #define PASS "Fuhu27che9"
jkaderka 4:030c7726c7dc 37 #define SECURITY WPA
jkaderka 9:8839ecc02e0e 38
jkaderka 9:8839ecc02e0e 39
jkaderka 0:16fd37cf4a7c 40 #define SAMPLE_RATE 750000 // S mple rate for ADC conversion
jkaderka 0:16fd37cf4a7c 41 #define PERIOD 0.01 // Setting the period of measuring, 0.01 menas 100 times per second
jkaderka 1:3ec5f7df2410 42 #define SIZE 1000 // Setting number of instance in array - for saving to SD card
jkaderka 2:f623d1815dc4 43
jkaderka 9:8839ecc02e0e 44 /* Command the mbed understands */
jkaderka 1:3ec5f7df2410 45 #define SAVING_START 'S'
jkaderka 1:3ec5f7df2410 46 #define SAVING_STOP 'E'
jkaderka 1:3ec5f7df2410 47 #define TRANSFER_START 'T'
jkaderka 1:3ec5f7df2410 48 #define CHECK_READY 'R' //will be received when checking if device is alive
jkaderka 1:3ec5f7df2410 49
jkaderka 1:3ec5f7df2410 50 #define leds_off() { led_measuring = led_sending = led_working = led_saving = 0; }
jkaderka 1:3ec5f7df2410 51 #define leds_error() { led_measuring = led_sending = led_working = led_saving = 1; }
jkaderka 0:16fd37cf4a7c 52
jkaderka 0:16fd37cf4a7c 53
jkaderka 0:16fd37cf4a7c 54 class Watchdog {
jkaderka 0:16fd37cf4a7c 55 public:
jkaderka 0:16fd37cf4a7c 56 void kick(float s) {
jkaderka 0:16fd37cf4a7c 57 LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK
jkaderka 0:16fd37cf4a7c 58 uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4
jkaderka 0:16fd37cf4a7c 59 LPC_WDT->WDTC = s * (float)clk;
jkaderka 0:16fd37cf4a7c 60 LPC_WDT->WDMOD = 0x3; // Enabled and Reset
jkaderka 0:16fd37cf4a7c 61 kick();
jkaderka 0:16fd37cf4a7c 62 }
jkaderka 0:16fd37cf4a7c 63
jkaderka 0:16fd37cf4a7c 64 void kick() {
jkaderka 0:16fd37cf4a7c 65 LPC_WDT->WDFEED = 0xAA;
jkaderka 0:16fd37cf4a7c 66 LPC_WDT->WDFEED = 0x55;
jkaderka 0:16fd37cf4a7c 67 }
jkaderka 0:16fd37cf4a7c 68 };
jkaderka 0:16fd37cf4a7c 69
jkaderka 0:16fd37cf4a7c 70 Watchdog w;
jkaderka 0:16fd37cf4a7c 71
jkaderka 0:16fd37cf4a7c 72 SDCard Logger(p5, p6, p7, p8, "SDCard"); // Initialise the SD Card to SPI interface
jkaderka 0:16fd37cf4a7c 73 ADC adc(SAMPLE_RATE, 1); // Initialise ADC to maximum SAMPLE_RATE and cclk divide set to 1 originally MMA7361L
jkaderka 8:ae5319de2c33 74 Wifi wifi(p13, p14, p12, p11, SSID, PASS); // Wifly module
jkaderka 0:16fd37cf4a7c 75 Ticker Saving_Ticker; // Tickers for interrupts on measuring
jkaderka 0:16fd37cf4a7c 76 I2C i2c(p28, p27); // NEW function GYRO connection originally L3G4200D
jkaderka 0:16fd37cf4a7c 77
jkaderka 1:3ec5f7df2410 78 DigitalOut led_measuring(LED1);
jkaderka 1:3ec5f7df2410 79 DigitalOut led_sending(LED2);
jkaderka 1:3ec5f7df2410 80 DigitalOut led_working(LED3);
jkaderka 1:3ec5f7df2410 81 DigitalOut led_saving(LED4);
jkaderka 0:16fd37cf4a7c 82
jkaderka 2:f623d1815dc4 83 static volatile uint64_t absolute = 0; // Variable for numbering saved data
jkaderka 1:3ec5f7df2410 84 volatile int relative = 0;
jkaderka 1:3ec5f7df2410 85 volatile short swimmer_id = 0;
jkaderka 0:16fd37cf4a7c 86
jkaderka 1:3ec5f7df2410 87 char fname[40]; // Variable for name of Text file saved on SDCard
jkaderka 0:16fd37cf4a7c 88
jkaderka 5:83f69916e571 89 short int acc_x[SIZE];
jkaderka 5:83f69916e571 90 short int acc_y[SIZE];
jkaderka 5:83f69916e571 91 short int acc_z[SIZE];
jkaderka 0:16fd37cf4a7c 92
jkaderka 0:16fd37cf4a7c 93 float gyro_x[SIZE];
jkaderka 0:16fd37cf4a7c 94 float gyro_y[SIZE];
jkaderka 0:16fd37cf4a7c 95 float gyro_z[SIZE];
jkaderka 0:16fd37cf4a7c 96
jkaderka 0:16fd37cf4a7c 97 char readByte(char address, char reg)
jkaderka 0:16fd37cf4a7c 98 {
jkaderka 0:16fd37cf4a7c 99 char result;
jkaderka 0:16fd37cf4a7c 100 i2c.start();
jkaderka 0:16fd37cf4a7c 101 i2c.write(address); // Slave address with direction=write
jkaderka 0:16fd37cf4a7c 102 i2c.write(reg); // Subaddress (register)
jkaderka 0:16fd37cf4a7c 103 i2c.start(); // Break transmission to change bus direction
jkaderka 0:16fd37cf4a7c 104 i2c.write(address + 1); // Slave address with direction=read [bit0=1]
jkaderka 0:16fd37cf4a7c 105 result = i2c.read(0);
jkaderka 0:16fd37cf4a7c 106 i2c.stop();
jkaderka 0:16fd37cf4a7c 107 return (result);
jkaderka 0:16fd37cf4a7c 108 }
jkaderka 0:16fd37cf4a7c 109
jkaderka 0:16fd37cf4a7c 110 void writeByte(char address, char reg,char value) // Sends 1 byte to an I2C address
jkaderka 0:16fd37cf4a7c 111 {
jkaderka 0:16fd37cf4a7c 112 i2c.start();
jkaderka 0:16fd37cf4a7c 113 i2c.write(address); // Slave address
jkaderka 0:16fd37cf4a7c 114 i2c.write(reg); // Subaddress (register)
jkaderka 0:16fd37cf4a7c 115 i2c.write(value);
jkaderka 0:16fd37cf4a7c 116 i2c.stop();
jkaderka 0:16fd37cf4a7c 117 }
jkaderka 0:16fd37cf4a7c 118
jkaderka 0:16fd37cf4a7c 119 void initSensors (void)
jkaderka 0:16fd37cf4a7c 120 {
jkaderka 0:16fd37cf4a7c 121 //pc.printf("\n L3GD20 init \n");
jkaderka 0:16fd37cf4a7c 122 //pc.printf("Ping L3GD20 (should reply 0xD4): %x \n",readByte(L3GD20_ADDR,gWHO_AM_I));
jkaderka 0:16fd37cf4a7c 123 writeByte(L3GD20_ADDR,gCTRL_REG1,0x0F); // Set ODR to 95Hz, BW to 12.5Hz, enable axes and turn on device
jkaderka 0:16fd37cf4a7c 124 writeByte(L3GD20_ADDR,gCTRL_REG4,0x10); // Full scale selected at 500dps (degrees per second)
jkaderka 0:16fd37cf4a7c 125 //pc.printf("L3GD20 gyro Temp: %x degrees C \n",readByte(L3GD20_ADDR,gOUT_TEMP));
jkaderka 0:16fd37cf4a7c 126
jkaderka 0:16fd37cf4a7c 127 wait(1); // Wait for settings to stabilize
jkaderka 0:16fd37cf4a7c 128 }
jkaderka 0:16fd37cf4a7c 129
jkaderka 0:16fd37cf4a7c 130
jkaderka 1:3ec5f7df2410 131 /*
jkaderka 1:3ec5f7df2410 132 * Periodically called, make measurements
jkaderka 1:3ec5f7df2410 133 * save data into array and then into file
jkaderka 1:3ec5f7df2410 134 */
jkaderka 1:3ec5f7df2410 135 void measuring(void)
jkaderka 0:16fd37cf4a7c 136 {
jkaderka 2:f623d1815dc4 137 char buffer[BUFFER_SIZE];
jkaderka 2:f623d1815dc4 138 int pos = 0;
jkaderka 2:f623d1815dc4 139
jkaderka 1:3ec5f7df2410 140 // At the beginning, global variable i is set to 1
jkaderka 0:16fd37cf4a7c 141 // Accelerometr
jkaderka 0:16fd37cf4a7c 142 // i is total order variable
jkaderka 0:16fd37cf4a7c 143 // j is relative order variable in one measuring step
jkaderka 0:16fd37cf4a7c 144
jkaderka 0:16fd37cf4a7c 145 adc.start(); // Starting ADC conversion
jkaderka 0:16fd37cf4a7c 146 adc.select(p18); // Measure pin 20
jkaderka 1:3ec5f7df2410 147 while(!adc.done(p18))
jkaderka 1:3ec5f7df2410 148 ; // Wait for it to complete
jkaderka 5:83f69916e571 149 acc_x[relative] = (short) adc.read(p18);
jkaderka 0:16fd37cf4a7c 150
jkaderka 0:16fd37cf4a7c 151 adc.start(); // Again .....
jkaderka 0:16fd37cf4a7c 152 adc.select(p19); // Measure pin 20
jkaderka 1:3ec5f7df2410 153 while(!adc.done(p19))
jkaderka 1:3ec5f7df2410 154 ; // Wait for it to complete
jkaderka 5:83f69916e571 155 acc_y[relative] = (short) adc.read(p19);
jkaderka 0:16fd37cf4a7c 156
jkaderka 0:16fd37cf4a7c 157 adc.start();
jkaderka 0:16fd37cf4a7c 158 adc.select(p20); // Measure pin 20
jkaderka 1:3ec5f7df2410 159 while(!adc.done(p20))
jkaderka 1:3ec5f7df2410 160 ; // Wait for it to complete
jkaderka 5:83f69916e571 161 acc_z[relative] = (short) adc.read(p20);
jkaderka 0:16fd37cf4a7c 162
jkaderka 0:16fd37cf4a7c 163 // Gyro
jkaderka 0:16fd37cf4a7c 164 char xL, xH, yL, yH, zL, zH;
jkaderka 0:16fd37cf4a7c 165 int16_t gX, gY, gZ;
jkaderka 0:16fd37cf4a7c 166
jkaderka 0:16fd37cf4a7c 167 xL=readByte(L3GD20_ADDR,gOUT_X_L);
jkaderka 0:16fd37cf4a7c 168 xH=readByte(L3GD20_ADDR,gOUT_X_H);
jkaderka 0:16fd37cf4a7c 169 yL=readByte(L3GD20_ADDR,gOUT_Y_L);
jkaderka 0:16fd37cf4a7c 170 yH=readByte(L3GD20_ADDR,gOUT_Y_H);
jkaderka 0:16fd37cf4a7c 171 zL=readByte(L3GD20_ADDR,gOUT_Z_L);
jkaderka 0:16fd37cf4a7c 172 zH=readByte(L3GD20_ADDR,gOUT_Z_H);
jkaderka 0:16fd37cf4a7c 173
jkaderka 0:16fd37cf4a7c 174 gX = (xH<<8) | (xL); // 16-bit 2's complement data
jkaderka 0:16fd37cf4a7c 175 gY = (yH<<8) | (yL);
jkaderka 0:16fd37cf4a7c 176 gZ = (zH<<8) | (zL);
jkaderka 0:16fd37cf4a7c 177
jkaderka 1:3ec5f7df2410 178 gyro_x[relative] = (float) gX * (17.5/1000.0); // At 500dps sensitivity, L3GD20 returns 17.5/1000 dps per digit
jkaderka 1:3ec5f7df2410 179 gyro_y[relative] = (float) gY * (17.5/1000.0);
jkaderka 1:3ec5f7df2410 180 gyro_z[relative] = (float) gZ * (17.5/1000.0); //FIXME because of printing values
jkaderka 0:16fd37cf4a7c 181
jkaderka 1:3ec5f7df2410 182 absolute++;
jkaderka 1:3ec5f7df2410 183 relative++;
jkaderka 1:3ec5f7df2410 184 if ( absolute % (SIZE/20) == 0)
jkaderka 1:3ec5f7df2410 185 led_working = !led_working;
jkaderka 0:16fd37cf4a7c 186
jkaderka 1:3ec5f7df2410 187 if ( absolute % SIZE == 0 ) {
jkaderka 1:3ec5f7df2410 188 led_saving = !led_saving;
jkaderka 2:f623d1815dc4 189 FILE *fp = fopen(fname, "ab");
jkaderka 1:3ec5f7df2410 190 if (fp == NULL) {
jkaderka 1:3ec5f7df2410 191 printf("\nUnable to append data to file %s\r\n", fname);
jkaderka 1:3ec5f7df2410 192 return;
jkaderka 1:3ec5f7df2410 193 }
jkaderka 1:3ec5f7df2410 194
jkaderka 1:3ec5f7df2410 195 for (int k = 0; k < SIZE; k++) {
jkaderka 2:f623d1815dc4 196 pos = absolute-SIZE+k;
jkaderka 2:f623d1815dc4 197 toBytes(buffer, &pos, sizeof(int));
jkaderka 5:83f69916e571 198 toBytes(buffer+sizeof(int), &acc_x[k], sizeof(short int));
jkaderka 5:83f69916e571 199 toBytes(buffer+sizeof(int) + sizeof(short), &acc_y[k], sizeof(short int));
jkaderka 5:83f69916e571 200 toBytes(buffer+sizeof(int) + sizeof(short)*2, &acc_z[k], sizeof(short int));
jkaderka 5:83f69916e571 201 toBytes(buffer+sizeof(int) + sizeof(short)*3, &gyro_x[k], sizeof(float));
jkaderka 5:83f69916e571 202 toBytes(buffer+sizeof(int) + sizeof(short)*3 + sizeof(float), &gyro_y[k], sizeof(float));
jkaderka 5:83f69916e571 203 toBytes(buffer+sizeof(int) + sizeof(short)*3 + sizeof(float)*2, &gyro_z[k], sizeof(float));
jkaderka 2:f623d1815dc4 204
jkaderka 2:f623d1815dc4 205 fwrite(buffer, 1, BUFFER_SIZE, fp);
jkaderka 0:16fd37cf4a7c 206 }
jkaderka 0:16fd37cf4a7c 207 fclose(fp);
jkaderka 1:3ec5f7df2410 208 relative = 0;
jkaderka 0:16fd37cf4a7c 209 }
jkaderka 0:16fd37cf4a7c 210 }
jkaderka 1:3ec5f7df2410 211
jkaderka 1:3ec5f7df2410 212 /*
jkaderka 1:3ec5f7df2410 213 * Read data from sdcard and send them to pc
jkaderka 1:3ec5f7df2410 214 */
jkaderka 1:3ec5f7df2410 215 void get_data(void)
jkaderka 1:3ec5f7df2410 216 {
jkaderka 1:3ec5f7df2410 217 int i;
jkaderka 1:3ec5f7df2410 218 char name[20];
jkaderka 1:3ec5f7df2410 219
jkaderka 1:3ec5f7df2410 220 for (i = 0; i < swimmer_id; i++) {
jkaderka 1:3ec5f7df2410 221 sprintf(name, "/SDCard/swimmer%d.txt", i);
jkaderka 4:030c7726c7dc 222 if (wifi.sendFile(name, i)) {
jkaderka 1:3ec5f7df2410 223 leds_error();
jkaderka 1:3ec5f7df2410 224 printf("\nUnable to send data\n\r");
jkaderka 1:3ec5f7df2410 225 }
jkaderka 0:16fd37cf4a7c 226 }
jkaderka 0:16fd37cf4a7c 227 }
jkaderka 0:16fd37cf4a7c 228
jkaderka 0:16fd37cf4a7c 229 int main()
jkaderka 0:16fd37cf4a7c 230 {
jkaderka 1:3ec5f7df2410 231 FILE *fp;
jkaderka 1:3ec5f7df2410 232
jkaderka 1:3ec5f7df2410 233 printf("Boot...\r\n");
jkaderka 0:16fd37cf4a7c 234 initSensors(); // INIT GYRO
jkaderka 0:16fd37cf4a7c 235 Logger.SelectCRCMode(1); // I dont know / it was in example code
jkaderka 0:16fd37cf4a7c 236
jkaderka 0:16fd37cf4a7c 237 adc.setup(p18,1); // Set up ADC on pin 18
jkaderka 0:16fd37cf4a7c 238 adc.setup(p19,1); // Set up ADC on pin 19
jkaderka 0:16fd37cf4a7c 239 adc.setup(p20,1); // Set up ADC on pin 20
jkaderka 0:16fd37cf4a7c 240
jkaderka 1:3ec5f7df2410 241 sprintf(fname, "/SDCard/swimmer%d.txt", swimmer_id);
jkaderka 4:030c7726c7dc 242 //remove(fname); //remove file to avoid reading old data
jkaderka 1:3ec5f7df2410 243
jkaderka 1:3ec5f7df2410 244 leds_off();
jkaderka 1:3ec5f7df2410 245 printf("Ready...\n\r");
jkaderka 1:3ec5f7df2410 246
jkaderka 1:3ec5f7df2410 247 while (1) {
jkaderka 4:030c7726c7dc 248 char cmd = wifi.getCmd();
jkaderka 1:3ec5f7df2410 249
jkaderka 1:3ec5f7df2410 250 switch (cmd) {
jkaderka 1:3ec5f7df2410 251 /* start measuring data periodically and save them info file */
jkaderka 1:3ec5f7df2410 252 case SAVING_START:
jkaderka 1:3ec5f7df2410 253 leds_off();
jkaderka 1:3ec5f7df2410 254
jkaderka 2:f623d1815dc4 255 fp = fopen(fname, "wb");
jkaderka 1:3ec5f7df2410 256 if(fp == NULL) {
jkaderka 1:3ec5f7df2410 257 leds_error();
jkaderka 1:3ec5f7df2410 258 printf("Unable to open file %s for writing\r\n", fname);
jkaderka 1:3ec5f7df2410 259 break;
jkaderka 1:3ec5f7df2410 260 }
jkaderka 2:f623d1815dc4 261
jkaderka 2:f623d1815dc4 262 absolute = 0;
jkaderka 1:3ec5f7df2410 263 relative = 0;
jkaderka 1:3ec5f7df2410 264 //run saving function
jkaderka 1:3ec5f7df2410 265 Saving_Ticker.attach(&measuring, PERIOD);
jkaderka 1:3ec5f7df2410 266
jkaderka 1:3ec5f7df2410 267 printf("Saving...\n\r");
jkaderka 1:3ec5f7df2410 268 led_measuring = 1;
jkaderka 1:3ec5f7df2410 269 break;
jkaderka 0:16fd37cf4a7c 270
jkaderka 1:3ec5f7df2410 271 /* stop saving data */
jkaderka 1:3ec5f7df2410 272 case SAVING_STOP:
jkaderka 1:3ec5f7df2410 273 leds_off();
jkaderka 1:3ec5f7df2410 274 //stop saving
jkaderka 1:3ec5f7df2410 275 Saving_Ticker.detach();
jkaderka 1:3ec5f7df2410 276
jkaderka 1:3ec5f7df2410 277 //append End of file text
jkaderka 1:3ec5f7df2410 278 fp = fopen(fname, "a");
jkaderka 1:3ec5f7df2410 279 if(fp == NULL) {
jkaderka 1:3ec5f7df2410 280 leds_error();
jkaderka 1:3ec5f7df2410 281 printf("Unable to open file %s before sending data\n\r", fname);
jkaderka 1:3ec5f7df2410 282 break;
jkaderka 1:3ec5f7df2410 283 }
jkaderka 1:3ec5f7df2410 284 //append data left in buffers
jkaderka 2:f623d1815dc4 285 int base = ((absolute - (absolute%SIZE)) < 0) ? 0 : absolute - (absolute%SIZE);
jkaderka 1:3ec5f7df2410 286 for (int k = 0; k < relative; k++) {
jkaderka 2:f623d1815dc4 287 char buffer[BUFFER_SIZE];
jkaderka 2:f623d1815dc4 288 int pos = base+k;
jkaderka 2:f623d1815dc4 289 toBytes(buffer, &pos, sizeof(int));
jkaderka 5:83f69916e571 290 toBytes(buffer, &pos, sizeof(int));
jkaderka 5:83f69916e571 291 toBytes(buffer+sizeof(int), &acc_x[k], sizeof(short int));
jkaderka 5:83f69916e571 292 toBytes(buffer+sizeof(int) + sizeof(short), &acc_y[k], sizeof(short int));
jkaderka 5:83f69916e571 293 toBytes(buffer+sizeof(int) + sizeof(short)*2, &acc_z[k], sizeof(short int));
jkaderka 5:83f69916e571 294 toBytes(buffer+sizeof(int) + sizeof(short)*3, &gyro_x[k], sizeof(float));
jkaderka 5:83f69916e571 295 toBytes(buffer+sizeof(int) + sizeof(short)*3 + sizeof(float), &gyro_y[k], sizeof(float));
jkaderka 5:83f69916e571 296 toBytes(buffer+sizeof(int) + sizeof(short)*3 + sizeof(float)*2, &gyro_z[k], sizeof(float));
jkaderka 2:f623d1815dc4 297
jkaderka 2:f623d1815dc4 298 fwrite(buffer, 1, BUFFER_SIZE, fp);
jkaderka 1:3ec5f7df2410 299 }
jkaderka 1:3ec5f7df2410 300 fclose(fp);
jkaderka 0:16fd37cf4a7c 301
jkaderka 1:3ec5f7df2410 302 //and finally, move to the next swimmer id
jkaderka 1:3ec5f7df2410 303 swimmer_id++;
jkaderka 1:3ec5f7df2410 304 sprintf(fname, "/SDCard/swimmer%d.txt", swimmer_id);
jkaderka 1:3ec5f7df2410 305 remove(fname); //remove file to avoid reading old data
jkaderka 1:3ec5f7df2410 306 printf("Stopped...\n\r");
jkaderka 0:16fd37cf4a7c 307 break;
jkaderka 1:3ec5f7df2410 308
jkaderka 1:3ec5f7df2410 309 /* send all data */
jkaderka 1:3ec5f7df2410 310 case TRANSFER_START:
jkaderka 1:3ec5f7df2410 311 leds_off();
jkaderka 1:3ec5f7df2410 312 led_sending = 1;
jkaderka 1:3ec5f7df2410 313 printf("Sending data...\n\r");
jkaderka 1:3ec5f7df2410 314 get_data();
jkaderka 1:3ec5f7df2410 315
jkaderka 1:3ec5f7df2410 316 leds_off();
jkaderka 1:3ec5f7df2410 317 break;
jkaderka 1:3ec5f7df2410 318
jkaderka 1:3ec5f7df2410 319 case CHECK_READY:
jkaderka 1:3ec5f7df2410 320 break;
jkaderka 1:3ec5f7df2410 321
jkaderka 0:16fd37cf4a7c 322 default :
jkaderka 1:3ec5f7df2410 323 leds_error();
jkaderka 1:3ec5f7df2410 324 printf("\nCommand %c is unknown!\n\r", cmd);
jkaderka 1:3ec5f7df2410 325 break;
jkaderka 0:16fd37cf4a7c 326 }
jkaderka 1:3ec5f7df2410 327 //end of while(1)
jkaderka 0:16fd37cf4a7c 328 }
jkaderka 0:16fd37cf4a7c 329 }