Bender Robotics / Mbed 2 deprecated PLAUCI_full

Dependencies:   FatFileSystemCpp mbed PowerControl USBHostLite

Committer:
jkaderka
Date:
Mon Jun 08 16:29:58 2015 +0000
Revision:
13:d00c8a6a2e8c
Parent:
12:e3cb430ec051
Child:
14:6bd7d1fff6af
gyro data reduced to short

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