This version does not work on my pc however it should work if i look at all the data send to hidscope and de led which does it correct. We should tray another pc because my pc does give still some errors on the libaries
Dependencies: HIDScope MODSERIAL mbed
Fork of Milestone_1_Motor_DualDirection_potmeter_v2 by
main.cpp@4:fe0b7e7b1de9, 2018-10-03 (annotated)
- Committer:
- michelvos12
- Date:
- Wed Oct 03 19:21:32 2018 +0000
- Revision:
- 4:fe0b7e7b1de9
- Parent:
- 3:f00ddd66fe39
- Child:
- 5:5442448ac4d1
included emg to milestone 1, but motor not compleatly working
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___// |
CasperK | 3:f00ddd66fe39 | 62 | void Proces_states(void){ |
CasperK | 3:f00ddd66fe39 | 63 | switch (CurrentState){ |
michelvos12 | 4:fe0b7e7b1de9 | 64 | case forward: //Funcion: Forward |
CasperK | 3:f00ddd66fe39 | 65 | directionpin = 1; |
michelvos12 | 4:fe0b7e7b1de9 | 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 | 3:f00ddd66fe39 | 73 | directionpin = 0; |
CasperK | 3:f00ddd66fe39 | 74 | c = scaled_potmeter*-1; |
michelvos12 | 4:fe0b7e7b1de9 | 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 |
CasperK | 0:9922b502cbc3 | 88 | |
michelvos12 | 4:fe0b7e7b1de9 | 89 | //______Scale potmeter___________// |
CasperK | 3:f00ddd66fe39 | 90 | while (true) { |
CasperK | 3:f00ddd66fe39 | 91 | scaled_potmeter = (potmeter*2)-1; //scale potmeter from 0-1 to (-1 to 1) |
CasperK | 3:f00ddd66fe39 | 92 | |
michelvos12 | 4:fe0b7e7b1de9 | 93 | //______Readout potmeter + giva and call to Proces_state______// |
CasperK | 3:f00ddd66fe39 | 94 | if (scaled_potmeter > 0) { |
CasperK | 3:f00ddd66fe39 | 95 | CurrentState = forward; |
CasperK | 3:f00ddd66fe39 | 96 | pc.printf("state = forward\r\n"); |
CasperK | 3:f00ddd66fe39 | 97 | Proces_states(); |
CasperK | 3:f00ddd66fe39 | 98 | } |
CasperK | 3:f00ddd66fe39 | 99 | if (scaled_potmeter == 0) { |
CasperK | 3:f00ddd66fe39 | 100 | CurrentState = stop; |
CasperK | 3:f00ddd66fe39 | 101 | pc.printf("state = stop\r\n"); |
CasperK | 3:f00ddd66fe39 | 102 | Proces_states(); |
CasperK | 3:f00ddd66fe39 | 103 | } |
CasperK | 3:f00ddd66fe39 | 104 | if (scaled_potmeter < 0) { |
CasperK | 3:f00ddd66fe39 | 105 | CurrentState = backwards; |
CasperK | 3:f00ddd66fe39 | 106 | pc.printf("state = backwards\r\n"); |
CasperK | 3:f00ddd66fe39 | 107 | Proces_states(); |
CasperK | 3:f00ddd66fe39 | 108 | } |
michelvos12 | 4:fe0b7e7b1de9 | 109 | |
CasperK | 3:f00ddd66fe39 | 110 | wait(0.2f); |
michelvos12 | 4:fe0b7e7b1de9 | 111 | |
michelvos12 | 4:fe0b7e7b1de9 | 112 | /**Attach the 'sample' function to the timer 'sample_timer'. |
michelvos12 | 4:fe0b7e7b1de9 | 113 | * this ensures that 'sample' is executed every... 0.002 seconds = 500 Hz |
michelvos12 | 4:fe0b7e7b1de9 | 114 | */ |
michelvos12 | 4:fe0b7e7b1de9 | 115 | sample_timer.attach(&sample, 0.002); |
michelvos12 | 4:fe0b7e7b1de9 | 116 | |
michelvos12 | 4:fe0b7e7b1de9 | 117 | /*empty loop, sample() is executed periodically*/ |
michelvos12 | 4:fe0b7e7b1de9 | 118 | while(1) {} |
CasperK | 0:9922b502cbc3 | 119 | } |
michelvos12 | 4:fe0b7e7b1de9 | 120 | |
CasperK | 2:735ca8577f31 | 121 | } |
CasperK | 2:735ca8577f31 | 122 | |
CasperK | 2:735ca8577f31 | 123 |