Dependencies:   FreescaleIAP MMA8491Q_PG mbed

Fork of LELEC_2811_Accelerometer by LELEC2811 - I&S

Committer:
ATCuriosity
Date:
Fri Dec 01 10:30:27 2017 +0000
Revision:
5:79b8cd191fa8
Parent:
4:2de56fc46abb
Child:
6:4ea2ba88338f
Works !!! (except mvt detection which always return SmashShot); Now need to add correct weights and biaises.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ATCuriosity 4:2de56fc46abb 1 /*
ATCuriosity 4:2de56fc46abb 2 * LELEC 2811 - BadmintonLogger - Group 5
ATCuriosity 4:2de56fc46abb 3 */
ATCuriosity 4:2de56fc46abb 4
Salamandre 0:a18d6e69c993 5 #include "mbed.h"
Salamandre 0:a18d6e69c993 6 #include "FreescaleIAP.h" // Library for Flash Access
ATCuriosity 2:f146ae6546b5 7 #include "MMA8491Q_PG.h" // Accelerometer
ATCuriosity 4:2de56fc46abb 8 #include <cmath>
Salamandre 0:a18d6e69c993 9
Salamandre 0:a18d6e69c993 10 #define MMA8491_I2C_ADDRESS (0x55<<1)
ATCuriosity 4:2de56fc46abb 11 #define KL25Z_VDD 2.89 // Value of VDD : To be measured on board KL25Z pin P3V3 (calibration)
Salamandre 0:a18d6e69c993 12
Salamandre 0:a18d6e69c993 13 #define LED_ON 0
Salamandre 0:a18d6e69c993 14 #define LED_OFF 1
Salamandre 0:a18d6e69c993 15
ATCuriosity 5:79b8cd191fa8 16 #define OFFSET 10000 // OFFSET & RANGE to map inputs between 0 and 1
ATCuriosity 5:79b8cd191fa8 17 #define RANGE 20000 // RANGE = 2*OFFSET
ATCuriosity 5:79b8cd191fa8 18
ATCuriosity 4:2de56fc46abb 19 #define CONSOLE 0 // print all in console
ATCuriosity 4:2de56fc46abb 20 #define FLASH_MVT 1 // save in flash only mvts
ATCuriosity 4:2de56fc46abb 21 #define FLASH_ALL 2 // save in flash mvtSets
ATCuriosity 4:2de56fc46abb 22
Salamandre 0:a18d6e69c993 23 #define REG_OUT_X_MSB 0x01
Salamandre 0:a18d6e69c993 24 #define REG_OUT_Y_MSB 0x03
Salamandre 0:a18d6e69c993 25 #define REG_OUT_Z_MSB 0x05
ATCuriosity 3:d03eae745223 26
ATCuriosity 4:2de56fc46abb 27 #define SECTOR_SIZE 1024 // Numbers of bits by memory sector
ATCuriosity 4:2de56fc46abb 28 #define RESERVED_SECTOR 32 // 32K reserved for Application Code
ATCuriosity 3:d03eae745223 29
ATCuriosity 5:79b8cd191fa8 30 #define ACQ_TIMER_PERIOD 0.005 // Time between 2 acquisitions (here 5 mSec)
ATCuriosity 5:79b8cd191fa8 31 #define N_PTS 100 // Number of points for each axis used to detect mvt
ATCuriosity 4:2de56fc46abb 32 #define N_MVTS 5 // Number of mvts detected
ATCuriosity 4:2de56fc46abb 33 #define THRESHOLD_MVT 0.5 // threshold to validate a mvt
ATCuriosity 3:d03eae745223 34 #define THRESHOLD_SHOCK 0.5 // threshold to detect shock
Salamandre 0:a18d6e69c993 35
ATCuriosity 3:d03eae745223 36 MMA8491Q my8491(PTE0, PTE1, MMA8491_I2C_ADDRESS); // Setup I2C for MMA8491
Salamandre 0:a18d6e69c993 37
ATCuriosity 3:d03eae745223 38 Serial Host_Comm(USBTX, USBRX); // Set Serial Port
Salamandre 0:a18d6e69c993 39
ATCuriosity 4:2de56fc46abb 40 AnalogIn myPTE20(PTE20); // read Vout_IF
ATCuriosity 4:2de56fc46abb 41 AnalogIn myPTE21(PTE21); // read Vout_FILT
ATCuriosity 4:2de56fc46abb 42 AnalogIn myPTE22(PTE22); // read Vout_GAIN
Salamandre 0:a18d6e69c993 43
ATCuriosity 3:d03eae745223 44 Ticker myTick_Acq; // Periodical timer for Acquisition
ATCuriosity 4:2de56fc46abb 45
ATCuriosity 3:d03eae745223 46 DigitalOut Led_Red(LED1); // Define I/O for LEDs
Salamandre 0:a18d6e69c993 47 DigitalOut Led_Green(LED2);
Salamandre 0:a18d6e69c993 48 DigitalOut Led_Blue(LED3);
ATCuriosity 4:2de56fc46abb 49
Salamandre 0:a18d6e69c993 50 DigitalOut Accel_Enable(PTA13);
Salamandre 0:a18d6e69c993 51
ATCuriosity 4:2de56fc46abb 52 DigitalOut Start_Pulse_Out(PTE4); // Used to enter/exit Acquisition mode
ATCuriosity 4:2de56fc46abb 53 DigitalIn Start_Pulse_In(PTE5); // ShortPin J1_15 and J1_16 to enter in Acq_Mode
Salamandre 0:a18d6e69c993 54
ATCuriosity 3:d03eae745223 55 // --------------------- Structure and Enumeration ---------------------
ATCuriosity 3:d03eae745223 56 struct Data {
ATCuriosity 3:d03eae745223 57 int16_t accX, accY, accZ;
ATCuriosity 4:2de56fc46abb 58 float Vout_IF, Vout_FILT, Vout_GAIN;
ATCuriosity 3:d03eae745223 59 };
ATCuriosity 3:d03eae745223 60
ATCuriosity 5:79b8cd191fa8 61 //enum Mvt { Undefined = 0, Serve, ClearOverhead, DropOverhead, SmashShot, ClearUnderarm, DropUnderarm };
ATCuriosity 5:79b8cd191fa8 62 enum Mvt { Undefined = 0, Serve, ClearOverhead, SmashShot, ClearUnderarm, DropUnderarm };
ATCuriosity 4:2de56fc46abb 63
ATCuriosity 4:2de56fc46abb 64 struct MvtSet {
ATCuriosity 4:2de56fc46abb 65 int16_t inputs [N_PTS*3];
ATCuriosity 4:2de56fc46abb 66 Mvt mvt;
ATCuriosity 3:d03eae745223 67 };
ATCuriosity 3:d03eae745223 68
ATCuriosity 3:d03eae745223 69 // -------------------------- Globale variable --------------------------
ATCuriosity 3:d03eae745223 70 volatile bool bTimer; // 1 means a Timer tick is done
Salamandre 0:a18d6e69c993 71
ATCuriosity 4:2de56fc46abb 72 bool foundError = 0;
ATCuriosity 5:79b8cd191fa8 73 bool flashFull = 0;
ATCuriosity 4:2de56fc46abb 74 int mode = CONSOLE;
ATCuriosity 4:2de56fc46abb 75
ATCuriosity 4:2de56fc46abb 76 /* in flash :
ATCuriosity 4:2de56fc46abb 77 - [ 0x0 ; flash_base_address [ : code
ATCuriosity 5:79b8cd191fa8 78 - [ flash_base_address ; flash_base_address_cmd [ : data
ATCuriosity 5:79b8cd191fa8 79 - flash_base_address_cmd : flash_next_address (int)
ATCuriosity 5:79b8cd191fa8 80 - flash_base_address_cmd+4 : mode (int)
ATCuriosity 5:79b8cd191fa8 81 - flash_base_address_cmd+8 : flashFull (int) */
Salamandre 0:a18d6e69c993 82 uint32_t KL25_Flash_Size;
ATCuriosity 4:2de56fc46abb 83 int flash_base_address = RESERVED_SECTOR * SECTOR_SIZE ; // Store Flash Base Address
ATCuriosity 4:2de56fc46abb 84 int flash_next_address; // next address for saving data in flash
ATCuriosity 4:2de56fc46abb 85 int flash_base_address_cmd; // base address where the parameters are saved
ATCuriosity 5:79b8cd191fa8 86 /*
ATCuriosity 4:2de56fc46abb 87 const float Weights[3*N_PTS*N_MVTS] = {
ATCuriosity 4:2de56fc46abb 88 #include "Weights.txt"
ATCuriosity 4:2de56fc46abb 89 };
ATCuriosity 4:2de56fc46abb 90 const float Biases[N_MVTS] = {
ATCuriosity 4:2de56fc46abb 91 #include "Biases.txt"
ATCuriosity 4:2de56fc46abb 92 };
ATCuriosity 5:79b8cd191fa8 93 */
ATCuriosity 3:d03eae745223 94 // ------------------------ Function Declaration ------------------------
ATCuriosity 3:d03eae745223 95 void Init(void);
ATCuriosity 5:79b8cd191fa8 96 void DisplayFlashInfos(void); // display memory use
ATCuriosity 5:79b8cd191fa8 97 void DisplayInstructions(void); // display available cmds
ATCuriosity 4:2de56fc46abb 98 void Clear_Led(void); // switch off led's
ATCuriosity 4:2de56fc46abb 99 bool Check_Jumper(void); // if J1_15 & J1_16 connected together -> return 1
ATCuriosity 4:2de56fc46abb 100 void Check_Console(void); // detect input from user in console
ATCuriosity 4:2de56fc46abb 101 void myTimer_Acq_Task(void); // called by the timer
ATCuriosity 3:d03eae745223 102
ATCuriosity 4:2de56fc46abb 103 void EraseAllSectors(void); // erase all sectors containing data
ATCuriosity 4:2de56fc46abb 104 void EraseSector(int address); // erase one sector
ATCuriosity 4:2de56fc46abb 105 void UpdateParamFlash(void); // update next_address_flash and mode in flash
ATCuriosity 4:2de56fc46abb 106 void WriteFlash(MvtSet mvtSet); // write only mvt or all set depending on 'all'
ATCuriosity 4:2de56fc46abb 107 void ReadFlash(void); // print memory content in console
ATCuriosity 5:79b8cd191fa8 108 void LineHandler(int16_t *line, int16_t next); // handle display of data set (used in ReadFlash)
Salamandre 0:a18d6e69c993 109
ATCuriosity 4:2de56fc46abb 110 Data ReadData(void); // read data from accelerometer and piezo
ATCuriosity 4:2de56fc46abb 111 void Log(void); // read data, detect shock and movement
ATCuriosity 4:2de56fc46abb 112 void Rotate(int16_t *AccDataLog, int amount, int16_t *inputs); // inputs = AccDataLog rotated of amount
ATCuriosity 5:79b8cd191fa8 113 void PrintSet(MvtSet mvtSet); // display set of data
ATCuriosity 5:79b8cd191fa8 114 void Softmax (float *inputs, float *result); // softmax function (used by neural network)
ATCuriosity 4:2de56fc46abb 115 Mvt SelectMvt(int16_t *inputs); // compute probabilities for each mvt based on the inputs
Salamandre 0:a18d6e69c993 116
ATCuriosity 4:2de56fc46abb 117 // -------------------------------------------------------------------------------------------------------
ATCuriosity 4:2de56fc46abb 118 // -------------------------------------------------------------------------------------------------------
Salamandre 0:a18d6e69c993 119
ATCuriosity 3:d03eae745223 120 // -------------------------------- main --------------------------------
ATCuriosity 3:d03eae745223 121 int main()
ATCuriosity 3:d03eae745223 122 {
ATCuriosity 3:d03eae745223 123 Init ();
ATCuriosity 3:d03eae745223 124
ATCuriosity 4:2de56fc46abb 125 int Count;
Salamandre 0:a18d6e69c993 126
ATCuriosity 4:2de56fc46abb 127 while(!foundError)
Salamandre 0:a18d6e69c993 128 {
ATCuriosity 5:79b8cd191fa8 129 if (Check_Jumper() && !flashFull)
Salamandre 0:a18d6e69c993 130 {
Salamandre 0:a18d6e69c993 131 Clear_Led();
Salamandre 0:a18d6e69c993 132 Count = 5;
Salamandre 0:a18d6e69c993 133 while (Count !=0)
Salamandre 0:a18d6e69c993 134 {
ATCuriosity 3:d03eae745223 135 if (Check_Jumper())
Salamandre 0:a18d6e69c993 136 {
ATCuriosity 5:79b8cd191fa8 137 Led_Green = LED_ON; // Blink to alert user "Enter in Logging mode"
ATCuriosity 4:2de56fc46abb 138 wait_ms(750);
ATCuriosity 5:79b8cd191fa8 139 Led_Green = LED_OFF;
ATCuriosity 4:2de56fc46abb 140 wait_ms(250);
Salamandre 0:a18d6e69c993 141 Count --;
Salamandre 0:a18d6e69c993 142 if (Count == 0)
ATCuriosity 3:d03eae745223 143 Log();
Salamandre 0:a18d6e69c993 144 }
Salamandre 0:a18d6e69c993 145 else
Salamandre 0:a18d6e69c993 146 Count = 0;
ATCuriosity 3:d03eae745223 147 }
Salamandre 0:a18d6e69c993 148 }
ATCuriosity 5:79b8cd191fa8 149 if (flashFull)
ATCuriosity 5:79b8cd191fa8 150 Led_Red = !Led_Red;
ATCuriosity 5:79b8cd191fa8 151 else
ATCuriosity 5:79b8cd191fa8 152 Led_Blue = !Led_Blue;
ATCuriosity 4:2de56fc46abb 153 Check_Console();
ATCuriosity 4:2de56fc46abb 154 wait_ms(100);
Salamandre 0:a18d6e69c993 155 }
ATCuriosity 4:2de56fc46abb 156
ATCuriosity 4:2de56fc46abb 157 Host_Comm.printf("\n\rProgram is exiting due to error...\n\r");
ATCuriosity 4:2de56fc46abb 158 Clear_Led();
ATCuriosity 4:2de56fc46abb 159 Led_Red = LED_ON;
Salamandre 0:a18d6e69c993 160 }
Salamandre 0:a18d6e69c993 161
ATCuriosity 3:d03eae745223 162 // -------------------------------- Init --------------------------------
ATCuriosity 4:2de56fc46abb 163 void Init()
ATCuriosity 3:d03eae745223 164 {
ATCuriosity 3:d03eae745223 165 Start_Pulse_In.mode(PullNone); // Input Pin is programmed as floating
ATCuriosity 4:2de56fc46abb 166 Accel_Enable = 0; // Turn Accel Enable to disabled state
ATCuriosity 3:d03eae745223 167 Clear_Led();
ATCuriosity 3:d03eae745223 168
ATCuriosity 3:d03eae745223 169 myTick_Acq.attach(&myTimer_Acq_Task, ACQ_TIMER_PERIOD); // Timer for acquisition
ATCuriosity 3:d03eae745223 170
ATCuriosity 3:d03eae745223 171 Host_Comm.baud(115200); // Baud rate setting
ATCuriosity 5:79b8cd191fa8 172 Host_Comm.printf("\n\r*****\n\rLELEC2811 - Badminton Logger - Group 5\n\r*****\n\n\r");
ATCuriosity 4:2de56fc46abb 173
ATCuriosity 4:2de56fc46abb 174 KL25_Flash_Size = flash_size(); // Get Size of KL25 Embedded Flash
ATCuriosity 4:2de56fc46abb 175 flash_base_address_cmd = KL25_Flash_Size-SECTOR_SIZE;
ATCuriosity 4:2de56fc46abb 176
ATCuriosity 5:79b8cd191fa8 177 /* TO CHECK SIZE OF PROGRAM IN FLASH :
ATCuriosity 5:79b8cd191fa8 178 int *ptr;
ATCuriosity 5:79b8cd191fa8 179 int n_sectors = KL25_Flash_Size/SECTOR_SIZE;
ATCuriosity 5:79b8cd191fa8 180 Host_Comm.printf("Number of sectors : %d\n\r",n_sectors);
ATCuriosity 5:79b8cd191fa8 181 for (int i = 0; i < n_sectors; i++){
ATCuriosity 5:79b8cd191fa8 182 ptr = (int*) (i*SECTOR_SIZE);
ATCuriosity 5:79b8cd191fa8 183 Host_Comm.printf("Sector %d : %d\n\r",i, ptr[0]);
ATCuriosity 5:79b8cd191fa8 184 }
ATCuriosity 5:79b8cd191fa8 185 */
ATCuriosity 5:79b8cd191fa8 186
ATCuriosity 4:2de56fc46abb 187 int *base_address_ptr = (int*)flash_base_address_cmd;
ATCuriosity 4:2de56fc46abb 188 flash_next_address = base_address_ptr[0];
ATCuriosity 4:2de56fc46abb 189 if (flash_next_address >= flash_base_address_cmd || flash_next_address < flash_base_address)
ATCuriosity 4:2de56fc46abb 190 {
ATCuriosity 5:79b8cd191fa8 191 Host_Comm.printf("First run (or error with previous flash_next_address).\n\r");
ATCuriosity 4:2de56fc46abb 192 EraseAllSectors();
ATCuriosity 4:2de56fc46abb 193 flash_next_address = flash_base_address;
ATCuriosity 4:2de56fc46abb 194 mode = CONSOLE;
ATCuriosity 4:2de56fc46abb 195 UpdateParamFlash();
ATCuriosity 4:2de56fc46abb 196 }
ATCuriosity 4:2de56fc46abb 197 else {
ATCuriosity 4:2de56fc46abb 198 mode = base_address_ptr[1];
ATCuriosity 5:79b8cd191fa8 199 flashFull = base_address_ptr[2];
ATCuriosity 4:2de56fc46abb 200 if (mode != CONSOLE && mode != FLASH_MVT && mode != FLASH_ALL) {
ATCuriosity 4:2de56fc46abb 201 mode = CONSOLE;
ATCuriosity 4:2de56fc46abb 202 UpdateParamFlash();
ATCuriosity 4:2de56fc46abb 203 }
ATCuriosity 4:2de56fc46abb 204 }
ATCuriosity 5:79b8cd191fa8 205 DisplayFlashInfos();
ATCuriosity 4:2de56fc46abb 206
ATCuriosity 4:2de56fc46abb 207 Host_Comm.printf("Initialization done.\n\n\r");
ATCuriosity 5:79b8cd191fa8 208 DisplayInstructions();
ATCuriosity 5:79b8cd191fa8 209 }
ATCuriosity 5:79b8cd191fa8 210
ATCuriosity 5:79b8cd191fa8 211 // -------------------------- DisplayFlashInfos -------------------------
ATCuriosity 5:79b8cd191fa8 212 void DisplayFlashInfos()
ATCuriosity 5:79b8cd191fa8 213 {
ATCuriosity 5:79b8cd191fa8 214 Host_Comm.printf("flash_next_address = %d\n\r",flash_next_address);
ATCuriosity 5:79b8cd191fa8 215 Host_Comm.printf("mode = %d\n\r",mode);
ATCuriosity 5:79b8cd191fa8 216 Host_Comm.printf("Memory used = %f %%\n\r",((float)flash_next_address-flash_base_address)/((float)flash_base_address_cmd-flash_base_address)*100);
ATCuriosity 5:79b8cd191fa8 217 }
ATCuriosity 5:79b8cd191fa8 218
ATCuriosity 5:79b8cd191fa8 219 // ------------------------- DisplayInstructions ------------------------
ATCuriosity 5:79b8cd191fa8 220 void DisplayInstructions()
ATCuriosity 5:79b8cd191fa8 221 {
ATCuriosity 4:2de56fc46abb 222 Host_Comm.printf("When the jumper is removed, use the keyboard :\n\r");
ATCuriosity 5:79b8cd191fa8 223 Host_Comm.printf("- to erase flash : 'E' = erase flash\n\r");
ATCuriosity 5:79b8cd191fa8 224 Host_Comm.printf("- to read flash : 'R' = read flash ; 'S' = stop reading\n\r");
ATCuriosity 5:79b8cd191fa8 225 Host_Comm.printf("- to change mode : 'C' = console mode ; 'M' = write_mvt mode ; 'A' = write_all mode\n\r");
ATCuriosity 5:79b8cd191fa8 226 Host_Comm.printf("!!! If mode change, ReadData() will fail => also press 'E' !!!\n\n\r");
ATCuriosity 3:d03eae745223 227 }
ATCuriosity 3:d03eae745223 228
ATCuriosity 3:d03eae745223 229 // ----------------------------- Clear_Led ------------------------------
ATCuriosity 4:2de56fc46abb 230 void Clear_Led()
Salamandre 0:a18d6e69c993 231 {
Salamandre 0:a18d6e69c993 232 Led_Red = LED_OFF;
Salamandre 0:a18d6e69c993 233 Led_Green = LED_OFF;
ATCuriosity 4:2de56fc46abb 234 Led_Blue = LED_OFF ;
Salamandre 0:a18d6e69c993 235 }
Salamandre 0:a18d6e69c993 236
ATCuriosity 3:d03eae745223 237 // ---------------------------- Check_Jumper ----------------------------
ATCuriosity 3:d03eae745223 238 bool Check_Jumper()
Salamandre 0:a18d6e69c993 239 {
ATCuriosity 4:2de56fc46abb 240 int i;
Salamandre 0:a18d6e69c993 241 for (i = 0 ; i < 2 ; i ++)
Salamandre 0:a18d6e69c993 242 {
ATCuriosity 3:d03eae745223 243 Start_Pulse_Out = 1;
Salamandre 0:a18d6e69c993 244 wait_ms(1);
ATCuriosity 3:d03eae745223 245 if (Start_Pulse_In != 1)
ATCuriosity 3:d03eae745223 246 return 0;
Salamandre 0:a18d6e69c993 247
ATCuriosity 3:d03eae745223 248 Start_Pulse_Out = 0;
Salamandre 0:a18d6e69c993 249 wait_ms(1);
ATCuriosity 3:d03eae745223 250 if (Start_Pulse_In != 0)
ATCuriosity 3:d03eae745223 251 return 0;
Salamandre 0:a18d6e69c993 252 }
ATCuriosity 3:d03eae745223 253 return 1;
Salamandre 0:a18d6e69c993 254 }
Salamandre 0:a18d6e69c993 255
ATCuriosity 4:2de56fc46abb 256 // --------------------------- Check_Console ----------------------------
ATCuriosity 4:2de56fc46abb 257 void Check_Console()
ATCuriosity 4:2de56fc46abb 258 {
ATCuriosity 4:2de56fc46abb 259 if(Host_Comm.readable())
ATCuriosity 4:2de56fc46abb 260 {
ATCuriosity 4:2de56fc46abb 261 char cmd = Host_Comm.getc();
ATCuriosity 5:79b8cd191fa8 262 if ((cmd == 'E') || (cmd == 'e')) {
ATCuriosity 4:2de56fc46abb 263 EraseAllSectors();
ATCuriosity 5:79b8cd191fa8 264 flash_next_address = flash_base_address;
ATCuriosity 5:79b8cd191fa8 265 Host_Comm.printf("Erase done.\n\r");
ATCuriosity 5:79b8cd191fa8 266 }
ATCuriosity 5:79b8cd191fa8 267 else if ((cmd == 'C') || (cmd == 'c')) {
ATCuriosity 4:2de56fc46abb 268 mode = CONSOLE;
ATCuriosity 5:79b8cd191fa8 269 Host_Comm.printf("Mode console (0) actived.\n\r");
ATCuriosity 5:79b8cd191fa8 270 }
ATCuriosity 5:79b8cd191fa8 271 else if ((cmd == 'M') || (cmd == 'm')) {
ATCuriosity 4:2de56fc46abb 272 mode = FLASH_MVT;
ATCuriosity 5:79b8cd191fa8 273 Host_Comm.printf("Mode flash_mvt (1) actived.\n\r");
ATCuriosity 5:79b8cd191fa8 274 }
ATCuriosity 5:79b8cd191fa8 275 else if ((cmd == 'A') || (cmd == 'a')) {
ATCuriosity 4:2de56fc46abb 276 mode = FLASH_ALL;
ATCuriosity 5:79b8cd191fa8 277 Host_Comm.printf("Mode flash_all (2) actived.\n\r");
ATCuriosity 5:79b8cd191fa8 278 }
ATCuriosity 4:2de56fc46abb 279 else if ((cmd == 'R') || (cmd == 'r'))
ATCuriosity 4:2de56fc46abb 280 ReadFlash();
ATCuriosity 4:2de56fc46abb 281
ATCuriosity 4:2de56fc46abb 282 UpdateParamFlash();
ATCuriosity 4:2de56fc46abb 283 }
ATCuriosity 4:2de56fc46abb 284 }
ATCuriosity 4:2de56fc46abb 285
ATCuriosity 3:d03eae745223 286 // -------------------------- myTimer_Acq_Task --------------------------
ATCuriosity 3:d03eae745223 287 void myTimer_Acq_Task() { bTimer = 1; }
ATCuriosity 3:d03eae745223 288
ATCuriosity 4:2de56fc46abb 289 // -------------------------------------------------------------------------------------------------------
ATCuriosity 4:2de56fc46abb 290 // -------------------------------------------------------------------------------------------------------
ATCuriosity 4:2de56fc46abb 291
ATCuriosity 4:2de56fc46abb 292 // -------------------------- EraseAllSectors ---------------------------
ATCuriosity 4:2de56fc46abb 293 void EraseAllSectors(void)
ATCuriosity 4:2de56fc46abb 294 {
ATCuriosity 4:2de56fc46abb 295 for (int address = flash_base_address ; address < KL25_Flash_Size ; address += SECTOR_SIZE)
ATCuriosity 4:2de56fc46abb 296 {
ATCuriosity 4:2de56fc46abb 297 EraseSector(address);
ATCuriosity 4:2de56fc46abb 298 if(foundError)
ATCuriosity 4:2de56fc46abb 299 return;
ATCuriosity 4:2de56fc46abb 300 }
ATCuriosity 5:79b8cd191fa8 301 flashFull = 0;
ATCuriosity 4:2de56fc46abb 302 }
ATCuriosity 4:2de56fc46abb 303
ATCuriosity 4:2de56fc46abb 304 // ---------------------------- EraseSector -----------------------------
ATCuriosity 4:2de56fc46abb 305 void EraseSector(int address)
ATCuriosity 4:2de56fc46abb 306 {
ATCuriosity 4:2de56fc46abb 307 IAPCode status = erase_sector(address);
ATCuriosity 4:2de56fc46abb 308 if (status != Success) {
ATCuriosity 4:2de56fc46abb 309 Host_Comm.printf("\n\rError in EraseSector() : status = %d\n\r", status);
ATCuriosity 4:2de56fc46abb 310 foundError = 1;
ATCuriosity 4:2de56fc46abb 311 }
ATCuriosity 4:2de56fc46abb 312 }
ATCuriosity 4:2de56fc46abb 313
ATCuriosity 4:2de56fc46abb 314 // -------------------------- UpdateParamFlash --------------------------
ATCuriosity 4:2de56fc46abb 315 void UpdateParamFlash()
ATCuriosity 4:2de56fc46abb 316 {
ATCuriosity 4:2de56fc46abb 317 EraseSector(flash_base_address_cmd);
ATCuriosity 4:2de56fc46abb 318 if(foundError)
ATCuriosity 4:2de56fc46abb 319 return;
ATCuriosity 4:2de56fc46abb 320
ATCuriosity 5:79b8cd191fa8 321 int toWrite[3] = {flash_next_address, mode, flashFull};
ATCuriosity 5:79b8cd191fa8 322 IAPCode status = program_flash(flash_base_address_cmd, (char *) &toWrite, 12);
ATCuriosity 4:2de56fc46abb 323 if (status != Success) {
ATCuriosity 4:2de56fc46abb 324 Host_Comm.printf("\n\rError in UpdateParamFlash() : status = %d\n\r", status);
ATCuriosity 4:2de56fc46abb 325 foundError = 1;
ATCuriosity 4:2de56fc46abb 326 }
ATCuriosity 4:2de56fc46abb 327 }
ATCuriosity 4:2de56fc46abb 328
ATCuriosity 4:2de56fc46abb 329 // ----------------------------- WriteFlash -----------------------------
ATCuriosity 4:2de56fc46abb 330 void WriteFlash(MvtSet mvtSet)
ATCuriosity 4:2de56fc46abb 331 {
ATCuriosity 4:2de56fc46abb 332 IAPCode status;
ATCuriosity 5:79b8cd191fa8 333 int toWrite;
ATCuriosity 4:2de56fc46abb 334
ATCuriosity 4:2de56fc46abb 335 if (mode == FLASH_ALL) // inputs (2*3*N_PTS bytes) + mvt (1 byte)
ATCuriosity 4:2de56fc46abb 336 {
ATCuriosity 5:79b8cd191fa8 337 // check if enough place
ATCuriosity 5:79b8cd191fa8 338 if (flash_next_address+(2*(3*N_PTS)+4) > flash_base_address_cmd) {
ATCuriosity 5:79b8cd191fa8 339 Host_Comm.printf("\n\rFlash is full.\n\r");
ATCuriosity 5:79b8cd191fa8 340 flashFull = 1; return;
ATCuriosity 5:79b8cd191fa8 341 }
ATCuriosity 5:79b8cd191fa8 342
ATCuriosity 4:2de56fc46abb 343 // add all bytes one behind the other : 2bytes*3*N_PTS (inputs) + 1byte (mvt)
ATCuriosity 4:2de56fc46abb 344 int remainder = (3*N_PTS) % 2; // modulo 2 because compacting 2bytes into 4bytes words
ATCuriosity 5:79b8cd191fa8 345 int even = 3*N_PTS-remainder;
ATCuriosity 4:2de56fc46abb 346
ATCuriosity 5:79b8cd191fa8 347 for (int i = 0; i < even; i+=2)
ATCuriosity 5:79b8cd191fa8 348 {
ATCuriosity 5:79b8cd191fa8 349 toWrite = (mvtSet.inputs[i] << 16) | (mvtSet.inputs[i+1] & 0x0000FFFF);
ATCuriosity 5:79b8cd191fa8 350 status = program_flash(flash_next_address, (char*) &toWrite, 4);
ATCuriosity 5:79b8cd191fa8 351 if (status != Success) {
ATCuriosity 5:79b8cd191fa8 352 Host_Comm.printf("\n\rError in WriteFlash() (0) : status = %d\n\r", status);
ATCuriosity 5:79b8cd191fa8 353 foundError = 1; return;
ATCuriosity 5:79b8cd191fa8 354 }
ATCuriosity 5:79b8cd191fa8 355 flash_next_address += 4;
ATCuriosity 5:79b8cd191fa8 356 }
ATCuriosity 5:79b8cd191fa8 357
ATCuriosity 5:79b8cd191fa8 358 toWrite = mvtSet.mvt;
ATCuriosity 5:79b8cd191fa8 359 if(remainder == 1)
ATCuriosity 5:79b8cd191fa8 360 toWrite = toWrite | (mvtSet.inputs[3*N_PTS-1] << 16);
ATCuriosity 4:2de56fc46abb 361 status = program_flash(flash_next_address, (char*) &toWrite, 4);
ATCuriosity 4:2de56fc46abb 362 }
ATCuriosity 5:79b8cd191fa8 363 else
ATCuriosity 4:2de56fc46abb 364 {
ATCuriosity 5:79b8cd191fa8 365 // check if enough place
ATCuriosity 5:79b8cd191fa8 366 if (flash_next_address+4 > flash_base_address_cmd) {
ATCuriosity 5:79b8cd191fa8 367 Host_Comm.printf("\n\rFlash is full.\n\r");
ATCuriosity 5:79b8cd191fa8 368 flashFull = 1; return;
ATCuriosity 5:79b8cd191fa8 369 }
ATCuriosity 4:2de56fc46abb 370
ATCuriosity 5:79b8cd191fa8 371 toWrite = mvtSet.mvt;
ATCuriosity 4:2de56fc46abb 372 status = program_flash(flash_next_address, (char*) &toWrite, 4);
ATCuriosity 5:79b8cd191fa8 373 }
ATCuriosity 5:79b8cd191fa8 374
ATCuriosity 5:79b8cd191fa8 375 if (status != Success) {
ATCuriosity 5:79b8cd191fa8 376 Host_Comm.printf("\n\rError in WriteFlash() (1) : status = %d\n\r", status);
ATCuriosity 5:79b8cd191fa8 377 foundError = 1; return;
ATCuriosity 4:2de56fc46abb 378 }
ATCuriosity 4:2de56fc46abb 379
ATCuriosity 4:2de56fc46abb 380 flash_next_address += 4;
ATCuriosity 4:2de56fc46abb 381 UpdateParamFlash();
ATCuriosity 4:2de56fc46abb 382 }
ATCuriosity 4:2de56fc46abb 383
ATCuriosity 4:2de56fc46abb 384 // ----------------------------- ReadFlash ------------------------------
ATCuriosity 4:2de56fc46abb 385 void ReadFlash()
ATCuriosity 4:2de56fc46abb 386 {
ATCuriosity 4:2de56fc46abb 387 Host_Comm.printf("\n\r------ Begin Read Flash ------\n\r");
ATCuriosity 5:79b8cd191fa8 388 DisplayFlashInfos();
ATCuriosity 4:2de56fc46abb 389
ATCuriosity 4:2de56fc46abb 390 char cmd;
ATCuriosity 5:79b8cd191fa8 391 int *currAddress_ptr = (int*)flash_base_address;
ATCuriosity 5:79b8cd191fa8 392 int *stopAddress_ptr = (int*)flash_next_address;
ATCuriosity 4:2de56fc46abb 393
ATCuriosity 5:79b8cd191fa8 394 Host_Comm.printf("ReadFlash : size = %d\n\r",stopAddress_ptr-currAddress_ptr);
ATCuriosity 4:2de56fc46abb 395
ATCuriosity 5:79b8cd191fa8 396 if (mode == FLASH_ALL)
ATCuriosity 4:2de56fc46abb 397 {
ATCuriosity 5:79b8cd191fa8 398 int remainder = (3*N_PTS) % 2;
ATCuriosity 5:79b8cd191fa8 399 int n_words_by_set = (3*N_PTS - remainder)/2+1;
ATCuriosity 5:79b8cd191fa8 400 int word;
ATCuriosity 5:79b8cd191fa8 401 int16_t line [4] = {}; // 3 components of acc (line[3] = position in line)
ATCuriosity 5:79b8cd191fa8 402
ATCuriosity 5:79b8cd191fa8 403 while (currAddress_ptr < stopAddress_ptr)
ATCuriosity 4:2de56fc46abb 404 {
ATCuriosity 5:79b8cd191fa8 405 // check for user input
ATCuriosity 5:79b8cd191fa8 406 if(Host_Comm.readable()) {
ATCuriosity 5:79b8cd191fa8 407 cmd = Host_Comm.getc();
ATCuriosity 5:79b8cd191fa8 408 if ((cmd == 'S') || (cmd == 's'))
ATCuriosity 5:79b8cd191fa8 409 return;
ATCuriosity 5:79b8cd191fa8 410 }
ATCuriosity 5:79b8cd191fa8 411
ATCuriosity 5:79b8cd191fa8 412 // print all set
ATCuriosity 5:79b8cd191fa8 413 for (word = 0; word < n_words_by_set-1; word++) {
ATCuriosity 5:79b8cd191fa8 414 LineHandler(line,(int16_t)(currAddress_ptr[word]>>16));
ATCuriosity 5:79b8cd191fa8 415 LineHandler(line,(int16_t)currAddress_ptr[word]);
ATCuriosity 5:79b8cd191fa8 416 }
ATCuriosity 5:79b8cd191fa8 417 if (remainder == 1)
ATCuriosity 5:79b8cd191fa8 418 LineHandler(line,(int16_t)(currAddress_ptr[word]>>16));
ATCuriosity 5:79b8cd191fa8 419 Host_Comm.printf("Mvt = %d\n\r",(int16_t)currAddress_ptr[word]);
ATCuriosity 5:79b8cd191fa8 420 currAddress_ptr += n_words_by_set;
ATCuriosity 4:2de56fc46abb 421 }
ATCuriosity 5:79b8cd191fa8 422 }
ATCuriosity 5:79b8cd191fa8 423 else
ATCuriosity 5:79b8cd191fa8 424 {
ATCuriosity 5:79b8cd191fa8 425 while (currAddress_ptr < stopAddress_ptr)
ATCuriosity 5:79b8cd191fa8 426 {
ATCuriosity 5:79b8cd191fa8 427 // check for user input
ATCuriosity 5:79b8cd191fa8 428 if(Host_Comm.readable()) {
ATCuriosity 5:79b8cd191fa8 429 cmd = Host_Comm.getc();
ATCuriosity 5:79b8cd191fa8 430 if ((cmd == 'S') || (cmd == 's'))
ATCuriosity 5:79b8cd191fa8 431 return;
ATCuriosity 5:79b8cd191fa8 432 }
ATCuriosity 5:79b8cd191fa8 433
ATCuriosity 5:79b8cd191fa8 434 // read mvt
ATCuriosity 5:79b8cd191fa8 435 Host_Comm.printf("Mvt = %d\n\r",currAddress_ptr[0]);
ATCuriosity 5:79b8cd191fa8 436 currAddress_ptr ++;
ATCuriosity 5:79b8cd191fa8 437 }
ATCuriosity 4:2de56fc46abb 438 }
ATCuriosity 4:2de56fc46abb 439
ATCuriosity 4:2de56fc46abb 440 Host_Comm.printf("\n\r------- End Read Flash -------\n\n\r");
ATCuriosity 4:2de56fc46abb 441 }
ATCuriosity 4:2de56fc46abb 442
ATCuriosity 5:79b8cd191fa8 443 // ----------------------------- LineHandler ----------------------------
ATCuriosity 5:79b8cd191fa8 444 void LineHandler(int16_t *line, int16_t next)
ATCuriosity 5:79b8cd191fa8 445 {
ATCuriosity 5:79b8cd191fa8 446 line[line[3]] = next;
ATCuriosity 5:79b8cd191fa8 447 line[3] ++;
ATCuriosity 5:79b8cd191fa8 448 if (line[3] == 3) {
ATCuriosity 5:79b8cd191fa8 449 Host_Comm.printf("%d %d %d\n\r",line[0],line[1],line[2]);
ATCuriosity 5:79b8cd191fa8 450 line[3] = 0;
ATCuriosity 5:79b8cd191fa8 451 }
ATCuriosity 5:79b8cd191fa8 452 }
ATCuriosity 5:79b8cd191fa8 453
ATCuriosity 4:2de56fc46abb 454 // -------------------------------------------------------------------------------------------------------
ATCuriosity 4:2de56fc46abb 455 // -------------------------------------------------------------------------------------------------------
ATCuriosity 4:2de56fc46abb 456
ATCuriosity 3:d03eae745223 457 // ------------------------------ ReadData ------------------------------
ATCuriosity 3:d03eae745223 458 Data ReadData()
Salamandre 0:a18d6e69c993 459 {
ATCuriosity 3:d03eae745223 460 Data data;
ATCuriosity 3:d03eae745223 461
ATCuriosity 3:d03eae745223 462 // Get Accelerometer data's
ATCuriosity 4:2de56fc46abb 463 Accel_Enable = 1; // Rising Edge -> Start measure
ATCuriosity 3:d03eae745223 464
ATCuriosity 4:2de56fc46abb 465 int ready = 0;
ATCuriosity 3:d03eae745223 466 while((ready && 0x10) == 0) // Wait for accelerometer to have new data's
ATCuriosity 3:d03eae745223 467 ready = my8491.Read_Status();
ATCuriosity 3:d03eae745223 468
ATCuriosity 3:d03eae745223 469 data.accX = my8491.getAccAxis(REG_OUT_X_MSB);
ATCuriosity 3:d03eae745223 470 data.accY = my8491.getAccAxis(REG_OUT_Y_MSB);
ATCuriosity 3:d03eae745223 471 data.accZ = my8491.getAccAxis(REG_OUT_Z_MSB);
Salamandre 0:a18d6e69c993 472
ATCuriosity 4:2de56fc46abb 473 Accel_Enable = 0;
Salamandre 0:a18d6e69c993 474
ATCuriosity 3:d03eae745223 475 // Get Piezo Data's
ATCuriosity 4:2de56fc46abb 476 data.Vout_IF = ((float) myPTE20.read_u16() / 0XFFFF) * KL25Z_VDD; // convert in volt
ATCuriosity 4:2de56fc46abb 477 data.Vout_FILT = ((float) myPTE21.read_u16() / 0XFFFF) * KL25Z_VDD;
ATCuriosity 4:2de56fc46abb 478 data.Vout_GAIN = ((float) myPTE22.read_u16() / 0XFFFF) * KL25Z_VDD;
ATCuriosity 3:d03eae745223 479
ATCuriosity 3:d03eae745223 480 return data;
ATCuriosity 3:d03eae745223 481 }
ATCuriosity 3:d03eae745223 482
ATCuriosity 3:d03eae745223 483 // -------------------------------- Log ---------------------------------
ATCuriosity 3:d03eae745223 484 void Log()
ATCuriosity 5:79b8cd191fa8 485 {
ATCuriosity 3:d03eae745223 486 Data currData;
ATCuriosity 3:d03eae745223 487 int16_t AccDataLog [N_PTS*3] = {}; // array to save latest data read
ATCuriosity 4:2de56fc46abb 488 int index_write = 0; // current position to write data in AccDataLog
ATCuriosity 4:2de56fc46abb 489 bool enoughData = 0;
ATCuriosity 4:2de56fc46abb 490 bool shockDetected = 0; // if shock detected
ATCuriosity 4:2de56fc46abb 491 int n_sinceShock = 0; // number of ReadData() since last chock
ATCuriosity 3:d03eae745223 492
ATCuriosity 5:79b8cd191fa8 493 while(Check_Jumper() && !foundError && !flashFull)
ATCuriosity 5:79b8cd191fa8 494 {
ATCuriosity 3:d03eae745223 495 while (bTimer == 0) {} // Wait Acq Tick Timer
Salamandre 0:a18d6e69c993 496 bTimer = 0;
Salamandre 0:a18d6e69c993 497
ATCuriosity 3:d03eae745223 498 currData = ReadData();
ATCuriosity 4:2de56fc46abb 499 //Host_Comm.printf("%d ; %d ; %d ; %f\n\r", currData.accX, currData.accY, currData.accZ, currData.Vout_FILT);
ATCuriosity 3:d03eae745223 500 AccDataLog[index_write*3] = currData.accX;
ATCuriosity 3:d03eae745223 501 AccDataLog[index_write*3+1] = currData.accY;
ATCuriosity 3:d03eae745223 502 AccDataLog[index_write*3+2] = currData.accZ;
Salamandre 0:a18d6e69c993 503
ATCuriosity 4:2de56fc46abb 504 float amplitude = abs(currData.Vout_FILT - KL25Z_VDD/2.0);
ATCuriosity 4:2de56fc46abb 505 //Host_Comm.printf("amplitude = %f\n\r",amplitude);
ATCuriosity 4:2de56fc46abb 506 if (amplitude >= THRESHOLD_SHOCK && enoughData)
Salamandre 0:a18d6e69c993 507 {
ATCuriosity 3:d03eae745223 508 shockDetected = 1;
ATCuriosity 3:d03eae745223 509 n_sinceShock = 0;
Salamandre 0:a18d6e69c993 510 }
ATCuriosity 3:d03eae745223 511 if (n_sinceShock == N_PTS/2 && shockDetected == 1)
Salamandre 0:a18d6e69c993 512 {
ATCuriosity 5:79b8cd191fa8 513 Led_Green = LED_ON;
ATCuriosity 5:79b8cd191fa8 514
ATCuriosity 4:2de56fc46abb 515 MvtSet mvtSet;
ATCuriosity 4:2de56fc46abb 516 Rotate(AccDataLog, N_PTS-1-index_write, mvtSet.inputs);
ATCuriosity 4:2de56fc46abb 517 mvtSet.mvt = SelectMvt(mvtSet.inputs);
ATCuriosity 5:79b8cd191fa8 518
ATCuriosity 4:2de56fc46abb 519 if (mode == CONSOLE)
ATCuriosity 5:79b8cd191fa8 520 PrintSet(mvtSet);
ATCuriosity 4:2de56fc46abb 521 else
ATCuriosity 4:2de56fc46abb 522 WriteFlash(mvtSet);
ATCuriosity 5:79b8cd191fa8 523
ATCuriosity 3:d03eae745223 524 shockDetected = 0;
ATCuriosity 5:79b8cd191fa8 525 wait_ms(100);
ATCuriosity 5:79b8cd191fa8 526 Led_Green = LED_OFF;
Salamandre 0:a18d6e69c993 527 }
ATCuriosity 4:2de56fc46abb 528
ATCuriosity 3:d03eae745223 529 index_write ++;
ATCuriosity 3:d03eae745223 530 n_sinceShock ++;
ATCuriosity 4:2de56fc46abb 531 if (index_write == N_PTS)
ATCuriosity 4:2de56fc46abb 532 {
ATCuriosity 4:2de56fc46abb 533 enoughData = 1;
ATCuriosity 3:d03eae745223 534 index_write = 0;
ATCuriosity 4:2de56fc46abb 535 }
Salamandre 0:a18d6e69c993 536 }
ATCuriosity 3:d03eae745223 537 Clear_Led();
ATCuriosity 3:d03eae745223 538 }
ATCuriosity 3:d03eae745223 539
ATCuriosity 4:2de56fc46abb 540 // ------------------------------- Rotate -------------------------------
ATCuriosity 4:2de56fc46abb 541 void Rotate(int16_t *AccDataLog, int amount, int16_t *inputs)
ATCuriosity 3:d03eae745223 542 {
ATCuriosity 4:2de56fc46abb 543 for(int i = 0; i < N_PTS; i++)
ATCuriosity 4:2de56fc46abb 544 for(int j = 0; j < 3; j++)
ATCuriosity 4:2de56fc46abb 545 inputs[((i+amount)%N_PTS)*3+j] = AccDataLog[i*3+j];
Salamandre 0:a18d6e69c993 546 }
Salamandre 0:a18d6e69c993 547
ATCuriosity 4:2de56fc46abb 548 // ------------------------------ PrintSet ------------------------------
ATCuriosity 5:79b8cd191fa8 549 void PrintSet(MvtSet mvtSet)
ATCuriosity 3:d03eae745223 550 {
ATCuriosity 4:2de56fc46abb 551 Host_Comm.printf("------ Begin Set ------\n\r");
ATCuriosity 4:2de56fc46abb 552 for(int i = 0; i < N_PTS; i++)
ATCuriosity 5:79b8cd191fa8 553 Host_Comm.printf("%d %d %d\n\r",mvtSet.inputs[i*3],mvtSet.inputs[i*3+1],mvtSet.inputs[i*3+2]);
ATCuriosity 5:79b8cd191fa8 554 Host_Comm.printf("Mvt = %d\n\r",mvtSet.mvt);
ATCuriosity 4:2de56fc46abb 555 Host_Comm.printf("------- End Set -------\n\n\r");
ATCuriosity 3:d03eae745223 556 }
Salamandre 0:a18d6e69c993 557
ATCuriosity 5:79b8cd191fa8 558 // ------------------------------ Softmax -------------------------------
ATCuriosity 5:79b8cd191fa8 559 void Softmax (float *inputs, float *result)
ATCuriosity 5:79b8cd191fa8 560 {
ATCuriosity 5:79b8cd191fa8 561 float exps [N_MVTS];
ATCuriosity 5:79b8cd191fa8 562 float sum = 0;
ATCuriosity 5:79b8cd191fa8 563 for (int i = 0; i < N_MVTS; i++)
ATCuriosity 5:79b8cd191fa8 564 {
ATCuriosity 5:79b8cd191fa8 565 exps[i] = exp(inputs[i]);
ATCuriosity 5:79b8cd191fa8 566 sum += exps[i];
ATCuriosity 5:79b8cd191fa8 567 }
ATCuriosity 5:79b8cd191fa8 568
ATCuriosity 5:79b8cd191fa8 569 for (int i = 0; i < N_MVTS; i++)
ATCuriosity 5:79b8cd191fa8 570 result[i] = exps[i] / sum;
ATCuriosity 5:79b8cd191fa8 571 }
Salamandre 0:a18d6e69c993 572
ATCuriosity 3:d03eae745223 573 // ----------------------------- SelectMvt ------------------------------
ATCuriosity 4:2de56fc46abb 574 Mvt SelectMvt(int16_t *inputs)
ATCuriosity 3:d03eae745223 575 {
ATCuriosity 5:79b8cd191fa8 576 /*
ATCuriosity 3:d03eae745223 577 int i, j;
ATCuriosity 3:d03eae745223 578 float selection [N_MVTS] = {};
ATCuriosity 3:d03eae745223 579 for (j = 0; j < N_MVTS; j++) {
ATCuriosity 3:d03eae745223 580 for (i = 0; i < N_PTS*3; i++)
ATCuriosity 5:79b8cd191fa8 581 selection[j] += (inputs[i]+OFFSET)/RANGE * Weights[i*N_MVTS+j];
ATCuriosity 5:79b8cd191fa8 582 selection[j] = selection[j]+Biases[j];
ATCuriosity 3:d03eae745223 583 }
ATCuriosity 5:79b8cd191fa8 584 Softmax(selection,selection);
ATCuriosity 3:d03eae745223 585
ATCuriosity 4:2de56fc46abb 586 Mvt mvt = Undefined;
ATCuriosity 5:79b8cd191fa8 587 Host_Comm.printf("Proba mvt : ");
ATCuriosity 4:2de56fc46abb 588 for (i = 0; i < N_MVTS; i++) {
ATCuriosity 3:d03eae745223 589 if (selection[i] > THRESHOLD_MVT)
ATCuriosity 4:2de56fc46abb 590 mvt = static_cast<Mvt>(i+1);
ATCuriosity 5:79b8cd191fa8 591 Host_Comm.printf("%f ",selection[i]);
ATCuriosity 4:2de56fc46abb 592 }
ATCuriosity 5:79b8cd191fa8 593 Host_Comm.printf("\n\r");
ATCuriosity 3:d03eae745223 594
ATCuriosity 3:d03eae745223 595 return mvt;
ATCuriosity 5:79b8cd191fa8 596 */
ATCuriosity 5:79b8cd191fa8 597 return SmashShot;
Salamandre 0:a18d6e69c993 598 }