Programming for Shadow Robot control for smart phone mapping application.

Dependencies:   Motor LSM9DS1_Library_cal mbed Servo

Committer:
greiner218
Date:
Tue Nov 22 19:46:41 2016 +0000
Revision:
0:616fbf21a20e
Child:
1:8638bdaf172b
Initial.

Who changed what in which revision?

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