Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: HIDScope QEI biquadFilter mbed
Fork of EMG_Controller_5 by
servoController.h@6:6cb7c0247560, 2016-10-25 (annotated)
- Committer:
- pbaardwijk
- Date:
- Tue Oct 25 12:07:53 2016 +0000
- Revision:
- 6:6cb7c0247560
- Parent:
- 5:bb77e2a6c1e8
- Child:
- 7:eed677b636d3
Latest version with a few fixes
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
NahuelM | 4:e59a99c5aa08 | 1 | #include "mbed.h" |
NahuelM | 4:e59a99c5aa08 | 2 | |
NahuelM | 4:e59a99c5aa08 | 3 | Serial pc(USBTX,USBRX); |
NahuelM | 4:e59a99c5aa08 | 4 | |
pbaardwijk | 6:6cb7c0247560 | 5 | PwmOut ServoPWMpin(D9); |
NahuelM | 4:e59a99c5aa08 | 6 | Ticker servoTick; |
NahuelM | 4:e59a99c5aa08 | 7 | float i = 0; |
NahuelM | 4:e59a99c5aa08 | 8 | char Key; |
NahuelM | 4:e59a99c5aa08 | 9 | double ServoAngle = 89 ; |
NahuelM | 4:e59a99c5aa08 | 10 | float Pulsew = 0.0015; |
NahuelM | 4:e59a99c5aa08 | 11 | const float Frequency = 10; |
LeeJon | 5:bb77e2a6c1e8 | 12 | //double input_signal = 0; |
NahuelM | 4:e59a99c5aa08 | 13 | double cali_min = 0; |
NahuelM | 4:e59a99c5aa08 | 14 | double cali_max = 1; |
pbaardwijk | 6:6cb7c0247560 | 15 | double treshold = 0.3; |
NahuelM | 4:e59a99c5aa08 | 16 | float treshold_multiplier = 0.5; |
NahuelM | 4:e59a99c5aa08 | 17 | bool binary_input_signal = 0; |
NahuelM | 4:e59a99c5aa08 | 18 | bool binary_input_signal_previous = 0; |
NahuelM | 4:e59a99c5aa08 | 19 | |
LeeJon | 5:bb77e2a6c1e8 | 20 | void control_servo(double input_signal){ |
pbaardwijk | 6:6cb7c0247560 | 21 | pc.printf("/n/r %f", input_signal); |
NahuelM | 4:e59a99c5aa08 | 22 | if (input_signal > treshold){ // convert the emg to a zero or a one |
NahuelM | 4:e59a99c5aa08 | 23 | binary_input_signal = 1; |
NahuelM | 4:e59a99c5aa08 | 24 | } else { |
NahuelM | 4:e59a99c5aa08 | 25 | binary_input_signal = 0; |
NahuelM | 4:e59a99c5aa08 | 26 | } |
NahuelM | 4:e59a99c5aa08 | 27 | if(( binary_input_signal!= binary_input_signal_previous)&& binary_input_signal){ |
NahuelM | 4:e59a99c5aa08 | 28 | if( ServoAngle < 45){ // check wether it is more opened or closed |
NahuelM | 4:e59a99c5aa08 | 29 | ServoAngle = 89; // open |
NahuelM | 4:e59a99c5aa08 | 30 | } |
NahuelM | 4:e59a99c5aa08 | 31 | else{ |
NahuelM | 4:e59a99c5aa08 | 32 | ServoAngle = 1; // close |
NahuelM | 4:e59a99c5aa08 | 33 | } |
NahuelM | 4:e59a99c5aa08 | 34 | } |
NahuelM | 4:e59a99c5aa08 | 35 | Pulsew = 0.0015+(ServoAngle)/180000; // calculate the pulsewidth in the range 1 to 2 milliseconds |
NahuelM | 4:e59a99c5aa08 | 36 | ServoPWMpin.pulsewidth(Pulsew); // write the pulsewidth |
NahuelM | 4:e59a99c5aa08 | 37 | pc.printf("\n\r Pulsew is %f",Pulsew); |
NahuelM | 4:e59a99c5aa08 | 38 | |
NahuelM | 4:e59a99c5aa08 | 39 | binary_input_signal_previous = binary_input_signal; |
NahuelM | 4:e59a99c5aa08 | 40 | } |
NahuelM | 4:e59a99c5aa08 | 41 | /* |
NahuelM | 4:e59a99c5aa08 | 42 | int main(){ |
NahuelM | 4:e59a99c5aa08 | 43 | pc.printf("\n\r ----------------------------------------\n\r --------------- START -----------------\n\r ----------------------------------------"); |
NahuelM | 4:e59a99c5aa08 | 44 | treshold = (cali_max-cali_min)*treshold_multiplier; |
NahuelM | 4:e59a99c5aa08 | 45 | servoTick.attach(&control_servo, 1/Frequency); |
NahuelM | 4:e59a99c5aa08 | 46 | ServoPWMpin.period(0.01f); // 0.01 second period |
NahuelM | 4:e59a99c5aa08 | 47 | |
NahuelM | 4:e59a99c5aa08 | 48 | while (true) { |
NahuelM | 4:e59a99c5aa08 | 49 | Key = pc.getc(); // get the pressed key |
NahuelM | 4:e59a99c5aa08 | 50 | switch(Key) { //Check to see which key pressed |
NahuelM | 4:e59a99c5aa08 | 51 | case 0x2B: //It was the + key... |
NahuelM | 4:e59a99c5aa08 | 52 | pc.printf("\n\r +!"); |
NahuelM | 4:e59a99c5aa08 | 53 | if( ServoAngle < 80){ |
NahuelM | 4:e59a99c5aa08 | 54 | ServoAngle = ServoAngle+10; // increase the angle |
NahuelM | 4:e59a99c5aa08 | 55 | } |
NahuelM | 4:e59a99c5aa08 | 56 | break; |
NahuelM | 4:e59a99c5aa08 | 57 | case 0x2D: //It was the - Key key... |
NahuelM | 4:e59a99c5aa08 | 58 | pc.printf("\n\r -!"); |
NahuelM | 4:e59a99c5aa08 | 59 | if( ServoAngle > 10){ |
NahuelM | 4:e59a99c5aa08 | 60 | ServoAngle = ServoAngle-10; // decrease the angle |
NahuelM | 4:e59a99c5aa08 | 61 | } |
NahuelM | 4:e59a99c5aa08 | 62 | break; |
NahuelM | 4:e59a99c5aa08 | 63 | case 0x20: //It was the Spacebar key... |
NahuelM | 4:e59a99c5aa08 | 64 | pc.printf("\n\r SPACE!"); |
NahuelM | 4:e59a99c5aa08 | 65 | if( ServoAngle < 45){ // Switch from open to closed or else otherwise |
NahuelM | 4:e59a99c5aa08 | 66 | ServoAngle = 89; // open/close |
NahuelM | 4:e59a99c5aa08 | 67 | } |
NahuelM | 4:e59a99c5aa08 | 68 | else{ |
NahuelM | 4:e59a99c5aa08 | 69 | ServoAngle = 1; // open/close |
NahuelM | 4:e59a99c5aa08 | 70 | } |
NahuelM | 4:e59a99c5aa08 | 71 | break; |
NahuelM | 4:e59a99c5aa08 | 72 | } |
NahuelM | 4:e59a99c5aa08 | 73 | |
NahuelM | 4:e59a99c5aa08 | 74 | } |
NahuelM | 4:e59a99c5aa08 | 75 | } |
NahuelM | 4:e59a99c5aa08 | 76 | */ |