EMG signals all around zero, not showing differences anymore in hidscope

Dependencies:   HIDScope MODSERIAL biquadFilter mbed

Fork of a_check_emg_filtered_without_cal by Daniqe Kottelenberg

Committer:
daniQQue
Date:
Fri Oct 21 14:07:00 2016 +0000
Revision:
9:464c447ce82d
Parent:
8:cd0cb71b69f2
Child:
10:7255b59224cc
filter werkt nog niet

Who changed what in which revision?

UserRevisionLine numberNew contents of line
daniQQue 0:34c739fcc3e0 1 //libraries
daniQQue 0:34c739fcc3e0 2 #include "mbed.h"
daniQQue 0:34c739fcc3e0 3 #include "HIDScope.h"
daniQQue 4:7d9ca9c1dcce 4 #include "biquadFilter.h"
daniQQue 0:34c739fcc3e0 5
daniQQue 0:34c739fcc3e0 6 //Define objects
daniQQue 0:34c739fcc3e0 7 AnalogIn emg0( A0 ); //analog in to get EMG in to c++
daniQQue 0:34c739fcc3e0 8 Ticker sample_timer; //ticker
daniQQue 8:cd0cb71b69f2 9 HIDScope scope( 3); //open 3 channels in hidscope
daniQQue 8:cd0cb71b69f2 10 DigitalOut richting_motor1(D4); //motor1 direction output
daniQQue 8:cd0cb71b69f2 11 PwmOut pwm_motor1(D5); //motor1 velocity output
daniQQue 0:34c739fcc3e0 12 DigitalOut led(LED_GREEN);
daniQQue 0:34c739fcc3e0 13
daniQQue 0:34c739fcc3e0 14 //define variables
daniQQue 0:34c739fcc3e0 15 double emg_0_value;
daniQQue 9:464c447ce82d 16 double emg_gefilterd_high;
daniQQue 9:464c447ce82d 17 double emg_gefilterd_low;
daniQQue 7:42d0e38196f1 18 double emg_abs;
daniQQue 7:42d0e38196f1 19 int onoffsignal=0;
daniQQue 7:42d0e38196f1 20 double cut_off_value=0.05; //gespecifeerd door floortje
daniQQue 5:688b1b5530d8 21
daniQQue 9:464c447ce82d 22 biquadFilter filterhigh1(9.1497e-01,-1.8299e+00,9.1497e-01, -1.8227e+00, 8.3718e-01);
daniQQue 9:464c447ce82d 23 biquadFilter filterlow1 (3.9130e-05, 7.8260e-05, 3.9130e-05, -1.9822e+00, 9.8239e-01);
daniQQue 8:cd0cb71b69f2 24
daniQQue 0:34c739fcc3e0 25 void filter(){
daniQQue 0:34c739fcc3e0 26 emg_0_value=emg0.read(); //read the emg value from the elektrodes
daniQQue 9:464c447ce82d 27 emg_gefilterd_high= filterhigh1.step(emg_0_value);
daniQQue 9:464c447ce82d 28 emg_abs=abs(emg_gefilterd_high);
daniQQue 9:464c447ce82d 29 emg_gefilterd_low = filterlow1.step(emg_abs);
daniQQue 0:34c739fcc3e0 30 led=!led;
daniQQue 7:42d0e38196f1 31
daniQQue 7:42d0e38196f1 32 if (emg_abs>cut_off_value)
daniQQue 7:42d0e38196f1 33 {onoffsignal=1;}
daniQQue 7:42d0e38196f1 34
daniQQue 7:42d0e38196f1 35 else
daniQQue 7:42d0e38196f1 36 {onoffsignal=0;}
daniQQue 7:42d0e38196f1 37
daniQQue 0:34c739fcc3e0 38 //send signals to scope
daniQQue 1:30d46f7e5150 39 scope.set(0, emg_0_value ); //set emg signal to scope in channel 1
daniQQue 9:464c447ce82d 40 scope.set(1, emg_gefilterd_low);
daniQQue 7:42d0e38196f1 41 scope.set(2, onoffsignal);
daniQQue 0:34c739fcc3e0 42 scope.send(); //send all the signals to the scope
daniQQue 0:34c739fcc3e0 43 }
daniQQue 0:34c739fcc3e0 44
daniQQue 0:34c739fcc3e0 45 //program
daniQQue 0:34c739fcc3e0 46
daniQQue 0:34c739fcc3e0 47 int main()
daniQQue 0:34c739fcc3e0 48 {
daniQQue 0:34c739fcc3e0 49 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
daniQQue 4:7d9ca9c1dcce 50
daniQQue 0:34c739fcc3e0 51 //endless loop
daniQQue 0:34c739fcc3e0 52
daniQQue 0:34c739fcc3e0 53 while(1)
daniQQue 8:cd0cb71b69f2 54 {
daniQQue 8:cd0cb71b69f2 55 if (onoffsignal==1)
daniQQue 8:cd0cb71b69f2 56 {
daniQQue 8:cd0cb71b69f2 57 richting_motor1 = 0; //motordirection (ccw)
daniQQue 9:464c447ce82d 58 pwm_motor1 = 5; //motorspeed 1
daniQQue 8:cd0cb71b69f2 59
daniQQue 8:cd0cb71b69f2 60 }
daniQQue 8:cd0cb71b69f2 61 else if(onoffsignal==0)
daniQQue 8:cd0cb71b69f2 62 {
daniQQue 8:cd0cb71b69f2 63 richting_motor1 = 0; //motordirection (ccw)
daniQQue 8:cd0cb71b69f2 64 pwm_motor1 = 0; //motorspeed 0
daniQQue 8:cd0cb71b69f2 65
daniQQue 8:cd0cb71b69f2 66 }
daniQQue 8:cd0cb71b69f2 67
daniQQue 8:cd0cb71b69f2 68 }
daniQQue 0:34c739fcc3e0 69
daniQQue 0:34c739fcc3e0 70 }