Poep Hoofd / Mbed 2 deprecated PoolRobot_Code

Dependencies:   HIDScope mbed MODSERIAL QEI

Committer:
poephoofd
Date:
Fri Oct 13 09:45:14 2017 +0000
Revision:
0:2d9dae739559
Child:
1:50ae89200a53
Initial Version Final Code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
poephoofd 0:2d9dae739559 1 #include "mbed.h"
poephoofd 0:2d9dae739559 2 #include"BiQuadFilter.h"
poephoofd 0:2d9dae739559 3 #include "HIDScope.h"
poephoofd 0:2d9dae739559 4
poephoofd 0:2d9dae739559 5 //Initialize Analog EMG inputs
poephoofd 0:2d9dae739559 6 AnalogIn EMGData_1( A0 );
poephoofd 0:2d9dae739559 7 AnalogIn EMGData_2( A1 );
poephoofd 0:2d9dae739559 8 AnalogIn EMGData_3( A2 );
poephoofd 0:2d9dae739559 9
poephoofd 0:2d9dae739559 10 HIDScope scope(4); // We’re going to send 4 channels of data
poephoofd 0:2d9dae739559 11 Ticker MainTicker;
poephoofd 0:2d9dae739559 12 MODSERIAL pc(USBTX, USBRX);
poephoofd 0:2d9dae739559 13
poephoofd 0:2d9dae739559 14 const double Ts= 0.002; //fs = 500Hz
poephoofd 0:2d9dae739559 15
poephoofd 0:2d9dae739559 16 double EMG_MainsReject_1 = 0;
poephoofd 0:2d9dae739559 17 double EMG_MainsReject_2 = 0;
poephoofd 0:2d9dae739559 18 double EMG_MainsReject3 = 0;
poephoofd 0:2d9dae739559 19 double EMG_Filtered_1 = 0;
poephoofd 0:2d9dae739559 20 double EMG_Filtered_2 = 0;
poephoofd 0:2d9dae739559 21 double EMG_Filtered_3 = 0;
poephoofd 0:2d9dae739559 22 double EMG_Abs_1 = 0;
poephoofd 0:2d9dae739559 23 double EMG_Abs_2 = 0;
poephoofd 0:2d9dae739559 24 double EMG_Abs_3 = 0;
poephoofd 0:2d9dae739559 25 double EMG_Envelope_1 = 0;
poephoofd 0:2d9dae739559 26 double EMG_Envelope_2 = 0;
poephoofd 0:2d9dae739559 27 double EMG_Envelope_3 = 0;
poephoofd 0:2d9dae739559 28
poephoofd 0:2d9dae739559 29 int main(void)
poephoofd 0:2d9dae739559 30 {
poephoofd 0:2d9dae739559 31 pc.baud(115200); //Set Baud rate for Serial communication
poephoofd 0:2d9dae739559 32 MainTicker.attach(&ReadAndFilterEMG, Ts); //Attach time based interrupt
poephoofd 0:2d9dae739559 33
poephoofd 0:2d9dae739559 34 //High Pass Filter
poephoofd 0:2d9dae739559 35 double A0=1, A1=-1.475480443592646, A2=0.586919508061190,
poephoofd 0:2d9dae739559 36 B0=0.765599987913459, B1=-1.531199975826918, B2=0.765599987913459;
poephoofd 0:2d9dae739559 37
poephoofd 0:2d9dae739559 38 BiQuad HiPass(B0, B1, B2, A0, A1, A2);
poephoofd 0:2d9dae739559 39 /***********/
poephoofd 0:2d9dae739559 40
poephoofd 0:2d9dae739559 41 //Low Pass Filter
poephoofd 0:2d9dae739559 42 double A0=1, A1=-1.307285028849324, A2=0.491812237222575,
poephoofd 0:2d9dae739559 43 B0=0.0009446918438401619, B1=0.001889383687680, B2=0.0009446918438401619;
poephoofd 0:2d9dae739559 44
poephoofd 0:2d9dae739559 45 BiQuad LoPass(B0, B1, B2, A0, A1, A2);
poephoofd 0:2d9dae739559 46 /***********/
poephoofd 0:2d9dae739559 47
poephoofd 0:2d9dae739559 48 //Notch Filter
poephoofd 0:2d9dae739559 49 double A0=1, A1=-1.525271192436899, A2=0.881618592363190,
poephoofd 0:2d9dae739559 50 B0=0.940809296181595, B1=-1.525271192436899, B2=0.940809296181595;
poephoofd 0:2d9dae739559 51
poephoofd 0:2d9dae739559 52 BiQuad MainsReject(B0, B1, B2, A0, A1, A2);
poephoofd 0:2d9dae739559 53 /***********/
poephoofd 0:2d9dae739559 54
poephoofd 0:2d9dae739559 55 while(true)
poephoofd 0:2d9dae739559 56 {
poephoofd 0:2d9dae739559 57
poephoofd 0:2d9dae739559 58 }
poephoofd 0:2d9dae739559 59
poephoofd 0:2d9dae739559 60 return 0;
poephoofd 0:2d9dae739559 61 }
poephoofd 0:2d9dae739559 62
poephoofd 0:2d9dae739559 63 void ReadAndFilterEMG()
poephoofd 0:2d9dae739559 64 {
poephoofd 0:2d9dae739559 65 //MainsReject Filter EMG Data
poephoofd 0:2d9dae739559 66 EMG_MainsReject_1 = MainsReject.step(EMGData_1);
poephoofd 0:2d9dae739559 67 EMG_MainsReject_2 = MainsReject.step(EMGData_2);
poephoofd 0:2d9dae739559 68 EMG_MainsReject_3 = MainsReject.step(EMGData_3);
poephoofd 0:2d9dae739559 69 /*****/
poephoofd 0:2d9dae739559 70
poephoofd 0:2d9dae739559 71 //High Pass Filter EMG Data
poephoofd 0:2d9dae739559 72 EMG_Filtered_1 = HiPass.step(EMG_MainsReject_1);
poephoofd 0:2d9dae739559 73 EMG_Filtered_2 = HiPass.step(EMG_MainsReject_2);
poephoofd 0:2d9dae739559 74 EMG_Filtered_3 = HiPass.step(EMG_MainsReject_3);
poephoofd 0:2d9dae739559 75 /*****/
poephoofd 0:2d9dae739559 76
poephoofd 0:2d9dae739559 77 //Abs Filtered EMG Data
poephoofd 0:2d9dae739559 78 EMG_Abs_1 = abs(EMG_Filtered_1);
poephoofd 0:2d9dae739559 79 EMG_Abs_2 = abs(EMG_Filtered_2);
poephoofd 0:2d9dae739559 80 EMG_Abs_3 = abs(EMG_Filtered_3);
poephoofd 0:2d9dae739559 81 /*****/
poephoofd 0:2d9dae739559 82
poephoofd 0:2d9dae739559 83 //Low Pass Filter
poephoofd 0:2d9dae739559 84 EMG_Envelope_1 = LoPass.step(EMG_Abs_1);
poephoofd 0:2d9dae739559 85 EMG_Envelope_2 = LoPass.step(EMG_Abs_2);
poephoofd 0:2d9dae739559 86 EMG_Envelope_3 = LoPass.step(EMG_Abs_3);
poephoofd 0:2d9dae739559 87 /*****/
poephoofd 0:2d9dae739559 88
poephoofd 0:2d9dae739559 89 //Send scope data
poephoofd 0:2d9dae739559 90 scope.set(0, EMG_Filtered_1);
poephoofd 0:2d9dae739559 91 scope.set(1, EMG_Abs_1);
poephoofd 0:2d9dae739559 92 scope.set(2, EMG_Envelope_1);
poephoofd 0:2d9dae739559 93
poephoofd 0:2d9dae739559 94 scope.send();
poephoofd 0:2d9dae739559 95 /*****/
poephoofd 0:2d9dae739559 96
poephoofd 0:2d9dae739559 97 }