Poep Hoofd / Mbed 2 deprecated PoolRobot_Code

Dependencies:   HIDScope mbed MODSERIAL QEI

Committer:
poephoofd
Date:
Fri Oct 13 10:16:31 2017 +0000
Revision:
2:a08bff88216d
Parent:
1:50ae89200a53
Child:
3:9c5aea210f1d
Code Compiles now

Who changed what in which revision?

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