Aukie Hooglugt / Mbed 2 deprecated EMG_Project

Dependencies:   HIDScope MODSERIAL- mbed-dsp mbed

Committer:
Hooglugt
Date:
Tue Oct 07 11:54:53 2014 +0000
Revision:
33:a78ec776dfd5
Parent:
32:aaf01b1bf05d
Child:
34:e166187e62ce
if statement toegevoegd in de force while, die controleert of direction is gereset of niet

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Hooglugt 23:8d9a623dd713 1 #include "mbed.h"
Hooglugt 23:8d9a623dd713 2 #include "MODSERIAL.h"
Hooglugt 23:8d9a623dd713 3 #include "HIDScope.h"
Hooglugt 29:7523e4a8e000 4
Hooglugt 29:7523e4a8e000 5 #define TIMEB4NEXTCHOICE 1 // 1s keuzelampje blijft aan
Hooglugt 29:7523e4a8e000 6 #define TIMEBETWEENBLINK 10 // 1s voor volgende blink
Hooglugt 23:8d9a623dd713 7
Hooglugt 23:8d9a623dd713 8 //Define objects
Hooglugt 29:7523e4a8e000 9 AnalogIn emg0(PTB1); //Analog input biceps
Hooglugt 29:7523e4a8e000 10 AnalogIn emg1(PTB2); //Analog input triceps
Hooglugt 29:7523e4a8e000 11
Hooglugt 32:aaf01b1bf05d 12 PwmOut emg_bifloat(PTD4); //Float voor EMG-waarde biceps, VRAAG: waarom we hier een PwmOut voor gebruiken - kunnen we geen float gebruiken?
Hooglugt 29:7523e4a8e000 13 PwmOut emg_trifloat(PTA4); //Float voor EMG-waarde triceps
Hooglugt 29:7523e4a8e000 14
Hooglugt 29:7523e4a8e000 15 PwmOut red(LED_RED);
Hooglugt 23:8d9a623dd713 16 PwmOut green(LED_GREEN);
Hooglugt 23:8d9a623dd713 17 PwmOut blue(LED_BLUE);
Hooglugt 29:7523e4a8e000 18
Hooglugt 33:a78ec776dfd5 19 int8_t direction = 0;
Hooglugt 32:aaf01b1bf05d 20 int8_t force = 0;
Hooglugt 23:8d9a623dd713 21
Hooglugt 23:8d9a623dd713 22 Ticker log_timer;
Hooglugt 30:5e5098b0cca6 23 Ticker reset_timer;
Hooglugt 23:8d9a623dd713 24 MODSERIAL pc(USBTX,USBRX);
Hooglugt 29:7523e4a8e000 25 HIDScope scope(4);
Hooglugt 23:8d9a623dd713 26
Hooglugt 29:7523e4a8e000 27 void looper() //nieuwe looper maken, die om een nog te bepalen tijdseenheid de emgtrifloat checked en anders nieuwe goto maakt naar vorige selectiekeuze
Hooglugt 23:8d9a623dd713 28 {
Hooglugt 29:7523e4a8e000 29 /*put raw emg value of biceps both in emg_bifloat and in emg_bivalue*/
Hooglugt 29:7523e4a8e000 30 emg_bifloat.write(emg0.read()); // read float value (0..1 = 0..3.3V) biceps
Hooglugt 29:7523e4a8e000 31 uint16_t emg_bivalue;
Hooglugt 29:7523e4a8e000 32 emg_bivalue = emg0.read_u16(); // read direct ADC result (0..4096 = 0..3.3V) biceps
Hooglugt 29:7523e4a8e000 33
Hooglugt 29:7523e4a8e000 34 /*put raw emg value of triceps both in emg_trifloat and in emg_trivalue*/
Hooglugt 29:7523e4a8e000 35 emg_trifloat.write(emg1.read()); // read float value (0..1 = 0..3.3V) triiceps
Hooglugt 29:7523e4a8e000 36 uint16_t emg_trivalue;
Hooglugt 29:7523e4a8e000 37 emg_trivalue = emg1.read_u16(); // read direct ADC result (0..4096 = 0..3.3V) biceps
Hooglugt 29:7523e4a8e000 38
Hooglugt 31:d8eaf0ce8517 39 /*send value to PC. Line below is used to prevent buffer overrun */
Hooglugt 30:5e5098b0cca6 40 if(pc.rxBufferGetSize(0)-pc.rxBufferGetCount() > 30) { //VRAAG: praktisch nut hiervan? print emg value wanneer buffercount groter dan 30 is
Hooglugt 30:5e5098b0cca6 41 //pc.printf("%u\n",emg_bivalue);
Hooglugt 29:7523e4a8e000 42 }
Hooglugt 29:7523e4a8e000 43 scope.set(0,emg_bivalue);
Hooglugt 29:7523e4a8e000 44 scope.set(1,emg_bifloat.read());
Hooglugt 29:7523e4a8e000 45 scope.set(2,emg_trivalue);
Hooglugt 29:7523e4a8e000 46 scope.set(3,emg_trifloat.read());
Hooglugt 23:8d9a623dd713 47 scope.send();
Hooglugt 23:8d9a623dd713 48 }
Hooglugt 23:8d9a623dd713 49
Hooglugt 32:aaf01b1bf05d 50 void resetlooper() // VRAAG: wat gebeurt er wanneer en resetlooper en looper tegelijkertijd gecalled worden?!
Hooglugt 31:d8eaf0ce8517 51 {
Hooglugt 30:5e5098b0cca6 52 if(emg_trifloat.read()>0.8 && direction != 0) { //dit is alleen mogelijk wanneer directionchoice is gemaakt
Hooglugt 30:5e5098b0cca6 53 direction = 0;
Hooglugt 30:5e5098b0cca6 54 force = 0; // WEGHALEN, wanneer in uiteindelijke script na force keuzen niet meer gereset kan worden (voor nu wel handig)
Hooglugt 31:d8eaf0ce8517 55 pc.printf("reset ");
Hooglugt 31:d8eaf0ce8517 56 }
Hooglugt 30:5e5098b0cca6 57 }
Hooglugt 31:d8eaf0ce8517 58
Hooglugt 23:8d9a623dd713 59 int main()
Hooglugt 23:8d9a623dd713 60 {
Hooglugt 25:ec41b972b250 61 pc.baud(115200); //baudrate instellen
Hooglugt 29:7523e4a8e000 62 emg_bifloat.period_ms(2); //sets period for the PWM to the emgfloat PTD4
Hooglugt 29:7523e4a8e000 63 emg_trifloat.period_ms(2);
Hooglugt 25:ec41b972b250 64 log_timer.attach(looper, 0.001); // The looper() function will be called every 0.001 seconds (with the ticker object)
Hooglugt 30:5e5098b0cca6 65 reset_timer.attach(resetlooper, 0.1); //
Hooglugt 26:9b43d9cb1fb2 66
Hooglugt 32:aaf01b1bf05d 67 /* EMG-singaal van biceps en triceps worden hier gefilterd*/
Hooglugt 32:aaf01b1bf05d 68
Hooglugt 25:ec41b972b250 69 goto directionchoice; // goes to first while(1) for the deciding the direction
Hooglugt 26:9b43d9cb1fb2 70
Hooglugt 23:8d9a623dd713 71 while(1) { //Loop keuze DIRECTION
Hooglugt 25:ec41b972b250 72 directionchoice:
Hooglugt 23:8d9a623dd713 73 for(int i=1; i<4; i++) {
Hooglugt 23:8d9a623dd713 74 if(i==1) { //red
Hooglugt 23:8d9a623dd713 75 red=0;
Hooglugt 23:8d9a623dd713 76 green=1;
Hooglugt 23:8d9a623dd713 77 blue=1;
Hooglugt 26:9b43d9cb1fb2 78 for (int lag=0; lag<TIMEBETWEENBLINK; lag++) {
Hooglugt 29:7523e4a8e000 79 if(emg_bifloat.read()>0.8) { // 0.8 klopt niet als grenswaarde. #nofilter
Hooglugt 25:ec41b972b250 80 direction = 1;
Hooglugt 29:7523e4a8e000 81 red=1;
Hooglugt 29:7523e4a8e000 82 green = 0;
Hooglugt 24:c6073b9efd5b 83 blue = 0;
Hooglugt 26:9b43d9cb1fb2 84 pc.printf("links ");
Hooglugt 25:ec41b972b250 85 wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om cyaan lampje aan te zetten ter controle selectie
Hooglugt 25:ec41b972b250 86 goto forcechoice; // goes to second while(1) for the deciding the force
Hooglugt 23:8d9a623dd713 87 } else {
Hooglugt 23:8d9a623dd713 88 wait(0.1);
Hooglugt 23:8d9a623dd713 89 }
Hooglugt 23:8d9a623dd713 90 }
Hooglugt 23:8d9a623dd713 91 }
Hooglugt 23:8d9a623dd713 92 if(i==2) { //green
Hooglugt 23:8d9a623dd713 93 red =1;
Hooglugt 23:8d9a623dd713 94 green=0;
Hooglugt 23:8d9a623dd713 95 blue=1;
Hooglugt 26:9b43d9cb1fb2 96 for (int lag=0; lag<TIMEBETWEENBLINK; lag++) {
Hooglugt 29:7523e4a8e000 97 if(emg_bifloat.read()>0.8) { //0.8 klopt niet als grenswaarde. #nofilter
Hooglugt 25:ec41b972b250 98 direction = 2;
Hooglugt 29:7523e4a8e000 99 red=0;
Hooglugt 29:7523e4a8e000 100 green = 1;
Hooglugt 24:c6073b9efd5b 101 blue = 0;
Hooglugt 26:9b43d9cb1fb2 102 pc.printf("mid ");
Hooglugt 25:ec41b972b250 103 wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om paars lampje aan te zetten ter controle selectie
Hooglugt 23:8d9a623dd713 104 goto forcechoice;
Hooglugt 23:8d9a623dd713 105 } else {
Hooglugt 23:8d9a623dd713 106 wait(0.1);
Hooglugt 23:8d9a623dd713 107 }
Hooglugt 23:8d9a623dd713 108 }
Hooglugt 23:8d9a623dd713 109 }
Hooglugt 23:8d9a623dd713 110 if(i==3) { //blue
Hooglugt 23:8d9a623dd713 111 red=1;
Hooglugt 23:8d9a623dd713 112 green=1;
Hooglugt 23:8d9a623dd713 113 blue=0;
Hooglugt 26:9b43d9cb1fb2 114 for (int lag=0; lag<TIMEBETWEENBLINK; lag++) {
Hooglugt 29:7523e4a8e000 115 if(emg_bifloat.read()>0.8) { //0.8 klopt niet als grenswaarde. #nofilter
Hooglugt 23:8d9a623dd713 116 direction = 3;
Hooglugt 29:7523e4a8e000 117 red=0;
Hooglugt 29:7523e4a8e000 118 green = 0;
Hooglugt 24:c6073b9efd5b 119 blue = 1;
Hooglugt 26:9b43d9cb1fb2 120 pc.printf("rechts ");
Hooglugt 25:ec41b972b250 121 wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om oranje lampje aan te zetten ter controle selectie
Hooglugt 23:8d9a623dd713 122 goto forcechoice;
Hooglugt 23:8d9a623dd713 123 } else {
Hooglugt 23:8d9a623dd713 124 wait(0.1);
Hooglugt 23:8d9a623dd713 125 }
Hooglugt 23:8d9a623dd713 126 }
Hooglugt 23:8d9a623dd713 127 }
Hooglugt 25:ec41b972b250 128 }
Hooglugt 23:8d9a623dd713 129 }
Hooglugt 23:8d9a623dd713 130 while(1) { //Loop keuze FORCE
Hooglugt 25:ec41b972b250 131 forcechoice:
Hooglugt 23:8d9a623dd713 132 for(int i=1; i<4; i++) {
Hooglugt 23:8d9a623dd713 133 if(i==1) { //red
Hooglugt 23:8d9a623dd713 134 red=0;
Hooglugt 23:8d9a623dd713 135 green=1;
Hooglugt 23:8d9a623dd713 136 blue=1;
Hooglugt 33:a78ec776dfd5 137 if(direction==0){ //if statement die controleert of direction 0 is (dus of triceps gereset is)
Hooglugt 33:a78ec776dfd5 138 goto directionchoice;
Hooglugt 33:a78ec776dfd5 139 }
Hooglugt 26:9b43d9cb1fb2 140 for (int lag=0; lag<TIMEBETWEENBLINK; lag++) {
Hooglugt 29:7523e4a8e000 141 if(emg_bifloat.read()>0.8) { // 0.8 klopt niet als grenswaarde. #nofilter
Hooglugt 23:8d9a623dd713 142 force = 1;
Hooglugt 29:7523e4a8e000 143 red=1;
Hooglugt 29:7523e4a8e000 144 green = 0;
Hooglugt 24:c6073b9efd5b 145 blue = 0;
Hooglugt 26:9b43d9cb1fb2 146 pc.printf("zwak ");
Hooglugt 25:ec41b972b250 147 wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om cyaan lampje aan te zetten ter controle selectie
Hooglugt 23:8d9a623dd713 148 goto choicesmade;
Hooglugt 23:8d9a623dd713 149 } else {
Hooglugt 23:8d9a623dd713 150 wait(0.1);
Hooglugt 23:8d9a623dd713 151 }
Hooglugt 23:8d9a623dd713 152 }
Hooglugt 23:8d9a623dd713 153 }
Hooglugt 23:8d9a623dd713 154 if(i==2) { //green
Hooglugt 23:8d9a623dd713 155 red =1;
Hooglugt 23:8d9a623dd713 156 green=0;
Hooglugt 23:8d9a623dd713 157 blue=1;
Hooglugt 33:a78ec776dfd5 158 if(direction==0){ //if statement die controleert of direction 0 is (dus of triceps gereset is)
Hooglugt 33:a78ec776dfd5 159 goto directionchoice;
Hooglugt 33:a78ec776dfd5 160 }
Hooglugt 26:9b43d9cb1fb2 161 for (int lag=0; lag<TIMEBETWEENBLINK; lag++) {
Hooglugt 29:7523e4a8e000 162 if(emg_bifloat.read()>0.8) { //0.8 klopt niet als grenswaarde. #nofilter
Hooglugt 23:8d9a623dd713 163 force = 2;
Hooglugt 29:7523e4a8e000 164 red=0;
Hooglugt 29:7523e4a8e000 165 green = 1;
Hooglugt 24:c6073b9efd5b 166 blue = 0;
Hooglugt 26:9b43d9cb1fb2 167 pc.printf("normaal ");
Hooglugt 25:ec41b972b250 168 wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om paars lampje aan te zetten ter controle selectie
Hooglugt 23:8d9a623dd713 169 goto choicesmade;
Hooglugt 23:8d9a623dd713 170 } else {
Hooglugt 23:8d9a623dd713 171 wait(0.1);
Hooglugt 23:8d9a623dd713 172 }
Hooglugt 23:8d9a623dd713 173 }
Hooglugt 23:8d9a623dd713 174 }
Hooglugt 23:8d9a623dd713 175 if(i==3) { //blue
Hooglugt 23:8d9a623dd713 176 red=1;
Hooglugt 23:8d9a623dd713 177 green=1;
Hooglugt 23:8d9a623dd713 178 blue=0;
Hooglugt 33:a78ec776dfd5 179 if(direction==0){ //if statement die controleert of direction 0 is (dus of triceps gereset is)
Hooglugt 33:a78ec776dfd5 180 goto directionchoice;
Hooglugt 33:a78ec776dfd5 181 }
Hooglugt 26:9b43d9cb1fb2 182 for (int lag=0; lag<TIMEBETWEENBLINK; lag++) {
Hooglugt 29:7523e4a8e000 183 if(emg_bifloat.read()>0.8) { //0.8 klopt niet als grenswaarde. #nofilter
Hooglugt 23:8d9a623dd713 184 force = 3;
Hooglugt 29:7523e4a8e000 185 red=0;
Hooglugt 29:7523e4a8e000 186 green = 0;
Hooglugt 24:c6073b9efd5b 187 blue = 1;
Hooglugt 26:9b43d9cb1fb2 188 pc.printf("sterk ");
Hooglugt 25:ec41b972b250 189 wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om oranje lampje aan te zetten ter controle selectie
Hooglugt 23:8d9a623dd713 190 goto choicesmade;
Hooglugt 23:8d9a623dd713 191 } else {
Hooglugt 23:8d9a623dd713 192 wait(0.1);
Hooglugt 23:8d9a623dd713 193 }
Hooglugt 23:8d9a623dd713 194 }
Hooglugt 23:8d9a623dd713 195 }
Hooglugt 23:8d9a623dd713 196 }
Hooglugt 23:8d9a623dd713 197 }
Hooglugt 25:ec41b972b250 198 choicesmade:
Hooglugt 33:a78ec776dfd5 199
Hooglugt 32:aaf01b1bf05d 200 /* Vanaf hier komt de aansturing van de motor (inclusief de controller)*/
Hooglugt 33:a78ec776dfd5 201
Hooglugt 25:ec41b972b250 202 if(direction == 1 && force == 1) { // links zwak
Hooglugt 25:ec41b972b250 203 pc.printf("links zwak");
Hooglugt 25:ec41b972b250 204 }
Hooglugt 25:ec41b972b250 205 if(direction == 1 && force == 2) { // links normaal
Hooglugt 25:ec41b972b250 206 pc.printf("links normaal");
Hooglugt 25:ec41b972b250 207 }
Hooglugt 25:ec41b972b250 208 if(direction == 1 && force == 3) { // links sterk
Hooglugt 25:ec41b972b250 209 pc.printf("links sterk");
Hooglugt 25:ec41b972b250 210 }
Hooglugt 25:ec41b972b250 211 if(direction == 2 && force == 1) { // mid zwak
Hooglugt 25:ec41b972b250 212 pc.printf("mid zwak");
Hooglugt 25:ec41b972b250 213 }
Hooglugt 25:ec41b972b250 214 if(direction == 2 && force == 2) { // mid normaal
Hooglugt 25:ec41b972b250 215 pc.printf("mid normaal");
Hooglugt 25:ec41b972b250 216 }
Hooglugt 25:ec41b972b250 217 if(direction == 2 && force == 3) { // mid sterk
Hooglugt 25:ec41b972b250 218 pc.printf("mid sterk");
Hooglugt 25:ec41b972b250 219 }
Hooglugt 25:ec41b972b250 220 if(direction == 3 && force == 1) { // rechts zwak
Hooglugt 25:ec41b972b250 221 pc.printf("rechts zwak");
Hooglugt 25:ec41b972b250 222 }
Hooglugt 25:ec41b972b250 223 if(direction == 3 && force == 2) { // rechts normaal
Hooglugt 25:ec41b972b250 224 pc.printf("rechts normaal");
Hooglugt 25:ec41b972b250 225 }
Hooglugt 25:ec41b972b250 226 if(direction == 3 && force == 3) { // rechts sterk
Hooglugt 25:ec41b972b250 227 pc.printf("rechts sterk");
Hooglugt 25:ec41b972b250 228 }
Hooglugt 33:a78ec776dfd5 229 if(direction == 0 || force == 0) { // wanneer de triceps in de korte tijd is aangespannen nadat beide keuzes zijn gemaakt
Hooglugt 32:aaf01b1bf05d 230 pc.printf("error");
Hooglugt 33:a78ec776dfd5 231 // mogelijkheid om een goto te maken naar directionchoice (opzich wel handig)
Hooglugt 32:aaf01b1bf05d 232 }
Hooglugt 33:a78ec776dfd5 233
Hooglugt 32:aaf01b1bf05d 234 red = 0;
Hooglugt 32:aaf01b1bf05d 235 green = 0;
Hooglugt 32:aaf01b1bf05d 236 blue = 0; // wit lampje
Hooglugt 25:ec41b972b250 237 }