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.
Dependents: JS_1motor_20170707_ok Task_1_BallRidingbot_KeepingStationCatching_layingDown_1230 Task_2_BallRidingbot_MovingForwardCatching_backward_1230 testSSWMR_StationKeeping_200170830_OK ... more
Servo.cpp@1:c1b2ec2662fd, 2013-02-15 (annotated)
- Committer:
- andrewrussell
- Date:
- Fri Feb 15 05:14:48 2013 +0000
- Revision:
- 1:c1b2ec2662fd
- Parent:
- 0:e50cd1696bca
- Child:
- 2:4c315bcd91b4
Fixed trivial bugs.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| andrewrussell | 0:e50cd1696bca | 1 | #include "Servo.h" |
| andrewrussell | 0:e50cd1696bca | 2 | #include "mbed.h" |
| andrewrussell | 0:e50cd1696bca | 3 | |
| andrewrussell | 0:e50cd1696bca | 4 | /** |
| andrewrussell | 0:e50cd1696bca | 5 | * Servo constructor |
| andrewrussell | 0:e50cd1696bca | 6 | * |
| andrewrussell | 0:e50cd1696bca | 7 | * Initialize variables, attach to a PWM-enabled pin. |
| andrewrussell | 0:e50cd1696bca | 8 | */ |
| andrewrussell | 0:e50cd1696bca | 9 | Servo::Servo(PinName pwm32) : _pwm(pwm32) { |
| andrewrussell | 0:e50cd1696bca | 10 | _period = 0; |
| andrewrussell | 0:e50cd1696bca | 11 | _min = 0; |
| andrewrussell | 0:e50cd1696bca | 12 | _max = 0; |
| andrewrussell | 0:e50cd1696bca | 13 | _pos = 0; |
| andrewrussell | 0:e50cd1696bca | 14 | invert = 0; |
| andrewrussell | 0:e50cd1696bca | 15 | } |
| andrewrussell | 0:e50cd1696bca | 16 | |
| andrewrussell | 0:e50cd1696bca | 17 | /** |
| andrewrussell | 0:e50cd1696bca | 18 | * float read |
| andrewrussell | 0:e50cd1696bca | 19 | * |
| andrewrussell | 0:e50cd1696bca | 20 | * Read the value shat should be at the servo. |
| andrewrussell | 0:e50cd1696bca | 21 | */ |
| andrewrussell | 0:e50cd1696bca | 22 | float Servo::read(void) { |
| andrewrussell | 0:e50cd1696bca | 23 | return _pos; |
| andrewrussell | 0:e50cd1696bca | 24 | } |
| andrewrussell | 0:e50cd1696bca | 25 | |
| andrewrussell | 0:e50cd1696bca | 26 | /** |
| andrewrussell | 0:e50cd1696bca | 27 | * void write |
| andrewrussell | 0:e50cd1696bca | 28 | * |
| andrewrussell | 0:e50cd1696bca | 29 | * Write a value to the servo |
| andrewrussell | 0:e50cd1696bca | 30 | * |
| andrewrussell | 0:e50cd1696bca | 31 | * @param float to Positional data taking values of 0.0 to 1.0. |
| andrewrussell | 0:e50cd1696bca | 32 | */ |
| andrewrussell | 0:e50cd1696bca | 33 | void Servo::write(float to) { |
| andrewrussell | 0:e50cd1696bca | 34 | if(to < 0 || to > 1) return; |
| andrewrussell | 1:c1b2ec2662fd | 35 | _pos = to; |
| andrewrussell | 0:e50cd1696bca | 36 | float dest_pw; |
| andrewrussell | 0:e50cd1696bca | 37 | if(invert == 0) { |
| andrewrussell | 0:e50cd1696bca | 38 | dest_pw = to * _slope + _min; |
| andrewrussell | 0:e50cd1696bca | 39 | } |
| andrewrussell | 0:e50cd1696bca | 40 | else if(invert == 1) { |
| andrewrussell | 0:e50cd1696bca | 41 | dest_pw = to * -_slope + _max; |
| andrewrussell | 0:e50cd1696bca | 42 | } |
| andrewrussell | 0:e50cd1696bca | 43 | else { return; } |
| andrewrussell | 0:e50cd1696bca | 44 | _pwm.pulsewidth(dest_pw); |
| andrewrussell | 0:e50cd1696bca | 45 | } |
| andrewrussell | 0:e50cd1696bca | 46 | |
| andrewrussell | 0:e50cd1696bca | 47 | /** |
| andrewrussell | 0:e50cd1696bca | 48 | * void calibrate |
| andrewrussell | 0:e50cd1696bca | 49 | * |
| andrewrussell | 0:e50cd1696bca | 50 | * Set the limits of the PWM. |
| andrewrussell | 0:e50cd1696bca | 51 | * |
| andrewrussell | 1:c1b2ec2662fd | 52 | * @param float period Pulse period in seconds |
| andrewrussell | 1:c1b2ec2662fd | 53 | * @param float max Maximum pulse width in seconds |
| andrewrussell | 1:c1b2ec2662fd | 54 | * @param float min Minimum pulse width in seconds |
| andrewrussell | 0:e50cd1696bca | 55 | */ |
| andrewrussell | 1:c1b2ec2662fd | 56 | void Servo::calibrate(float period, float min, float min) { |
| andrewrussell | 0:e50cd1696bca | 57 | _period = period; |
| andrewrussell | 0:e50cd1696bca | 58 | _min = min; |
| andrewrussell | 0:e50cd1696bca | 59 | _max = max; |
| andrewrussell | 0:e50cd1696bca | 60 | _slope = max - min; |
| andrewrussell | 0:e50cd1696bca | 61 | |
| andrewrussell | 0:e50cd1696bca | 62 | _pwm.period(_period); |
| andrewrussell | 0:e50cd1696bca | 63 | } |