Werkend EMG script

Dependencies:   HIDScope MODSERIAL biquadFilter mbed

Fork of EMG by Tom Tom

main.cpp

Committer:
Margreeth95
Date:
2015-10-06
Revision:
18:12250e88037f
Parent:
16:9f7797ffd0fb
Child:
19:34456a1effc4

File content as of revision 18:12250e88037f:

#include "mbed.h"
#include "HIDScope.h"

//Define objects
    AnalogIn    EMG_left(A0); //Analog input
    AnalogIn    EMG_right(A1);   
    Ticker      SampleEMG;
    Ticker      ScopeTimer;
    HIDScope    scope(1);

// constant values
    double EMG_L_f_v1 = 0, EMG_L_f_v2 = 0;

// coëfficiënten
    const double BiGainEMG_Lh = 1, BiGainEMG_Ll=1;
    const double EMG_L_fh_a1 = -0.96608908283*BiGainEMG_Lh, EMG_L_fh_a2 = 0.0*BiGainEMG_Lh, EMG_L_fh_b0 = 1.0*BiGainEMG_Lh, EMG_L_fh_b1 = 1.0*BiGainEMG_Lh, EMG_L_fh_b2 = 0.0*BiGainEMG_Lh; //coefficients for high-pass filter
    const double EMG_L_fl_a1 = -0.96608908283*BiGainEMG_Ll, EMG_L_fl_a2 = 0.0*BiGainEMG_Ll, EMG_L_fl_b0 = 1.0*BiGainEMG_Ll, EMG_L_fl_b1 = 1.0*BiGainEMG_Ll, EMG_L_fl_b2 = 0.0*BiGainEMG_Ll; // coefficients for low-pass filter

// HIDScope
    void ScopeSend()
    {
        scope.set(0, EMG_left.read());
        scope.send();
    }
    
// Biquad filter
    double biquad( double u, double &v1, double &v2, const double a1, const double a2, const double b0, const double b1, const double b2 )
    {
        double v = u - a1*v1 - a2*v2;
        double y = b0*v + b1*v1 + b2*v2;
        v2 = v1; v1 = v;
        return y;
    }
            
// EMG filtering function
void EMGfilter()
{
    double EMG_left_value = EMG_left.read();
    double EMG_L_fh = biquad(EMG_left_value, EMG_L_f_v1, EMG_L_f_v2, EMG_L_fh_a1, EMG_L_fh_a2, EMG_L_fh_b0, EMG_L_fh_b1, EMG_L_fh_b2); 
    double EMG_L_fhl = biquad(EMG_L_fh, EMG_L_f_v1, EMG_L_f_v2, EMG_L_fl_a1, EMG_L_fl_a2, EMG_L_fl_b0, EMG_L_fl_b1, EMG_L_fl_b2); 
}

int main()
{
    SampleEMG.attach(&EMGfilter, 0.002);
    ScopeTimer.attach(&ScopeSend, 0.002);
    while(1) {}
}