Poep Hoofd / Mbed 2 deprecated PoolRobot_Code

Dependencies:   HIDScope mbed MODSERIAL QEI

Committer:
poephoofd
Date:
Mon Oct 16 08:01:54 2017 +0000
Revision:
3:9c5aea210f1d
Parent:
2:a08bff88216d
Child:
5:4c27dea81e4c
New Version, added channel 4. Volatile doubles.

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