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.

Dependencies:   mbed

Committer:
wd5gnr
Date:
Mon May 12 01:28:06 2014 +0000
Revision:
0:10d20e0f582e
First commit;

Who changed what in which revision?

UserRevisionLine numberNew 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