Filter emg 7-10-15 v1
Dependencies: HIDScope mbed MODSERIAL
main.cpp@24:38cd27737a43, 2016-10-12 (annotated)
- Committer:
- Bartvaart
- Date:
- Wed Oct 12 15:31:14 2016 +0000
- Revision:
- 24:38cd27737a43
- Parent:
- 23:855c4bcb2284
andries
Who changed what in which revision?
User | Revision | Line number | New 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 | 22:c1811e60bfce | 13 | DigitalIn button(PTA4); |
Bartvaart | 0:557b1ff83a8a | 14 | |
Bartvaart | 0:557b1ff83a8a | 15 | //Sample frequentie |
Bartvaart | 22:c1811e60bfce | 16 | double Fs = 200; //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 | 22:c1811e60bfce | 26 | bool go_flag = 0; |
Bartvaart | 18:eec0880fcded | 27 | |
Bartvaart | 19:6c0245063b96 | 28 | void EMGkalibratie() |
Bartvaart | 19:6c0245063b96 | 29 | { |
Bartvaart | 18:eec0880fcded | 30 | LedBlue = 1; |
Bartvaart | 18:eec0880fcded | 31 | Init(); |
Bartvaart | 24:38cd27737a43 | 32 | ymin = KalibratieMin(readymin, emg); |
Bartvaart | 19:6c0245063b96 | 33 | wait(1); |
Bartvaart | 24:38cd27737a43 | 34 | ymax = KalibratieMax(readymax, emg); |
Bartvaart | 19:6c0245063b96 | 35 | |
Bartvaart | 18:eec0880fcded | 36 | // bepalen van thresholds voor aan/uit |
Bartvaart | 22:c1811e60bfce | 37 | thresholdlow = 8 * ymin; // standaardwaarde |
Bartvaart | 20:11e1244ad2ad | 38 | thresholdmid = 0.5 * ymax; // afhankelijk van max output gebruiker |
Bartvaart | 21:8fe8419de3e9 | 39 | thresholdhigh = 0.8 * ymax; |
Bartvaart | 22:c1811e60bfce | 40 | |
Bartvaart | 22:c1811e60bfce | 41 | pc.printf("ymax = %f en ymin = %f \n",ymax, ymin); //bugfix |
Bartvaart | 19:6c0245063b96 | 42 | } |
Bartvaart | 7:040591b3f019 | 43 | |
Bartvaart | 19:6c0245063b96 | 44 | void EMGfilter() |
Bartvaart | 19:6c0245063b96 | 45 | { |
Bartvaart | 7:040591b3f019 | 46 | //uitlezen emg signaal |
Bartvaart | 7:040591b3f019 | 47 | double u = emg.read(); |
Bartvaart | 20:11e1244ad2ad | 48 | double y = Filterdesigns(u); |
Bartvaart | 18:eec0880fcded | 49 | //pc.printf("%f \n",y); //bugfix |
Bartvaart | 7:040591b3f019 | 50 | // Plotten in HIDscope |
Bartvaart | 18:eec0880fcded | 51 | int mode = Mode(y, ymax, thresholdlow, thresholdmid, thresholdhigh); //bepaald welk signaal de motor krijgt (aan, uit, middel) |
Bartvaart | 15:c1a8f28d6583 | 52 | scope.set(0,u); //ongefilterde waarde naar scope 1 |
Bartvaart | 15:c1a8f28d6583 | 53 | scope.set(1,y); //gefilterde waarde naar scope 2 |
Bartvaart | 19:6c0245063b96 | 54 | scope.set(2,mode); |
Bartvaart | 7:040591b3f019 | 55 | scope.send(); //stuur de waardes naar HIDscope |
Bartvaart | 19:6c0245063b96 | 56 | } |
Bartvaart | 0:557b1ff83a8a | 57 | |
Bartvaart | 22:c1811e60bfce | 58 | void Go_flag(){ |
Bartvaart | 22:c1811e60bfce | 59 | go_flag = 1; |
Bartvaart | 22:c1811e60bfce | 60 | } |
Bartvaart | 22:c1811e60bfce | 61 | |
Bartvaart | 19:6c0245063b96 | 62 | int main() |
Bartvaart | 19:6c0245063b96 | 63 | { |
Bartvaart | 22:c1811e60bfce | 64 | //pc.baud(115200); |
Bartvaart | 22:c1811e60bfce | 65 | EMGticker.attach(&Go_flag, t); //500H |
Bartvaart | 19:6c0245063b96 | 66 | while(1) { |
Bartvaart | 23:855c4bcb2284 | 67 | if(go_flag) { // als deze true is dan gaat hij de onderstaande gebeuren aan |
Bartvaart | 22:c1811e60bfce | 68 | go_flag = 0; |
Bartvaart | 19:6c0245063b96 | 69 | if(button == 0) { |
Bartvaart | 19:6c0245063b96 | 70 | readymax = 0; |
Bartvaart | 19:6c0245063b96 | 71 | readymin = 0; |
Bartvaart | 22:c1811e60bfce | 72 | } |
Bartvaart | 22:c1811e60bfce | 73 | else if(readymax == 0 || readymin == 0) { |
Bartvaart | 22:c1811e60bfce | 74 | EMGkalibratie(); |
Bartvaart | 22:c1811e60bfce | 75 | } |
Bartvaart | 22:c1811e60bfce | 76 | else if(readymax == 1 && readymin == 1) { |
Bartvaart | 22:c1811e60bfce | 77 | EMGfilter(); |
Bartvaart | 19:6c0245063b96 | 78 | } |
Bartvaart | 17:cfe44346645c | 79 | } |
Bartvaart | 0:557b1ff83a8a | 80 | } |
Bartvaart | 19:6c0245063b96 | 81 | } |