Simple example to drive a servo on pin 1. A serial input at 57600 baud send a percentage from 0 to 100 (followed by whitespace) and a pulse goes out to drive an RC servo to one end of travel to another. Example for my DDJ blog at http://www.ddj.com/embedded.
meter.cpp@0:10d20e0f582e, 2014-05-12 (annotated)
- Committer:
- wd5gnr
- Date:
- Mon May 12 01:28:06 2014 +0000
- Revision:
- 0:10d20e0f582e
First commit;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wd5gnr | 0:10d20e0f582e | 1 | |
wd5gnr | 0:10d20e0f582e | 2 | #include "mbed.h" |
wd5gnr | 0:10d20e0f582e | 3 | |
wd5gnr | 0:10d20e0f582e | 4 | PwmOut out0(P0_8); |
wd5gnr | 0:10d20e0f582e | 5 | |
wd5gnr | 0:10d20e0f582e | 6 | |
wd5gnr | 0:10d20e0f582e | 7 | Serial host(USBTX, USBRX); |
wd5gnr | 0:10d20e0f582e | 8 | |
wd5gnr | 0:10d20e0f582e | 9 | |
wd5gnr | 0:10d20e0f582e | 10 | |
wd5gnr | 0:10d20e0f582e | 11 | |
wd5gnr | 0:10d20e0f582e | 12 | |
wd5gnr | 0:10d20e0f582e | 13 | int main(void) |
wd5gnr | 0:10d20e0f582e | 14 | { |
wd5gnr | 0:10d20e0f582e | 15 | host.baud(57600); // TODO read a digital input to select high/low baud |
wd5gnr | 0:10d20e0f582e | 16 | out0.period_ms(20); |
wd5gnr | 0:10d20e0f582e | 17 | out0.pulsewidth_us(2600); |
wd5gnr | 0:10d20e0f582e | 18 | |
wd5gnr | 0:10d20e0f582e | 19 | while(1) |
wd5gnr | 0:10d20e0f582e | 20 | { |
wd5gnr | 0:10d20e0f582e | 21 | unsigned int n=200; |
wd5gnr | 0:10d20e0f582e | 22 | host.scanf("%d",&n); // read from PC |
wd5gnr | 0:10d20e0f582e | 23 | if (n>100) continue; // make sure in range 0-100 |
wd5gnr | 0:10d20e0f582e | 24 | n=((unsigned int) (1600.0*n/100.0)); // get a number from 0 to 1600 |
wd5gnr | 0:10d20e0f582e | 25 | n=1600-n; // reverse motion direction so now it is 1600 to 0 |
wd5gnr | 0:10d20e0f582e | 26 | out0.pulsewidth_us(n+1000); // add 1000 so that total number is 1000 to 2600 (or 1mS to 2.6mS) |
wd5gnr | 0:10d20e0f582e | 27 | } |
wd5gnr | 0:10d20e0f582e | 28 | } |
wd5gnr | 0:10d20e0f582e | 29 | |
wd5gnr | 0:10d20e0f582e | 30 |