Galileo Hand Basic Example implemented on FRDM K64F

Dependencies:   NOKIA_5110 mbed-dsp mbed

Fork of Nucleo_EMG_Galileo_Hand by Julio Fajardo

Committer:
julioefajardo
Date:
Wed Aug 12 18:05:29 2015 +0000
Revision:
2:12f979d695db
Parent:
1:9472990d8bb4
Child:
3:f784301a5166
Version 1.1;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
julioefajardo 0:f2b89c6a8a16 1 #include "mbed.h"
julioefajardo 0:f2b89c6a8a16 2 #include "arm_math.h"
julioefajardo 0:f2b89c6a8a16 3
julioefajardo 0:f2b89c6a8a16 4 Ticker EMG_Sampler;
julioefajardo 0:f2b89c6a8a16 5 Serial pc(SERIAL_TX, SERIAL_RX);
julioefajardo 0:f2b89c6a8a16 6 DigitalOut myled(LED1);
julioefajardo 0:f2b89c6a8a16 7 AnalogIn Ref(A0);
julioefajardo 0:f2b89c6a8a16 8 AnalogIn E1(A1);
julioefajardo 0:f2b89c6a8a16 9 AnalogIn E2(A2);
julioefajardo 0:f2b89c6a8a16 10 AnalogIn E3(A3);
julioefajardo 0:f2b89c6a8a16 11
julioefajardo 0:f2b89c6a8a16 12 float32_t EMG1, EMG2, EMG3;
julioefajardo 2:12f979d695db 13 float32_t samples[25];
julioefajardo 2:12f979d695db 14 float32_t samples2[25];
julioefajardo 2:12f979d695db 15 float32_t samples3[25];
julioefajardo 2:12f979d695db 16 float32_t abs_output[25];
julioefajardo 2:12f979d695db 17 float32_t abs_output2[25];
julioefajardo 2:12f979d695db 18 float32_t abs_output3[25];
julioefajardo 0:f2b89c6a8a16 19 float32_t mean = 0.0f, mean2 = 0.0f, mean3 = 0.0f;
julioefajardo 0:f2b89c6a8a16 20 uint8_t COCO = 0;
julioefajardo 0:f2b89c6a8a16 21
julioefajardo 0:f2b89c6a8a16 22 void ADC_Sampler() {
julioefajardo 0:f2b89c6a8a16 23 EMG1 = (E1.read()-Ref.read())*3.3f;
julioefajardo 0:f2b89c6a8a16 24 EMG2 = (E2.read()-Ref.read())*3.3f;
julioefajardo 0:f2b89c6a8a16 25 EMG3 = (E3.read()-Ref.read())*3.3f;
julioefajardo 0:f2b89c6a8a16 26 pc.printf("%.10f,%.10f,%.10f\n\r",EMG1,EMG2,EMG3);
julioefajardo 0:f2b89c6a8a16 27 uint32_t m = __get_PRIMASK();
julioefajardo 0:f2b89c6a8a16 28 __disable_irq();
julioefajardo 0:f2b89c6a8a16 29 for(int j=99;j>0;j--) {
julioefajardo 0:f2b89c6a8a16 30 samples[j]=samples[j-1]; //Fill Array
julioefajardo 0:f2b89c6a8a16 31 samples2[j]=samples2[j-1]; //Fill Array
julioefajardo 0:f2b89c6a8a16 32 samples3[j]=samples3[j-1]; //Fill Array
julioefajardo 0:f2b89c6a8a16 33 }
julioefajardo 0:f2b89c6a8a16 34 samples[0]=EMG1;
julioefajardo 0:f2b89c6a8a16 35 samples2[0]=EMG2;
julioefajardo 0:f2b89c6a8a16 36 samples3[0]=EMG3;
julioefajardo 0:f2b89c6a8a16 37 //copy 25 samples on array
julioefajardo 0:f2b89c6a8a16 38 for(int j=99;j>0;j--){
julioefajardo 0:f2b89c6a8a16 39 samples[j]=samples[j-1];
julioefajardo 0:f2b89c6a8a16 40 samples2[j]=samples2[j-1];
julioefajardo 0:f2b89c6a8a16 41 samples3[j]=samples3[j-1];
julioefajardo 0:f2b89c6a8a16 42 }
julioefajardo 0:f2b89c6a8a16 43 __set_PRIMASK(m);
julioefajardo 0:f2b89c6a8a16 44 COCO = 1;
julioefajardo 0:f2b89c6a8a16 45 }
julioefajardo 0:f2b89c6a8a16 46
julioefajardo 0:f2b89c6a8a16 47 int main() {
julioefajardo 0:f2b89c6a8a16 48 pc.baud(115200); //Serial com at 115200 bauds
julioefajardo 0:f2b89c6a8a16 49 EMG_Sampler.attach(&ADC_Sampler, 0.001); //1ms ticker for ADC Sampler
julioefajardo 0:f2b89c6a8a16 50 myled = 1;
julioefajardo 0:f2b89c6a8a16 51 //Thumb = 0;
julioefajardo 0:f2b89c6a8a16 52 while(1) {
julioefajardo 0:f2b89c6a8a16 53 if(COCO){
julioefajardo 0:f2b89c6a8a16 54 //mean for threshold
julioefajardo 2:12f979d695db 55 arm_abs_f32(samples, abs_output, 25); //rectifier
julioefajardo 2:12f979d695db 56 arm_abs_f32(samples2, abs_output2, 25); //rectifier
julioefajardo 2:12f979d695db 57 arm_abs_f32(samples3, abs_output3, 25); //rectifier
julioefajardo 2:12f979d695db 58 arm_mean_f32(abs_output, 25, &mean);
julioefajardo 2:12f979d695db 59 arm_mean_f32(abs_output, 25, &mean2);
julioefajardo 2:12f979d695db 60 arm_mean_f32(abs_output, 25, &mean3);
julioefajardo 0:f2b89c6a8a16 61 if ((mean>0.009f)&&(mean2>0.007f)&&(mean3>0.007f)) {
julioefajardo 0:f2b89c6a8a16 62 myled = 0;
julioefajardo 0:f2b89c6a8a16 63 }
julioefajardo 0:f2b89c6a8a16 64 else {
julioefajardo 0:f2b89c6a8a16 65 myled = 1;
julioefajardo 0:f2b89c6a8a16 66 }
julioefajardo 0:f2b89c6a8a16 67 COCO = 0;
julioefajardo 0:f2b89c6a8a16 68 }
julioefajardo 0:f2b89c6a8a16 69 }
julioefajardo 0:f2b89c6a8a16 70 }