Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: HIDScope MODSERIAL biquadFilter mbed
Fork of Milestone_sample by
Diff: main.cpp
- Revision:
- 29:c72e49a3edbb
- Parent:
- 28:4534a096b677
- Child:
- 30:12b2107dc139
--- a/main.cpp Wed Oct 24 17:56:55 2018 +0000
+++ b/main.cpp Wed Oct 24 18:32:51 2018 +0000
@@ -13,8 +13,9 @@
AnalogIn emg0_in (A0); //First raw EMG signal input
AnalogIn emg1_in (A1); //Second raw EMG signal input
AnalogIn emg2_in (A2); //Third raw EMG signal input
+DigitalOut myled (LED_GREEN); //Led to test if the code works
-MODSERIAL pc(USBTX, USBRX); //Serial communication to see if the code works step by step
+//MODSERIAL pc(USBTX, USBRX); //Serial communication to see if the code works step by step, turn on if hidscope is off
HIDScope scope( 6 ); //HIDScope set to 3x2 channels for 3 muscles
@@ -27,13 +28,12 @@
const float T = 0.002f; //Ticker period
//EMG filter
-double emg0_filt, emg1_filt, emg2_filt; //Variables for filtered EMG data channel 0, 1 and 2
+double emg0_filt, emg1_filt, emg2_filt; //Variables for filtered EMG data channel 0, 1 and 2
double emg0_raw, emg1_raw, emg2_raw;
const int windowsize = 150; //Size of the array over which the moving average (MovAg) is calculated. (random number)
double sum, sum1, sum2, sum3; //variables used to sum elements in array
double StoreArray0[windowsize], StoreArray1[windowsize], StoreArray2[windowsize]; //Empty arrays to calculate MoveAg
-double movAg0, movAg1, movAg2; //outcome of MovAg (moet dit een array zijn??)
-
+double movAg0, movAg1, movAg2; //outcome of MovAg (moet dit een array zijn??)
//Biquad //Variables for the biquad band filters (alle 3 dezelfde maar je kan niet 3x 'emg0band' aanroepen ofzo)
BiQuadChain emg0filter;
@@ -61,36 +61,36 @@
/* Set the sampled emg values in channel 0 (the first channel) and 1 (the second channel) in the 'HIDScope' instance named 'scope' */
scope.set(0,emg0_raw);
scope.set(1,emg0_filt);
- //scope.set(1,movAg0); //als moving average werkt
+ //scope.set(1,movAg0); //als moving average werkt
scope.set(2,emg1_raw);
scope.set(3,emg1_filt);
- //scope.set(3,movAg1); //als moving average werkt
+ //scope.set(3,movAg1); //als moving average werkt
scope.set(4,emg2_raw);
scope.set(5,emg2_filt);
- //scope.set(5,movAg2); //als moving average werkt
+ //scope.set(5,movAg2); //als moving average werkt
scope.send(); //Send data to HIDScope server
}
void EMGFilter0()
{
- double emg0_raw = emg0_in.read(); //give name to raw EMG0 data
+ double emg0_raw = emg0_in.read(); //give name to raw EMG0 data
double emg0_filt_x = emg0filter.step(emg0_raw); //Use biquad chain to filter raw EMG data
- double emg0_filt = abs(emg0_filt_x); //rectifier. LET OP: volgorde filter: band-notch-rectifier. Eerst band-rect-notch, stel er komt iets raars uit, dan Notch uit de biquad chain halen en aparte chain voor aanmaken.
+ double emg0_filt = abs(emg0_filt_x); //rectifier. LET OP: volgorde filter: band-notch-rectifier. Eerst band-rect-notch, stel er komt iets raars uit, dan Notch uit de biquad chain halen en aparte chain voor aanmaken.
}
void EMGFilter1()
{
- double emg1_raw = emg1_in.read(); //give name to raw EMG1 data
+ double emg1_raw = emg1_in.read(); //give name to raw EMG1 data
double emg1_filt_x = emg1filter.step(emg1_raw); //Use biquad chain to filter raw EMG data
- double emg1_filt = abs(emg1_filt_x); //rectifier. LET OP: volgorde filter: band-notch-rectifier. Eerst band-rect-notch.
+ double emg1_filt = abs(emg1_filt_x); //rectifier. LET OP: volgorde filter: band-notch-rectifier. Eerst band-rect-notch.
}
void EMGFilter2()
{
- double emg2_raw = emg2_in.read(); //Give name to raw EMG1 data
+ double emg2_raw = emg2_in.read(); //Give name to raw EMG1 data
double emg2_filt_x = emg2filter.step(emg2_raw); //Use biquad chain to filter raw EMG data
- double emg2_filt = abs(emg2_filt_x); //Rectifier. LET OP: volgorde filter: band-notch-rectifier.
+ double emg2_filt = abs(emg2_filt_x); //Rectifier. LET OP: volgorde filter: band-notch-rectifier.
}
void MovAg() //Calculate moving average (MovAg), klopt nog niet!!
@@ -102,7 +102,7 @@
StoreArray2[i] = StoreArray2[i-1];
}
- StoreArray0[0] = emg0_filt; //Stores the latest datapoint of the filtered signal in the first element of the array
+ StoreArray0[0] = emg0_filt; //Stores the latest datapoint of the filtered signal in the first element of the array
StoreArray1[0] = emg1_filt;
StoreArray2[0] = emg2_filt;
@@ -133,21 +133,17 @@
int main()
{
- pc.baud(115200);
- pc.printf("hello\n\r"); //Check, does it work?
+ //pc.baud(115200);
+ //pc.printf("Hello World!\r\n"); //Serial communication only works if hidscope is turned off.
+ myled == 0; //Does the code work?
emg0filter.add( &emg0band1 ).add( &emg0band2 ).add( &emg0band3 ).add( ¬ch1 ); //attach biquad elements to chain
emg1filter.add( &emg1band1 ).add( &emg1band2 ).add( &emg1band3 ).add( ¬ch2 );
emg2filter.add( &emg2band1 ).add( &emg2band2 ).add( &emg2band3 ).add( ¬ch3 );
- while(true)
- {
-
filter_tick.attach(&emg_filtered,T); //EMG signals filtered every T sec.
MovAg_tick.attach(&MovAg,T); //Moving average calculation every T sec.
HIDScope_tick.attach(&HIDScope_sample,T); //EMG signals raw + filtered to HIDScope every T sec.
-
- pc.printf("\n\r Moving average EMG 3 is: %d \n\r",movAg2);
- }
+ while(1){}
}
