Werkcollege opgave 23 september BMT K9

Dependencies:   Encoder HIDScope MODSERIAL mbed QEI biquadFilter

Committer:
bscheltinga
Date:
Fri Oct 09 11:05:05 2015 +0000
Revision:
26:1090acf98efc
Parent:
25:38ab6dd19d9b
Child:
27:85e5d36bb6c5
Low- and Highpassfilter van A0 printen in HIDScope. MOVAV lijkt niet te werken. //Indeling verandert

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bscheltinga 0:fe3896c6eeb0 1 #include "mbed.h"
bscheltinga 12:0a079e86348e 2 #include "HIDScope.h"
bscheltinga 0:fe3896c6eeb0 3 #include "MODSERIAL.h"
bscheltinga 13:04e10692e239 4 #include "biquadFilter.h" //Filter direct form II
bscheltinga 0:fe3896c6eeb0 5
bscheltinga 26:1090acf98efc 6 // [DEFINE INPUTS] //
bscheltinga 20:d5f5c60adc43 7 AnalogIn emgL(A0); //Analog input left arm
bscheltinga 18:68067ffd169e 8 //AnalogIn emgR(PTB1); //Analog input right arm
bscheltinga 19:bd453bee03f6 9 DigitalOut led1(LED_GREEN);
bscheltinga 21:594915ba2bf9 10
bscheltinga 26:1090acf98efc 11 // [DEFINE CONSTANTS] //
bscheltinga 26:1090acf98efc 12 float emgL_L, emgL_LH, emgLeft, emgL_H, emgL_Notch;
bscheltinga 26:1090acf98efc 13 double B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, MOVAVG;
bscheltinga 26:1090acf98efc 14 HIDScope scope(4); // Aantal HIDScope kanalen
bscheltinga 18:68067ffd169e 15 MODSERIAL pc(USBTX,USBRX);
bscheltinga 20:d5f5c60adc43 16 volatile bool control_go = false;
bscheltinga 20:d5f5c60adc43 17 Ticker control_tick;
bscheltinga 15:7870f7912904 18
bscheltinga 26:1090acf98efc 19 // [BIQUAD FILTERS] //
bscheltinga 24:a1ce6a87103c 20 const float la1 = 0.29358435979;
bscheltinga 24:a1ce6a87103c 21 const float la2 = 0.71930322156;
bscheltinga 24:a1ce6a87103c 22 const float lb0 = 1.00000000000;
bscheltinga 24:a1ce6a87103c 23 const float lb1 = 0.01516472727;
bscheltinga 24:a1ce6a87103c 24 const float lb2 = 1.00000000000; // Waarde van biquads via groep 1 2014
bscheltinga 26:1090acf98efc 25 biquadFilter Lowpassfilter1 (la1, la2, lb0, lb1, lb2);
bscheltinga 15:7870f7912904 26
bscheltinga 24:a1ce6a87103c 27 const float ha1 = -0.29358436761;
bscheltinga 24:a1ce6a87103c 28 const float ha2 = 0.71930322175;
bscheltinga 24:a1ce6a87103c 29 const float hb0 = 1.000000000000;
bscheltinga 24:a1ce6a87103c 30 const float hb1 = -0.01516473660;
bscheltinga 24:a1ce6a87103c 31 const float hb2 = 1.000000000000; // Waarde van biquads via groep 1 2014
bscheltinga 22:14abcfdd1554 32 biquadFilter Highpassfilter (ha1, ha2, hb0, hb1, hb2);
bscheltinga 22:14abcfdd1554 33
bscheltinga 26:1090acf98efc 34 // [FUNCTIONS] //
bscheltinga 21:594915ba2bf9 35 void ControlGo() //Control flag
bscheltinga 21:594915ba2bf9 36 {
bscheltinga 21:594915ba2bf9 37 control_go = true;
bscheltinga 21:594915ba2bf9 38 led1 = 0;
bscheltinga 21:594915ba2bf9 39 }
bscheltinga 0:fe3896c6eeb0 40
bscheltinga 26:1090acf98efc 41
bscheltinga 26:1090acf98efc 42 // [MAIN FUNCTION] //
bscheltinga 13:04e10692e239 43 int main()
bscheltinga 13:04e10692e239 44 {
bscheltinga 25:38ab6dd19d9b 45 control_tick.attach(&ControlGo, 0.005);
bscheltinga 20:d5f5c60adc43 46 pc.baud(9600);
bscheltinga 20:d5f5c60adc43 47
bscheltinga 15:7870f7912904 48 while(true) {
bscheltinga 20:d5f5c60adc43 49
bscheltinga 20:d5f5c60adc43 50 if(control_go)
bscheltinga 23:c9c9c1d7864a 51
bscheltinga 23:c9c9c1d7864a 52 // [EMG FILTEREN MET HIGH- EN LOWPASSFILTER] //
bscheltinga 23:c9c9c1d7864a 53 emgLeft = emgL.read();
bscheltinga 23:c9c9c1d7864a 54 emgLeft = fabs(emgLeft);
bscheltinga 23:c9c9c1d7864a 55 emgL_L = Lowpassfilter.step(emgLeft); //emgL_L Linker bicep met lowpass filter
bscheltinga 24:a1ce6a87103c 56 emgL_H = Highpassfilter.step(emgLeft); //emgL_L met Highpassfilter
bscheltinga 25:38ab6dd19d9b 57 emgL_Notch = Highpassfilter.step(emgL_L); //Highpass filter over de lowpass filter = Notch
bscheltinga 23:c9c9c1d7864a 58
bscheltinga 26:1090acf98efc 59 // [MOVING AVERAGE] // Mov avg van lowpass filter
bscheltinga 25:38ab6dd19d9b 60 B0 = emgL_L;
bscheltinga 25:38ab6dd19d9b 61 MOVAVG=B0*0.1+B1*0.1+B2*0.1+B3*0.1+B4*0.1+B5*0.1+B6*0.1+B7*0.1+B8*0.1+B9*0.1;
bscheltinga 24:a1ce6a87103c 62 B9=B8;
bscheltinga 24:a1ce6a87103c 63 B8=B7;
bscheltinga 24:a1ce6a87103c 64 B7=B6;
bscheltinga 24:a1ce6a87103c 65 B6=B5;
bscheltinga 24:a1ce6a87103c 66 B5=B4;
bscheltinga 24:a1ce6a87103c 67 B4=B3;
bscheltinga 24:a1ce6a87103c 68 B3=B2;
bscheltinga 24:a1ce6a87103c 69 B2=B1;
bscheltinga 24:a1ce6a87103c 70 B1=B0;
bscheltinga 23:c9c9c1d7864a 71
bscheltinga 25:38ab6dd19d9b 72 scope.set(0,emgLeft);
bscheltinga 22:14abcfdd1554 73 scope.set(1,emgL_L);
bscheltinga 24:a1ce6a87103c 74 scope.set(2,emgL_H);
bscheltinga 25:38ab6dd19d9b 75 scope.set(3,MOVAVG);
bscheltinga 20:d5f5c60adc43 76 scope.send();
bscheltinga 21:594915ba2bf9 77 led1 = 1; //De led gaat flikkeren wanneer deze loop uitgevoerd wordt
bscheltinga 20:d5f5c60adc43 78
bscheltinga 14:57d38789bff2 79 }
bscheltinga 14:57d38789bff2 80 }