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 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 | */ | 
