Motor + potmerer + EMG + led
Dependencies: HIDScope MODSERIAL mbed
Fork of EMG_Motor_LED by
main.cpp@6:df37e7d33513, 2018-10-10 (annotated)
- Committer:
- CasperK
- Date:
- Wed Oct 10 11:48:55 2018 +0000
- Revision:
- 6:df37e7d33513
- Parent:
- 5:5442448ac4d1
Random crashes
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
michelvos12 | 4:fe0b7e7b1de9 | 1 | //______Libaries Included______// |
CasperK | 0:9922b502cbc3 | 2 | #include "mbed.h" |
michelvos12 | 4:fe0b7e7b1de9 | 3 | #include "MODSERIAL.h" //show stuf on screen |
michelvos12 | 4:fe0b7e7b1de9 | 4 | #include "HIDScope.h" //visualise the analog potmeter signal |
michelvos12 | 4:fe0b7e7b1de9 | 5 | |
michelvos12 | 4:fe0b7e7b1de9 | 6 | //______In/out puts____________// |
michelvos12 | 4:fe0b7e7b1de9 | 7 | PwmOut pwmpin(D6); //motor_1 pwn control = (motor speed) |
michelvos12 | 4:fe0b7e7b1de9 | 8 | //PwmOut pwmpin2(D5); //motor_2 pwn control = (motor speed) |
michelvos12 | 4:fe0b7e7b1de9 | 9 | DigitalOut directionpin(D7); //motor_1 (direction control) |
michelvos12 | 4:fe0b7e7b1de9 | 10 | //DigitalOut directionpin2(D4); //motor_2 (direction control) |
CasperK | 0:9922b502cbc3 | 11 | |
michelvos12 | 4:fe0b7e7b1de9 | 12 | AnalogIn emg0( A0 ); //emg sensor A0 |
michelvos12 | 4:fe0b7e7b1de9 | 13 | AnalogIn emg1( A1 ); //emg sensor A1 |
michelvos12 | 4:fe0b7e7b1de9 | 14 | AnalogIn emg2( A2 ); //emg sensor A3 |
michelvos12 | 4:fe0b7e7b1de9 | 15 | |
michelvos12 | 4:fe0b7e7b1de9 | 16 | AnalogIn potmeter(A5); //potmeter pin (A5) (Control speed and direction) |
michelvos12 | 4:fe0b7e7b1de9 | 17 | //AnalogIn potmeter2(A4); //potmeter pin (A4) (Control speed and direction) |
CasperK | 0:9922b502cbc3 | 18 | |
michelvos12 | 4:fe0b7e7b1de9 | 19 | PwmOut led(D10); //led pot1 |
michelvos12 | 4:fe0b7e7b1de9 | 20 | //PwnOut led2(D9); //led pot2 |
michelvos12 | 4:fe0b7e7b1de9 | 21 | MODSERIAL pc(USBTX, USBRX); //show stuf on screen |
michelvos12 | 4:fe0b7e7b1de9 | 22 | //DigitalIn button(D2); //not yet used |
michelvos12 | 4:fe0b7e7b1de9 | 23 | |
michelvos12 | 4:fe0b7e7b1de9 | 24 | |
michelvos12 | 4:fe0b7e7b1de9 | 25 | //______Global stuf____________// |
michelvos12 | 4:fe0b7e7b1de9 | 26 | //HIDScope scope(2); //use 2 channels |
michelvos12 | 4:fe0b7e7b1de9 | 27 | Ticker ticker; //moter ticker |
michelvos12 | 4:fe0b7e7b1de9 | 28 | enum states{forward, stop, backwards}; //motor_1 states |
CasperK | 2:735ca8577f31 | 29 | states CurrentState; |
CasperK | 0:9922b502cbc3 | 30 | |
michelvos12 | 4:fe0b7e7b1de9 | 31 | //______For EMG________________// |
michelvos12 | 4:fe0b7e7b1de9 | 32 | Ticker sample_timer; //emg ticker |
michelvos12 | 4:fe0b7e7b1de9 | 33 | HIDScope scope( 6 ); //6 channels in hidscope |
michelvos12 | 4:fe0b7e7b1de9 | 34 | DigitalOut led_emg(LED1); |
michelvos12 | 4:fe0b7e7b1de9 | 35 | |
michelvos12 | 4:fe0b7e7b1de9 | 36 | //______Global variables_______// |
CasperK | 0:9922b502cbc3 | 37 | volatile float x; |
CasperK | 0:9922b502cbc3 | 38 | volatile float y; |
CasperK | 3:f00ddd66fe39 | 39 | volatile float scaled_potmeter; |
CasperK | 3:f00ddd66fe39 | 40 | volatile float c; |
CasperK | 0:9922b502cbc3 | 41 | |
michelvos12 | 4:fe0b7e7b1de9 | 42 | //______Function: Hidscope_emg__// |
michelvos12 | 4:fe0b7e7b1de9 | 43 | void sample() |
michelvos12 | 4:fe0b7e7b1de9 | 44 | { |
michelvos12 | 4:fe0b7e7b1de9 | 45 | /* Set the sampled emg values in channel 0 (the first channel) and 1 (the second channel) in the 'HIDScope' instance named 'scope' */ |
michelvos12 | 4:fe0b7e7b1de9 | 46 | scope.set(0, emg0.read() ); |
michelvos12 | 4:fe0b7e7b1de9 | 47 | scope.set(1, emg1.read() ); |
michelvos12 | 4:fe0b7e7b1de9 | 48 | scope.set(2, emg2.read() ); |
michelvos12 | 4:fe0b7e7b1de9 | 49 | |
michelvos12 | 4:fe0b7e7b1de9 | 50 | scope.send(); |
michelvos12 | 4:fe0b7e7b1de9 | 51 | /* To indicate that the function is working, the LED is toggled */ |
michelvos12 | 4:fe0b7e7b1de9 | 52 | led_emg = !led_emg; |
CasperK | 0:9922b502cbc3 | 53 | } |
CasperK | 0:9922b502cbc3 | 54 | |
michelvos12 | 4:fe0b7e7b1de9 | 55 | void sendData() { |
michelvos12 | 4:fe0b7e7b1de9 | 56 | scope.set(3,potmeter); //set the potmeter data to the 3th scope |
michelvos12 | 4:fe0b7e7b1de9 | 57 | scope.set(4,x); |
michelvos12 | 4:fe0b7e7b1de9 | 58 | scope.send(); //send the datapoints of the potmeter |
michelvos12 | 4:fe0b7e7b1de9 | 59 | } |
michelvos12 | 4:fe0b7e7b1de9 | 60 | |
michelvos12 | 4:fe0b7e7b1de9 | 61 | //______Funcion: Motor state + Makes moter do stuf___// |
michelvos12 | 5:5442448ac4d1 | 62 | void Proces_states(){ |
CasperK | 3:f00ddd66fe39 | 63 | switch (CurrentState){ |
michelvos12 | 4:fe0b7e7b1de9 | 64 | case forward: //Funcion: Forward |
CasperK | 6:df37e7d33513 | 65 | directionpin = 1; |
CasperK | 6:df37e7d33513 | 66 | pwmpin.write(scaled_potmeter); //pwm of motor is potmeter value |
michelvos12 | 4:fe0b7e7b1de9 | 67 | led.write(scaled_potmeter); //led is potmeter value |
CasperK | 3:f00ddd66fe39 | 68 | break; |
michelvos12 | 4:fe0b7e7b1de9 | 69 | case stop: //Funcion: Stop |
michelvos12 | 4:fe0b7e7b1de9 | 70 | // do nothing |
CasperK | 3:f00ddd66fe39 | 71 | break; |
michelvos12 | 4:fe0b7e7b1de9 | 72 | case backwards: //Function: Backwards |
CasperK | 6:df37e7d33513 | 73 | directionpin = 0; |
CasperK | 3:f00ddd66fe39 | 74 | c = scaled_potmeter*-1; |
CasperK | 6:df37e7d33513 | 75 | pwmpin.write(c); //pwm of motor is potmeter value |
michelvos12 | 4:fe0b7e7b1de9 | 76 | led.write(c); //led is potmeter value |
CasperK | 3:f00ddd66fe39 | 77 | break; |
CasperK | 3:f00ddd66fe39 | 78 | } |
CasperK | 3:f00ddd66fe39 | 79 | } |
CasperK | 3:f00ddd66fe39 | 80 | |
michelvos12 | 4:fe0b7e7b1de9 | 81 | //______Funcion: Main____________// |
CasperK | 2:735ca8577f31 | 82 | int main() { |
michelvos12 | 4:fe0b7e7b1de9 | 83 | x = 1; //placeholder value for potmeter of second motor |
CasperK | 0:9922b502cbc3 | 84 | |
michelvos12 | 4:fe0b7e7b1de9 | 85 | pwmpin.period_us(60); //60 microseconds PWM period, 16.7 kHz |
michelvos12 | 4:fe0b7e7b1de9 | 86 | led.period_us(60); //60 microseconds |
michelvos12 | 4:fe0b7e7b1de9 | 87 | ticker.attach(&sendData, 0.005f); //send data to hidscope 1/0.005 = 200Hz |
michelvos12 | 5:5442448ac4d1 | 88 | sample_timer.attach(&sample, 0.002); //for the emg |
CasperK | 6:df37e7d33513 | 89 | pc.printf(" ** reset program **\r\n"); |
CasperK | 0:9922b502cbc3 | 90 | |
michelvos12 | 4:fe0b7e7b1de9 | 91 | //______Scale potmeter___________// |
CasperK | 3:f00ddd66fe39 | 92 | while (true) { |
CasperK | 3:f00ddd66fe39 | 93 | scaled_potmeter = (potmeter*2)-1; //scale potmeter from 0-1 to (-1 to 1) |
CasperK | 3:f00ddd66fe39 | 94 | |
michelvos12 | 4:fe0b7e7b1de9 | 95 | //______Readout potmeter + giva and call to Proces_state______// |
CasperK | 3:f00ddd66fe39 | 96 | if (scaled_potmeter > 0) { |
CasperK | 3:f00ddd66fe39 | 97 | CurrentState = forward; |
CasperK | 3:f00ddd66fe39 | 98 | pc.printf("state = forward\r\n"); |
CasperK | 3:f00ddd66fe39 | 99 | Proces_states(); |
CasperK | 3:f00ddd66fe39 | 100 | } |
CasperK | 3:f00ddd66fe39 | 101 | if (scaled_potmeter == 0) { |
CasperK | 3:f00ddd66fe39 | 102 | CurrentState = stop; |
CasperK | 3:f00ddd66fe39 | 103 | pc.printf("state = stop\r\n"); |
CasperK | 3:f00ddd66fe39 | 104 | Proces_states(); |
CasperK | 3:f00ddd66fe39 | 105 | } |
CasperK | 3:f00ddd66fe39 | 106 | if (scaled_potmeter < 0) { |
CasperK | 3:f00ddd66fe39 | 107 | CurrentState = backwards; |
CasperK | 3:f00ddd66fe39 | 108 | pc.printf("state = backwards\r\n"); |
CasperK | 3:f00ddd66fe39 | 109 | Proces_states(); |
CasperK | 3:f00ddd66fe39 | 110 | } |
michelvos12 | 4:fe0b7e7b1de9 | 111 | |
CasperK | 3:f00ddd66fe39 | 112 | wait(0.2f); |
michelvos12 | 4:fe0b7e7b1de9 | 113 | |
michelvos12 | 5:5442448ac4d1 | 114 | /**Attach the 'sample' function to the timer 'sample_timer'. |
michelvos12 | 5:5442448ac4d1 | 115 | * this ensures that 'sample' is executed every... 0.002 seconds = 500 Hz |
michelvos12 | 5:5442448ac4d1 | 116 | */ |
michelvos12 | 4:fe0b7e7b1de9 | 117 | |
michelvos12 | 5:5442448ac4d1 | 118 | |
michelvos12 | 5:5442448ac4d1 | 119 | /*empty loop, sample() is executed periodically*/ |
michelvos12 | 5:5442448ac4d1 | 120 | //while(1) {} |
CasperK | 0:9922b502cbc3 | 121 | } |
CasperK | 6:df37e7d33513 | 122 | pc.printf(" **program stopped**\r\n"); |
CasperK | 2:735ca8577f31 | 123 | } |
CasperK | 2:735ca8577f31 | 124 | |
CasperK | 2:735ca8577f31 | 125 |