Remco Dasselaar / Mbed 2 deprecated TotalControlEmg2

Dependencies:   HIDScope MODSERIAL QEI TextLCD mbed

Fork of TotalControlEmg2 by Remco Dasselaar

Committer:
Bartvaart
Date:
Thu Oct 15 10:00:54 2015 +0000
Revision:
22:c1811e60bfce
Parent:
21:8fe8419de3e9
Child:
23:855c4bcb2284
Deze versie lijkt goed te werken. Go flag bij ticker gebruikt om zo te zorgen dat kalibratie tussendoor ook goed blijft gaan.

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 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 20:11e1244ad2ad 32 ymin = KalibratieMin(readymin);
Bartvaart 19:6c0245063b96 33 wait(1);
Bartvaart 20:11e1244ad2ad 34 ymax = KalibratieMax(readymax);
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 22:c1811e60bfce 67 if(go_flag) {
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 }