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 Sep 02 01:29:02 2015 +0000
Revision:
3:f784301a5166
Parent:
2:12f979d695db
Child:
4:d8fd3c4484cc
Servos

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 3:f784301a5166 11 PwmOut Thumb(D11);
julioefajardo 3:f784301a5166 12 PwmOut Index(D10);
julioefajardo 3:f784301a5166 13 PwmOut Middle(D9);
julioefajardo 3:f784301a5166 14 PwmOut Pinky(D6);
julioefajardo 3:f784301a5166 15 PwmOut ThumbRot(D5);
julioefajardo 0:f2b89c6a8a16 16
julioefajardo 0:f2b89c6a8a16 17 float32_t EMG1, EMG2, EMG3;
julioefajardo 2:12f979d695db 18 float32_t samples[25];
julioefajardo 2:12f979d695db 19 float32_t samples2[25];
julioefajardo 2:12f979d695db 20 float32_t samples3[25];
julioefajardo 2:12f979d695db 21 float32_t abs_output[25];
julioefajardo 2:12f979d695db 22 float32_t abs_output2[25];
julioefajardo 2:12f979d695db 23 float32_t abs_output3[25];
julioefajardo 0:f2b89c6a8a16 24 float32_t mean = 0.0f, mean2 = 0.0f, mean3 = 0.0f;
julioefajardo 0:f2b89c6a8a16 25 uint8_t COCO = 0;
julioefajardo 0:f2b89c6a8a16 26
julioefajardo 0:f2b89c6a8a16 27 void ADC_Sampler() {
julioefajardo 0:f2b89c6a8a16 28 EMG1 = (E1.read()-Ref.read())*3.3f;
julioefajardo 0:f2b89c6a8a16 29 EMG2 = (E2.read()-Ref.read())*3.3f;
julioefajardo 0:f2b89c6a8a16 30 EMG3 = (E3.read()-Ref.read())*3.3f;
julioefajardo 0:f2b89c6a8a16 31 pc.printf("%.10f,%.10f,%.10f\n\r",EMG1,EMG2,EMG3);
julioefajardo 0:f2b89c6a8a16 32 uint32_t m = __get_PRIMASK();
julioefajardo 0:f2b89c6a8a16 33 __disable_irq();
julioefajardo 0:f2b89c6a8a16 34 for(int j=99;j>0;j--) {
julioefajardo 0:f2b89c6a8a16 35 samples[j]=samples[j-1]; //Fill Array
julioefajardo 0:f2b89c6a8a16 36 samples2[j]=samples2[j-1]; //Fill Array
julioefajardo 0:f2b89c6a8a16 37 samples3[j]=samples3[j-1]; //Fill Array
julioefajardo 0:f2b89c6a8a16 38 }
julioefajardo 0:f2b89c6a8a16 39 samples[0]=EMG1;
julioefajardo 0:f2b89c6a8a16 40 samples2[0]=EMG2;
julioefajardo 0:f2b89c6a8a16 41 samples3[0]=EMG3;
julioefajardo 0:f2b89c6a8a16 42 //copy 25 samples on array
julioefajardo 0:f2b89c6a8a16 43 for(int j=99;j>0;j--){
julioefajardo 0:f2b89c6a8a16 44 samples[j]=samples[j-1];
julioefajardo 0:f2b89c6a8a16 45 samples2[j]=samples2[j-1];
julioefajardo 0:f2b89c6a8a16 46 samples3[j]=samples3[j-1];
julioefajardo 0:f2b89c6a8a16 47 }
julioefajardo 0:f2b89c6a8a16 48 __set_PRIMASK(m);
julioefajardo 0:f2b89c6a8a16 49 COCO = 1;
julioefajardo 0:f2b89c6a8a16 50 }
julioefajardo 0:f2b89c6a8a16 51
julioefajardo 0:f2b89c6a8a16 52 int main() {
julioefajardo 0:f2b89c6a8a16 53 pc.baud(115200); //Serial com at 115200 bauds
julioefajardo 0:f2b89c6a8a16 54 EMG_Sampler.attach(&ADC_Sampler, 0.001); //1ms ticker for ADC Sampler
julioefajardo 3:f784301a5166 55 //Open -> 0.6ms - Close 2.4ms
julioefajardo 3:f784301a5166 56 Thumb.period(0.02f/2.0f);
julioefajardo 3:f784301a5166 57 Thumb.pulsewidth(0.0010f/2.0f);
julioefajardo 3:f784301a5166 58 //Open -> 2.4ms - Close 0.6ms
julioefajardo 3:f784301a5166 59 Index.period(0.02f*2.0f);
julioefajardo 3:f784301a5166 60 Index.pulsewidth(0.0024f*2.0f);
julioefajardo 3:f784301a5166 61 //Open -> 2.4ms - Close 0.6ms
julioefajardo 3:f784301a5166 62 Middle.period(0.02f*2.0f);
julioefajardo 3:f784301a5166 63 Middle.pulsewidth(0.0024f*2.0f);
julioefajardo 3:f784301a5166 64 //Open -> 0.6ms - Close 2.4ms
julioefajardo 3:f784301a5166 65 Pinky.period(0.02f*2.0f);
julioefajardo 3:f784301a5166 66 Pinky.pulsewidth(0.0006f*2.0f);
julioefajardo 3:f784301a5166 67 //Open -> 0.6ms - Close 2.4ms
julioefajardo 3:f784301a5166 68 //ThumbRot.period(0.02f/2.0f);
julioefajardo 3:f784301a5166 69 ThumbRot.pulsewidth(0.0006f*2.0f);
julioefajardo 3:f784301a5166 70
julioefajardo 0:f2b89c6a8a16 71 myled = 1;
julioefajardo 0:f2b89c6a8a16 72 while(1) {
julioefajardo 0:f2b89c6a8a16 73 if(COCO){
julioefajardo 0:f2b89c6a8a16 74 //mean for threshold
julioefajardo 2:12f979d695db 75 arm_abs_f32(samples, abs_output, 25); //rectifier
julioefajardo 2:12f979d695db 76 arm_abs_f32(samples2, abs_output2, 25); //rectifier
julioefajardo 2:12f979d695db 77 arm_abs_f32(samples3, abs_output3, 25); //rectifier
julioefajardo 2:12f979d695db 78 arm_mean_f32(abs_output, 25, &mean);
julioefajardo 2:12f979d695db 79 arm_mean_f32(abs_output, 25, &mean2);
julioefajardo 2:12f979d695db 80 arm_mean_f32(abs_output, 25, &mean3);
julioefajardo 0:f2b89c6a8a16 81 if ((mean>0.009f)&&(mean2>0.007f)&&(mean3>0.007f)) {
julioefajardo 0:f2b89c6a8a16 82 myled = 0;
julioefajardo 3:f784301a5166 83 Thumb.pulsewidth(0.0024f/2.0f);
julioefajardo 3:f784301a5166 84 Index.pulsewidth(0.0006f*2.0f);
julioefajardo 3:f784301a5166 85 Middle.pulsewidth(0.0006f*2.0f);
julioefajardo 3:f784301a5166 86 Pinky.pulsewidth(0.0024f*2.0f);
julioefajardo 3:f784301a5166 87 ThumbRot.pulsewidth(0.0024f*2.0f);
julioefajardo 0:f2b89c6a8a16 88 }
julioefajardo 0:f2b89c6a8a16 89 else {
julioefajardo 0:f2b89c6a8a16 90 myled = 1;
julioefajardo 3:f784301a5166 91 Thumb.pulsewidth(0.0010f/2.0f);
julioefajardo 3:f784301a5166 92 Index.pulsewidth(0.0024f*2.0f);
julioefajardo 3:f784301a5166 93 Middle.pulsewidth(0.0024f*2.0f);
julioefajardo 3:f784301a5166 94 Pinky.pulsewidth(0.0006f*2.0f);
julioefajardo 3:f784301a5166 95 ThumbRot.pulsewidth(0.0006f*2.0f);
julioefajardo 0:f2b89c6a8a16 96 }
julioefajardo 0:f2b89c6a8a16 97 COCO = 0;
julioefajardo 0:f2b89c6a8a16 98 }
julioefajardo 0:f2b89c6a8a16 99 }
julioefajardo 0:f2b89c6a8a16 100 }