emg with text

Dependencies:   HIDScope MODSERIAL biquadFilter mbed

Fork of emg_import by Daniqe Kottelenberg

main.cpp

Committer:
daniQQue
Date:
2016-10-24
Revision:
16:fd4521a4f0b3
Parent:
15:bb4a6c7836d8
Child:
17:4548efffe193

File content as of revision 16:fd4521a4f0b3:

//libraries
#include "mbed.h"
#include "HIDScope.h"
#include "BiQuad.h"  

//Define objects
AnalogIn    emg_biceps_right_in( A0 );              //analog in to get EMG from right biceps in to c++
AnalogIn    emg_tricept_right_in (A1);              //analog in to get EMG from left biceps in to c++
Ticker      sample_timer;                           //ticker
HIDScope    scope( 3);              //open 3 channels in hidscope
DigitalOut richting_motor1(D4);     //motor1 direction output    
PwmOut pwm_motor1(D5);              //motor1 velocity  output
DigitalOut  led(LED_GREEN);

//define variables
int    onoffsignal=0;
double cut_off_value=0.08; //gespecifeerd door floortje
double signalsum_right;
double signalsum_right_filter_high;
double signalsum_right_filter_high_abs;
double signalsum_right_filtered;
double biceps_right;
double triceps_right;
BiQuad filterhigh(9.5654e-01,-1.9131e+00,9.5654e-01,-1.9112e+00,9.1498e-01);
BiQuad filterlow (6.2942e-06, 1.2588e-05,6.2942e-06,-1.9929e+00,9.9292e-01);

//functions which are called in ticker
void filter(){
      
    biceps_right        =   emg_biceps_right_in.read;  //inladen data
    triceps_right       =   emg_tricept_right_in.read; //inladen data
    signalsum_right     =   biceps_right-triceps_right; // inladen data
    
    signalsum_right_filter_high     =   filterhigh.step(signalsum_right);
    signalsum_right_filter_high_abs =   fabs(signalsum_right_filter_high);
    signalsum_right_filtered        =   filterlow.step(signalsum_right_filtered);      
        
        if (signalsum_right_filtered>cut_off_value)
        {onoffsignal=1;}
          
        else 
        {onoffsignal=0;}
                      
        //send signals  to scope
        scope.set(0, biceps_right );           //set emg signal to scope in channel 1
        scope.set(1, triceps_right);    
        scope.set(2, signalsum_right_filtered);
        scope.send();                       //send all the signals to the scope
                }

//program

int main()
{  
sample_timer.attach(&filter, 0.001);        //continously execute the EMG reader and filter, it ensures that filter and sampling is executed every 1/frequency seconds

//endless loop

    while(1) 
    {    
        if (onoffsignal==1)
        {
        richting_motor1 = 0;    //motordirection (ccw)
        pwm_motor1 = 1;         //motorspeed 1  
        
        }
        else if(onoffsignal==0)
        {
        richting_motor1 = 0;    //motordirection (ccw)
        pwm_motor1 = 0;         //motorspeed 0
        
    }
        
    } 
        
}