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@4:e59a99c5aa08, 2016-10-25 (annotated)
- Committer:
- NahuelM
- Date:
- Tue Oct 25 10:36:50 2016 +0000
- Revision:
- 4:e59a99c5aa08
- Child:
- 5:bb77e2a6c1e8
Servo controller ge?mplementeert;
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 | |
NahuelM | 4:e59a99c5aa08 | 5 | PwmOut ServoPWMpin(D8); |
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; |
NahuelM | 4:e59a99c5aa08 | 12 | double input_signal = 0; |
NahuelM | 4:e59a99c5aa08 | 13 | double cali_min = 0; |
NahuelM | 4:e59a99c5aa08 | 14 | double cali_max = 1; |
NahuelM | 4:e59a99c5aa08 | 15 | double treshold = 0.5; |
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 | |
NahuelM | 4:e59a99c5aa08 | 20 | void control_servo(){ |
NahuelM | 4:e59a99c5aa08 | 21 | if (input_signal > treshold){ // convert the emg to a zero or a one |
NahuelM | 4:e59a99c5aa08 | 22 | binary_input_signal = 1; |
NahuelM | 4:e59a99c5aa08 | 23 | } else { |
NahuelM | 4:e59a99c5aa08 | 24 | binary_input_signal = 0; |
NahuelM | 4:e59a99c5aa08 | 25 | } |
NahuelM | 4:e59a99c5aa08 | 26 | if(( binary_input_signal!= binary_input_signal_previous)&& binary_input_signal){ |
NahuelM | 4:e59a99c5aa08 | 27 | if( ServoAngle < 45){ // check wether it is more opened or closed |
NahuelM | 4:e59a99c5aa08 | 28 | ServoAngle = 89; // open |
NahuelM | 4:e59a99c5aa08 | 29 | } |
NahuelM | 4:e59a99c5aa08 | 30 | else{ |
NahuelM | 4:e59a99c5aa08 | 31 | ServoAngle = 1; // close |
NahuelM | 4:e59a99c5aa08 | 32 | } |
NahuelM | 4:e59a99c5aa08 | 33 | } |
NahuelM | 4:e59a99c5aa08 | 34 | Pulsew = 0.0015+(ServoAngle)/180000; // calculate the pulsewidth in the range 1 to 2 milliseconds |
NahuelM | 4:e59a99c5aa08 | 35 | ServoPWMpin.pulsewidth(Pulsew); // write the pulsewidth |
NahuelM | 4:e59a99c5aa08 | 36 | pc.printf("\n\r Pulsew is %f",Pulsew); |
NahuelM | 4:e59a99c5aa08 | 37 | |
NahuelM | 4:e59a99c5aa08 | 38 | binary_input_signal_previous = binary_input_signal; |
NahuelM | 4:e59a99c5aa08 | 39 | } |
NahuelM | 4:e59a99c5aa08 | 40 | /* |
NahuelM | 4:e59a99c5aa08 | 41 | int main(){ |
NahuelM | 4:e59a99c5aa08 | 42 | pc.printf("\n\r ----------------------------------------\n\r --------------- START -----------------\n\r ----------------------------------------"); |
NahuelM | 4:e59a99c5aa08 | 43 | treshold = (cali_max-cali_min)*treshold_multiplier; |
NahuelM | 4:e59a99c5aa08 | 44 | servoTick.attach(&control_servo, 1/Frequency); |
NahuelM | 4:e59a99c5aa08 | 45 | ServoPWMpin.period(0.01f); // 0.01 second period |
NahuelM | 4:e59a99c5aa08 | 46 | |
NahuelM | 4:e59a99c5aa08 | 47 | while (true) { |
NahuelM | 4:e59a99c5aa08 | 48 | Key = pc.getc(); // get the pressed key |
NahuelM | 4:e59a99c5aa08 | 49 | switch(Key) { //Check to see which key pressed |
NahuelM | 4:e59a99c5aa08 | 50 | case 0x2B: //It was the + key... |
NahuelM | 4:e59a99c5aa08 | 51 | pc.printf("\n\r +!"); |
NahuelM | 4:e59a99c5aa08 | 52 | if( ServoAngle < 80){ |
NahuelM | 4:e59a99c5aa08 | 53 | ServoAngle = ServoAngle+10; // increase the angle |
NahuelM | 4:e59a99c5aa08 | 54 | } |
NahuelM | 4:e59a99c5aa08 | 55 | break; |
NahuelM | 4:e59a99c5aa08 | 56 | case 0x2D: //It was the - Key key... |
NahuelM | 4:e59a99c5aa08 | 57 | pc.printf("\n\r -!"); |
NahuelM | 4:e59a99c5aa08 | 58 | if( ServoAngle > 10){ |
NahuelM | 4:e59a99c5aa08 | 59 | ServoAngle = ServoAngle-10; // decrease the angle |
NahuelM | 4:e59a99c5aa08 | 60 | } |
NahuelM | 4:e59a99c5aa08 | 61 | break; |
NahuelM | 4:e59a99c5aa08 | 62 | case 0x20: //It was the Spacebar key... |
NahuelM | 4:e59a99c5aa08 | 63 | pc.printf("\n\r SPACE!"); |
NahuelM | 4:e59a99c5aa08 | 64 | if( ServoAngle < 45){ // Switch from open to closed or else otherwise |
NahuelM | 4:e59a99c5aa08 | 65 | ServoAngle = 89; // open/close |
NahuelM | 4:e59a99c5aa08 | 66 | } |
NahuelM | 4:e59a99c5aa08 | 67 | else{ |
NahuelM | 4:e59a99c5aa08 | 68 | ServoAngle = 1; // open/close |
NahuelM | 4:e59a99c5aa08 | 69 | } |
NahuelM | 4:e59a99c5aa08 | 70 | break; |
NahuelM | 4:e59a99c5aa08 | 71 | } |
NahuelM | 4:e59a99c5aa08 | 72 | |
NahuelM | 4:e59a99c5aa08 | 73 | } |
NahuelM | 4:e59a99c5aa08 | 74 | } |
NahuelM | 4:e59a99c5aa08 | 75 | */ |