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 biquadFilter mbed
Diff: main.cpp
- Revision:
- 9:81637351bbd1
- Parent:
- 7:a928724ef731
--- a/main.cpp Thu Oct 27 09:57:26 2016 +0000
+++ b/main.cpp Thu Oct 27 10:27:08 2016 +0000
@@ -44,8 +44,10 @@
AnalogIn emg1( A1 );
AnalogIn emg2( A2 );
+//Go flag for emg sample
bool go_emgSample;
-bool go_find_minmax;
+
+//Variables for intermediate filter values
double emg_sample[3];
double emg_low_passed_200[3];
double emg_notch[3];
@@ -54,18 +56,7 @@
double min_emg[3];
double max_emg[3];
-const int n = 100;
-int counter = 0;
-double RMSArray0[n] = {0};
-double RMSArray1[n] = {0};
-double RMSArray2[n] = {0};
-double RMS0;
-double RMS1;
-double RMS2;
-double SumRMS0;
-double SumRMS1;
-double SumRMS2;
-
+//Calculating normalized outputs
double input_force0;
double input_force1;
double input_force2;
@@ -123,77 +114,56 @@
//low pass the rectified emg signal
emg_low_passed[0] = low_pass.step(fabs(emg_high_passed[0]));
- //Calculating RMS
- SumRMS0 -= pow(RMSArray0[counter],2);
- SumRMS1 -= pow(RMSArray1[counter],2);
- SumRMS2 -= pow(RMSArray2[counter],2);
-
- RMSArray0[counter] = emg_high_passed[0];
- RMSArray1[counter] = emg_high_passed[1];
- RMSArray2[counter] = emg_high_passed[2];
-
- SumRMS0 += pow(RMSArray0[counter],2);
- SumRMS1 += pow(RMSArray1[counter],2);
- SumRMS2 += pow(RMSArray2[counter],2);
-
- counter++;
- if (counter == n){
- counter = 0;
- }
-
- RMS0 = sqrt(SumRMS0/n);
- RMS1 = sqrt(SumRMS1/n);
- RMS2 = sqrt(SumRMS2/n);
//Calculating min value and max value of emg signal
if(state == STATE_CALIBRATION)
{
if (start_calibration == 0) {
- min_emg[0] = RMS0;
- max_emg[0] = RMS0;
- min_emg[1] = RMS1;
- max_emg[1] = RMS1;
- min_emg[2] = RMS2;
- max_emg[2] = RMS2;
+ min_emg[0] = emg_low_passed[0];
+ max_emg[0] = emg_low_passed[0];
+ min_emg[1] = emg_low_passed[1];
+ max_emg[1] = emg_low_passed[1];
+ min_emg[2] = emg_low_passed[2];
+ max_emg[2] = emg_low_passed[2];
start_calibration++;
}
else {
//finding min and max of emg0
- if (RMS0 < min_emg[0]) {
- min_emg[0] = RMS0;
+ if (emg_low_passed[0] < min_emg[0]) {
+ min_emg[0] = emg_low_passed[0];
}
- else if (RMS0 > max_emg[0]) {
- max_emg[0] = RMS0;
+ else if (emg_low_passed[0] > max_emg[0]) {
+ max_emg[0] = emg_low_passed[0];
}
//finding min and max of emg1
- if (RMS1 < min_emg[1]) {
- min_emg[1] = RMS1;
+ if (emg_low_passed[1] < min_emg[1]) {
+ min_emg[1] = emg_low_passed[1];
}
- else if (RMS1 > max_emg[1]) {
- max_emg[1] = RMS1;
+ else if (emg_low_passed[1] > max_emg[1]) {
+ max_emg[1] = emg_low_passed[1];
}
//finding min and max of emg2
- if (RMS2 < min_emg[2]) {
- min_emg[2] = RMS2;
+ if (emg_low_passed[2] < min_emg[2]) {
+ min_emg[2] = emg_low_passed[2];
}
- else if (RMS2 > max_emg[2]) {
- max_emg[2] = RMS2;
+ else if (emg_low_passed[2] > max_emg[2]) {
+ max_emg[2] = emg_low_passed[2];
}
}
}
//calculating input_forces for controller
- input_force0 = (RMS0 - min_emg[0])/(max_emg[0]-min_emg[0]);
- input_force1 = (RMS1 - min_emg[1])/(max_emg[1]-min_emg[1]);
- input_force2 = (RMS2 - min_emg[2])/(max_emg[2]-min_emg[2]);
+ input_force0 = (emg_low_passed[0] - min_emg[0])/(max_emg[0]-min_emg[0]);
+ input_force1 = (emg_low_passed[1] - min_emg[1])/(max_emg[1]-min_emg[1]);
+ input_force2 = (emg_low_passed[2] - min_emg[2])/(max_emg[2]-min_emg[2]);
//Send scope data
scope.set(0,emg_sample[0]);
scope.set(1,emg_notch[0]);
scope.set(2,emg_high_passed[0]);
- scope.set(3,emg_low_passed[0]);
+ scope.set(3,input_force0);
//scope.set(2,emg_low_passed[0]);
//scope.set(3,input_force2);
scope.send();