Het totale EMG script

Dependencies:   HIDScope MODSERIAL biquadFilter mbed

Fork of EMGV5 by Laura Veenendaal

main.cpp

Committer:
Margreeth95
Date:
2015-10-08
Revision:
23:624827baffa6
Parent:
22:207d314523ef
Child:
24:6661dd6a1718

File content as of revision 23:624827baffa6:

#include "mbed.h"
#include "HIDScope.h"
#include "MODSERIAL.h"
#include "biquadFilter.h"

//Define objects
    AnalogIn    EMG_left(A0); //Analog input
    AnalogIn    EMG_right(A1);   
    Ticker      SampleEMG;
    Ticker      ScopeTimer;
    Ticker      serial;
    HIDScope    scope(4);
    DigitalOut led(LED_RED);
    MODSERIAL pc(USBTX, USBRX);
    

// Declaring variables
    double EMG_L_f_v1 = 0, EMG_L_f_v2 = 0;
    double EMG_L_fh=0;
    double EMG_left_value;
    double EMG_left_f1;
    double EMG_left_f2;
    double EMG_left_abs;
    double EMG_right_value;
    double EMG_right_f1;
    double EMG_right_f2;
    double EMG_right_abs;
    double Threshold1 = 0.08;
    double Threshold2 = 0.06;    

// coëfficiënten
    const double BiGainEMG_Lh = 0.723601, BiGainEMG_Ll=0.959332;
    const double EMGh_a1 = -1.74355513773*BiGainEMG_Lh, EMGh_a2 = 0.80079826172*BiGainEMG_Lh, EMGh_b0 = 1.0*BiGainEMG_Lh, EMGh_b1 = -1.99697722433*BiGainEMG_Lh, EMGh_b2 = 1.0*BiGainEMG_Lh; //coefficients for high-pass filter
    const double EMGl_a1 = 1.91721405106*BiGainEMG_Ll, EMGl_a2 = 0.92055427516*BiGainEMG_Ll, EMGl_b0 = 1.0*BiGainEMG_Ll, EMGl_b1 = 1.99999965990*BiGainEMG_Ll, EMGl_b2 = 1.0*BiGainEMG_Ll; // coefficients for low-pass filter
       
// Filter creation    
    biquadFilter EMG_highpass (EMGh_a1, EMGh_a2, EMGh_b0, EMGh_b1, EMGh_b2);        // creates the high pass filter
    biquadFilter EMG_lowpass (EMGl_a1, EMGl_a2, EMGl_b0, EMGl_b1, EMGl_b2);         // creates the low pass filter
    
// EMG filtering function
void EMGfilter() // Both EMG signals are filtered in one function and with the same filters
{
    EMG_left_value = EMG_left.read();
    EMG_left_f1 = EMG_highpass.step(EMG_left_value);
    EMG_left_f2 = EMG_lowpass.step(EMG_left_f1);
    EMG_left_abs = fabs(EMG_left_f2);
    
    EMG_right_value = EMG_right.read();
    EMG_right_f1 = EMG_highpass.step(EMG_right_value);
    EMG_right_f1 = EMG_lowpass.step(EMG_right_f1);
    EMG_right_abs = fabs(EMG_right_f2);
}

// HIDScope
    void ScopeSend()
    {
        scope.set(0, EMG_left_value);
        scope.set(1, EMG_left_f1);
        scope.set(2, EMG_left_f2);
        scope.set(3, EMG_left_abs);
        scope.send();
    }
    
int main()
{
    SampleEMG.attach(&EMGfilter, 0.002);
    ScopeTimer.attach(&ScopeSend, 0.002);
    while(1) 
    {
        if (EMG_left_abs > Threshold1)
        {
            led.write(0);
        }
        
        else
        {
            led.write(1);
        }
    }
}