EMG filtering; highpass, notch, abs, moving average
Dependencies: HIDScope MODSERIAL- mbed-dsp mbed
Revision 36:af949aaaba01, committed 2014-10-07
- Comitter:
- Hooglugt
- Date:
- Tue Oct 07 13:39:45 2014 +0000
- Parent:
- 35:c3182df00ec8
- Child:
- 37:2d248e64b745
- Commit message:
- alle code in main groen gemaakt en oude wbuysman script ingezet
Changed in this revision
Project_main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/Project_main.cpp Tue Oct 07 13:01:09 2014 +0000 +++ b/Project_main.cpp Tue Oct 07 13:39:45 2014 +0000 @@ -2,8 +2,8 @@ #include "MODSERIAL.h" #include "HIDScope.h" -#define TIMEB4NEXTCHOICE 1 // 1s keuzelampje blijft aan -#define TIMEBETWEENBLINK 10 // 1s voor volgende blink +#define TIMEB4NEXTCHOICE 5 // 1s keuzelampje blijft aan +#define TIMEBETWEENBLINK 50 // 1s voor volgende blink //Define objects AnalogIn emg0(PTB1); //Analog input biceps @@ -40,9 +40,9 @@ if(pc.rxBufferGetSize(0)-pc.rxBufferGetCount() > 30) { //VRAAG: praktisch nut hiervan? print emg value wanneer buffercount groter dan 30 is //pc.printf("%u\n",emg_bivalue); } - + /* EMG-singaal van biceps en triceps worden hier gefilterd*/ - + scope.set(0,emg_bivalue); scope.set(1,emg_bifloat.read()); scope.set(2,emg_trivalue); @@ -69,24 +69,20 @@ log_timer.attach(looper, 0.001); // The looper() function will be called every 0.001 seconds (with the ticker object) // reset_timer.attach(resetlooper, 0.1); // - goto directionchoice; // goes to first while(1) for the deciding the direction - - while(1) { //Loop keuze DIRECTION -directionchoice: + while(1) { //Loop for(int i=1; i<4; i++) { if(i==1) { //red red=0; green=1; blue=1; - for (int lag=0; lag<TIMEBETWEENBLINK; lag++) { - if(emg_bifloat.read()>0.8) { // 0.8 klopt niet als grenswaarde. #nofilter + for (int lag=0; lag<50; lag++) { + if(emg_bifloat.read()>0.8) { // 0.8 klopt niet als grenswaarde. #nofilter direction = 1; - red=1; + blue = 0; green = 0; - blue = 0; - pc.printf("links "); - wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om cyaan lampje aan te zetten ter controle selectie - goto forcechoice; // goes to second while(1) for the deciding the force + red=1; + wait(2); // Tijdelijke wait om oranje lampje aan te zetten ter controle selectie + goto forcechoice; } else { wait(0.1); } @@ -96,14 +92,13 @@ red =1; green=0; blue=1; - for (int lag=0; lag<TIMEBETWEENBLINK; lag++) { + for (int lag=0; lag<50; lag++) { if(emg_bifloat.read()>0.8) { //0.8 klopt niet als grenswaarde. #nofilter direction = 2; - red=0; + blue = 0; green = 1; - blue = 0; - pc.printf("mid "); - wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om paars lampje aan te zetten ter controle selectie + red=0; + wait(2); // Tijdelijke wait om oranje lampje aan te zetten ter controle selectie goto forcechoice; } else { wait(0.1); @@ -114,14 +109,13 @@ red=1; green=1; blue=0; - for (int lag=0; lag<TIMEBETWEENBLINK; lag++) { + for (int lag=0; lag<50; lag++) { if(emg_bifloat.read()>0.8) { //0.8 klopt niet als grenswaarde. #nofilter direction = 3; - red=0; + blue = 1; green = 0; - blue = 1; - pc.printf("rechts "); - wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om oranje lampje aan te zetten ter controle selectie + red=0; + wait(2); // Tijdelijke wait om oranje lampje aan te zetten ter controle selectie goto forcechoice; } else { wait(0.1); @@ -129,78 +123,149 @@ } } } + } - while(1) { //Loop keuze FORCE forcechoice: - for(int j=1; j<4; j++) { - if(j==1) { //red - red=0; - green=1; - blue=1; - if(direction==0){ //if statement die controleert of direction 0 is (dus of triceps gereset is) - goto directionchoice; - } - for (int lag=0; lag<TIMEBETWEENBLINK; lag++) { - if(emg_bifloat.read()>0.8) { // 0.8 klopt niet als grenswaarde. #nofilter - force = 1; - red=1; - green = 0; - blue = 0; - pc.printf("zwak "); - wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om cyaan lampje aan te zetten ter controle selectie - goto choicesmade; - } else { - wait(0.1); + red = 0; + green = 0; + blue = 0; + wait(5); + + + /* + goto directionchoice; // goes to first while(1) for the deciding the direction + + while(1) { //Loop keuze DIRECTION + directionchoice: + for(int i=1; i<4; i++) { + if(i==1) { //red + red=0; + green=1; + blue=1; + for (int lag=0; lag<TIMEBETWEENBLINK; lag++) { + if(emg_bifloat.read()>0.8) { // 0.8 klopt niet als grenswaarde. #nofilter + direction = 1; + red=1; + green = 0; + blue = 0; + pc.printf("links "); + wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om cyaan lampje aan te zetten ter controle selectie + goto forcechoice; // goes to second while(1) for the deciding the force + } else { + wait(0.1); + } } } - } - if(j==2) { //green - red =1; - green=0; - blue=1; - if(direction==0){ //if statement die controleert of direction 0 is (dus of triceps gereset is) - goto directionchoice; - } - for (int lag=0; lag<TIMEBETWEENBLINK; lag++) { - if(emg_bifloat.read()>0.8) { //0.8 klopt niet als grenswaarde. #nofilter - force = 2; - red=0; - green = 1; - blue = 0; - pc.printf("normaal "); - wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om paars lampje aan te zetten ter controle selectie - goto choicesmade; - } else { - wait(0.1); + if(i==2) { //green + red =1; + green=0; + blue=1; + for (int lag=0; lag<TIMEBETWEENBLINK; lag++) { + if(emg_bifloat.read()>0.8) { //0.8 klopt niet als grenswaarde. #nofilter + direction = 2; + red=0; + green = 1; + blue = 0; + pc.printf("mid "); + wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om paars lampje aan te zetten ter controle selectie + goto forcechoice; + } else { + wait(0.1); + } } } - } - if(j==3) { //blue - red=1; - green=1; - blue=0; - if(direction==0){ //if statement die controleert of direction 0 is (dus of triceps gereset is) - goto directionchoice; - } - for (int lag=0; lag<TIMEBETWEENBLINK; lag++) { - if(emg_bifloat.read()>0.8) { //0.8 klopt niet als grenswaarde. #nofilter - force = 3; - red=0; - green = 0; - blue = 1; - pc.printf("sterk "); - wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om oranje lampje aan te zetten ter controle selectie - goto choicesmade; - } else { - wait(0.1); + if(i==3) { //blue + red=1; + green=1; + blue=0; + for (int lag=0; lag<TIMEBETWEENBLINK; lag++) { + if(emg_bifloat.read()>0.8) { //0.8 klopt niet als grenswaarde. #nofilter + direction = 3; + red=0; + green = 0; + blue = 1; + pc.printf("rechts "); + wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om oranje lampje aan te zetten ter controle selectie + goto forcechoice; + } else { + wait(0.1); + } } } } } - } -choicesmade: + while(1) { //Loop keuze FORCE + forcechoice: + for(int j=1; j<4; j++) { + if(j==1) { //red + red=0; + green=1; + blue=1; + if(direction==0){ //if statement die controleert of direction 0 is (dus of triceps gereset is) + goto directionchoice; + } + for (int lag=0; lag<TIMEBETWEENBLINK; lag++) { + if(emg_bifloat.read()>0.8) { // 0.8 klopt niet als grenswaarde. #nofilter + force = 1; + red=1; + green = 0; + blue = 0; + pc.printf("zwak "); + wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om cyaan lampje aan te zetten ter controle selectie + goto choicesmade; + } else { + wait(0.1); + } + } + } + if(j==2) { //green + red =1; + green=0; + blue=1; + if(direction==0){ //if statement die controleert of direction 0 is (dus of triceps gereset is) + goto directionchoice; + } + for (int lag=0; lag<TIMEBETWEENBLINK; lag++) { + if(emg_bifloat.read()>0.8) { //0.8 klopt niet als grenswaarde. #nofilter + force = 2; + red=0; + green = 1; + blue = 0; + pc.printf("normaal "); + wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om paars lampje aan te zetten ter controle selectie + goto choicesmade; + } else { + wait(0.1); + } + } + } + if(j==3) { //blue + red=1; + green=1; + blue=0; + if(direction==0){ //if statement die controleert of direction 0 is (dus of triceps gereset is) + goto directionchoice; + } + for (int lag=0; lag<TIMEBETWEENBLINK; lag++) { + if(emg_bifloat.read()>0.8) { //0.8 klopt niet als grenswaarde. #nofilter + force = 3; + red=0; + green = 0; + blue = 1; + pc.printf("sterk "); + wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om oranje lampje aan te zetten ter controle selectie + goto choicesmade; + } else { + wait(0.1); + } + } + } + } + } + choicesmade: - /* Vanaf hier komt de aansturing van de motor (inclusief de controller)*/ + /* Vanaf hier komt de aansturing van de motor (inclusief de controller)*/ + /* if(direction == 1 && force == 1) { // links zwak pc.printf("links zwak"); @@ -236,5 +301,5 @@ red = 0; green = 0; - blue = 0; // wit lampje + blue = 0; // wit lampje */ } \ No newline at end of file