Remco Dasselaar / Mbed 2 deprecated TotalControlEmg2

Dependencies:   HIDScope MODSERIAL QEI TextLCD mbed

Fork of TotalControlEmg2 by Remco Dasselaar

Committer:
Bartvaart
Date:
Wed Oct 14 14:49:47 2015 +0000
Revision:
21:8fe8419de3e9
Parent:
20:11e1244ad2ad
Child:
22:c1811e60bfce
Alles werkt goed, alleen het kalibreren stopt niet helemaal zoals gewenst waardoor bij het indrukken van de knop voor her-kalibratie problemen kunnen ontstaan

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 20:11e1244ad2ad 31 ymin = KalibratieMin(readymin);
Bartvaart 19:6c0245063b96 32 wait(1);
Bartvaart 20:11e1244ad2ad 33 ymax = KalibratieMax(readymax);
Bartvaart 19:6c0245063b96 34
Bartvaart 18:eec0880fcded 35 // bepalen van thresholds voor aan/uit
Bartvaart 21:8fe8419de3e9 36 thresholdlow = 10 * ymin; // standaardwaarde
Bartvaart 20:11e1244ad2ad 37 thresholdmid = 0.5 * ymax; // afhankelijk van max output gebruiker
Bartvaart 21:8fe8419de3e9 38 thresholdhigh = 0.8 * 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 20:11e1244ad2ad 45 double y = Filterdesigns(u);
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 }