Programming for Shadow Robot control for smart phone mapping application.
Dependencies: Motor LSM9DS1_Library_cal mbed Servo
main.cpp@0:616fbf21a20e, 2016-11-22 (annotated)
- Committer:
- greiner218
- Date:
- Tue Nov 22 19:46:41 2016 +0000
- Revision:
- 0:616fbf21a20e
- Child:
- 1:8638bdaf172b
Initial.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
greiner218 | 0:616fbf21a20e | 1 | #include "mbed.h" |
greiner218 | 0:616fbf21a20e | 2 | #include "rtos.h" |
greiner218 | 0:616fbf21a20e | 3 | #include "Motor.h" |
greiner218 | 0:616fbf21a20e | 4 | |
greiner218 | 0:616fbf21a20e | 5 | Motor rwheel(p26, p25, p24); // pwm, fwd, rev |
greiner218 | 0:616fbf21a20e | 6 | Motor lwheel(p21, p22, p23); // pwm, fwd, rev |
greiner218 | 0:616fbf21a20e | 7 | Timer timestamp; |
greiner218 | 0:616fbf21a20e | 8 | |
greiner218 | 0:616fbf21a20e | 9 | DigitalOut myled(LED1); |
greiner218 | 0:616fbf21a20e | 10 | |
greiner218 | 0:616fbf21a20e | 11 | /* move(float, int) |
greiner218 | 0:616fbf21a20e | 12 | Usage: Moves the robot forward in a straight line at a constant speed. |
greiner218 | 0:616fbf21a20e | 13 | s is a float from -1 to 1 representing the speed to move. |
greiner218 | 0:616fbf21a20e | 14 | A negative speed is used for backwards movement. |
greiner218 | 0:616fbf21a20e | 15 | t is the time in milliseconds to move. |
greiner218 | 0:616fbf21a20e | 16 | */ |
greiner218 | 0:616fbf21a20e | 17 | void move(float s, int t) |
greiner218 | 0:616fbf21a20e | 18 | { |
greiner218 | 0:616fbf21a20e | 19 | Timer timer; |
greiner218 | 0:616fbf21a20e | 20 | //Start the timer |
greiner218 | 0:616fbf21a20e | 21 | timer.start(); |
greiner218 | 0:616fbf21a20e | 22 | //Set the robot in motion at speed s |
greiner218 | 0:616fbf21a20e | 23 | rwheel.speed(s); |
greiner218 | 0:616fbf21a20e | 24 | lwheel.speed(s); |
greiner218 | 0:616fbf21a20e | 25 | //Give other threads priority until the elapsed time |
greiner218 | 0:616fbf21a20e | 26 | while(timer.read_ms() < t); //Thread::yield(); |
greiner218 | 0:616fbf21a20e | 27 | //Stop the robot |
greiner218 | 0:616fbf21a20e | 28 | rwheel.speed(0); |
greiner218 | 0:616fbf21a20e | 29 | lwheel.speed(0); |
greiner218 | 0:616fbf21a20e | 30 | } |
greiner218 | 0:616fbf21a20e | 31 | |
greiner218 | 0:616fbf21a20e | 32 | /* turn(float,int) |
greiner218 | 0:616fbf21a20e | 33 | Usage: Turns the robot about its center at constant angular speed. |
greiner218 | 0:616fbf21a20e | 34 | s is a float from -1 to 1 representing the speed to turn. |
greiner218 | 0:616fbf21a20e | 35 | A positive s indicates a clockwise rotation. |
greiner218 | 0:616fbf21a20e | 36 | A negative s indicates a counter-clockwise rotation. |
greiner218 | 0:616fbf21a20e | 37 | */ |
greiner218 | 0:616fbf21a20e | 38 | void turn(float s, int t) |
greiner218 | 0:616fbf21a20e | 39 | { |
greiner218 | 0:616fbf21a20e | 40 | Timer timer; |
greiner218 | 0:616fbf21a20e | 41 | //Start the timer |
greiner218 | 0:616fbf21a20e | 42 | timer.start(); |
greiner218 | 0:616fbf21a20e | 43 | //Set the robot in motion turning at speed s |
greiner218 | 0:616fbf21a20e | 44 | rwheel.speed(-1*s); |
greiner218 | 0:616fbf21a20e | 45 | lwheel.speed(s); |
greiner218 | 0:616fbf21a20e | 46 | //Give other threads priority until the elapsed time |
greiner218 | 0:616fbf21a20e | 47 | while(timer.read_ms() < t);// Thread::yield(); |
greiner218 | 0:616fbf21a20e | 48 | //Stop the robot |
greiner218 | 0:616fbf21a20e | 49 | rwheel.speed(0); |
greiner218 | 0:616fbf21a20e | 50 | lwheel.speed(0); |
greiner218 | 0:616fbf21a20e | 51 | } |
greiner218 | 0:616fbf21a20e | 52 | int main() |
greiner218 | 0:616fbf21a20e | 53 | { |
greiner218 | 0:616fbf21a20e | 54 | timestamp.start(); |
greiner218 | 0:616fbf21a20e | 55 | while(1) |
greiner218 | 0:616fbf21a20e | 56 | { |
greiner218 | 0:616fbf21a20e | 57 | myled = 0; |
greiner218 | 0:616fbf21a20e | 58 | move(.5,2000); |
greiner218 | 0:616fbf21a20e | 59 | move(-1,2000); |
greiner218 | 0:616fbf21a20e | 60 | move(1,2000); |
greiner218 | 0:616fbf21a20e | 61 | turn(1,2000); |
greiner218 | 0:616fbf21a20e | 62 | turn(-1,2000); |
greiner218 | 0:616fbf21a20e | 63 | myled=1; |
greiner218 | 0:616fbf21a20e | 64 | wait(5); |
greiner218 | 0:616fbf21a20e | 65 | } |
greiner218 | 0:616fbf21a20e | 66 | } |