Filter emg 7-10-15 v1

Dependencies:   HIDScope mbed MODSERIAL

Committer:
Bartvaart
Date:
Tue Oct 13 12:28:32 2015 +0000
Revision:
19:6c0245063b96
Parent:
18:eec0880fcded
Child:
20:11e1244ad2ad
met extra filter voor trilling kabels;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Bartvaart 0:557b1ff83a8a 1 #include "mbed.h"
Bartvaart 7:040591b3f019 2 #include "HIDScope.h"
Bartvaart 5:b400209df739 3 #include "Filterdesigns.h"
Bartvaart 17:cfe44346645c 4 #include "Kalibratie.h"
Bartvaart 17:cfe44346645c 5 #include "MODSERIAL.h" //bugfix
Bartvaart 18:eec0880fcded 6 #include "Mode.h"
Bartvaart 0:557b1ff83a8a 7
Bartvaart 7:040591b3f019 8 AnalogIn emg(A0); //Analog input van emg kabels
Bartvaart 18:eec0880fcded 9 HIDScope scope(3); //3 scopes
Bartvaart 0:557b1ff83a8a 10 Ticker EMGticker;
Bartvaart 17:cfe44346645c 11 MODSERIAL pc(USBTX, USBRX); //bugfix
Bartvaart 17:cfe44346645c 12 DigitalOut LedBlue(LED3);
Bartvaart 19:6c0245063b96 13 DigitalIn button(PTA4);
Bartvaart 0:557b1ff83a8a 14
Bartvaart 0:557b1ff83a8a 15 //Sample frequentie
Bartvaart 15:c1a8f28d6583 16 double Fs = 500; //Hz
Bartvaart 1:98be4152a539 17 double t = 1/ Fs; // voor EMGticker
Bartvaart 5:b400209df739 18
Bartvaart 17:cfe44346645c 19 bool readymax = 0;
Bartvaart 17:cfe44346645c 20 bool readymin = 0;
Bartvaart 18:eec0880fcded 21 double ymin;
Bartvaart 18:eec0880fcded 22 double ymax;
Bartvaart 18:eec0880fcded 23 double thresholdlow;
Bartvaart 18:eec0880fcded 24 double thresholdmid;
Bartvaart 18:eec0880fcded 25 double thresholdhigh;
Bartvaart 18:eec0880fcded 26
Bartvaart 19:6c0245063b96 27 void EMGkalibratie()
Bartvaart 19:6c0245063b96 28 {
Bartvaart 18:eec0880fcded 29 LedBlue = 1;
Bartvaart 18:eec0880fcded 30 Init();
Bartvaart 18:eec0880fcded 31 ymax = KalibratieMax(readymax);
Bartvaart 19:6c0245063b96 32 wait(1);
Bartvaart 18:eec0880fcded 33 ymin = KalibratieMin(readymin);
Bartvaart 19:6c0245063b96 34
Bartvaart 18:eec0880fcded 35 // bepalen van thresholds voor aan/uit
Bartvaart 19:6c0245063b96 36 thresholdlow = 0.08; // standaardwaarde
Bartvaart 19:6c0245063b96 37 thresholdmid = 0.3 * ymax; // afhankelijk van max output gebruiker
Bartvaart 19:6c0245063b96 38 thresholdhigh = 0.4 * ymax;
Bartvaart 19:6c0245063b96 39 }
Bartvaart 7:040591b3f019 40
Bartvaart 19:6c0245063b96 41 void EMGfilter()
Bartvaart 19:6c0245063b96 42 {
Bartvaart 7:040591b3f019 43 //uitlezen emg signaal
Bartvaart 7:040591b3f019 44 double u = emg.read();
Bartvaart 18:eec0880fcded 45 double y = Filterdesigns(u, ymin);
Bartvaart 18:eec0880fcded 46 //pc.printf("%f \n",y); //bugfix
Bartvaart 7:040591b3f019 47 // Plotten in HIDscope
Bartvaart 18:eec0880fcded 48 int mode = Mode(y, ymax, thresholdlow, thresholdmid, thresholdhigh); //bepaald welk signaal de motor krijgt (aan, uit, middel)
Bartvaart 15:c1a8f28d6583 49 scope.set(0,u); //ongefilterde waarde naar scope 1
Bartvaart 15:c1a8f28d6583 50 scope.set(1,y); //gefilterde waarde naar scope 2
Bartvaart 19:6c0245063b96 51 scope.set(2,mode);
Bartvaart 7:040591b3f019 52 scope.send(); //stuur de waardes naar HIDscope
Bartvaart 19:6c0245063b96 53 }
Bartvaart 0:557b1ff83a8a 54
Bartvaart 19:6c0245063b96 55 int main()
Bartvaart 19:6c0245063b96 56 {
Bartvaart 19:6c0245063b96 57 while(1) {
Bartvaart 19:6c0245063b96 58 if(readymax == 0 || readymin == 0) {
Bartvaart 19:6c0245063b96 59 EMGkalibratie();
Bartvaart 19:6c0245063b96 60 pc.printf("ymax = %f en ymin = %f \n",ymax, ymin); //bugfix
Bartvaart 19:6c0245063b96 61 }
Bartvaart 17:cfe44346645c 62 EMGticker.attach(&EMGfilter, t); //500H
Bartvaart 19:6c0245063b96 63 while(readymax == 1 && readymin == 1) {
Bartvaart 19:6c0245063b96 64 if(button == 0) {
Bartvaart 19:6c0245063b96 65 readymax = 0;
Bartvaart 19:6c0245063b96 66 readymin = 0;
Bartvaart 19:6c0245063b96 67 }
Bartvaart 17:cfe44346645c 68 }
Bartvaart 0:557b1ff83a8a 69 }
Bartvaart 19:6c0245063b96 70 }