This is my first attempt using an mbed. My project will be to build a rover that uses a compass, collision detection and ultimately GPS to try and be as free thinking as possible. Having great fun so far and learning practical things all the time. The mbed is a great learning platform and the community fantastic.

Dependencies:   TextLCD mbed SRF08

Committer:
Degs
Date:
Fri Apr 01 20:29:35 2011 +0000
Revision:
0:b62ee1c95bd3
First Revision just drives Forward and Reverses if object detected for collision.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Degs 0:b62ee1c95bd3 1 #include "mbed.h"
Degs 0:b62ee1c95bd3 2 #include "SRF08.h"
Degs 0:b62ee1c95bd3 3 #include "TextLCD.h"
Degs 0:b62ee1c95bd3 4
Degs 0:b62ee1c95bd3 5 //This program uses the Magnevation Dual Driver board that I originally
Degs 0:b62ee1c95bd3 6 //had for the OOPIC. I have the board driving HN-GH12-2217Y geared motors
Degs 0:b62ee1c95bd3 7 //type HSIANG NENG.
Degs 0:b62ee1c95bd3 8
Degs 0:b62ee1c95bd3 9 SRF08 srf08(p9, p10, 0xE0); // Define SDA, SCL pin and I2C address
Degs 0:b62ee1c95bd3 10
Degs 0:b62ee1c95bd3 11 PwmOut MotorRightWheel(p23); // pwm
Degs 0:b62ee1c95bd3 12 PwmOut MotorLeftWheel(p25); // pwm
Degs 0:b62ee1c95bd3 13
Degs 0:b62ee1c95bd3 14 DigitalOut DirectionR=p27;//Sets the direction pin on the Magnevation
Degs 0:b62ee1c95bd3 15 DigitalOut DirectionL=p29;
Degs 0:b62ee1c95bd3 16 DigitalOut BrakeR=p28;//Releases the Brake pin on the Magnevation
Degs 0:b62ee1c95bd3 17 DigitalOut BrakeL=p30;
Degs 0:b62ee1c95bd3 18
Degs 0:b62ee1c95bd3 19 TextLCD lcd(p15, p16, p17, p18, p19, p20);
Degs 0:b62ee1c95bd3 20
Degs 0:b62ee1c95bd3 21 float RangeReading() {
Degs 0:b62ee1c95bd3 22 float value;
Degs 0:b62ee1c95bd3 23 value = srf08.read();
Degs 0:b62ee1c95bd3 24 return (value);
Degs 0:b62ee1c95bd3 25 }
Degs 0:b62ee1c95bd3 26
Degs 0:b62ee1c95bd3 27 float DriveForwardFullSpeed() {
Degs 0:b62ee1c95bd3 28 float s;
Degs 0:b62ee1c95bd3 29 DirectionR=0;//Set the direction Right motor
Degs 0:b62ee1c95bd3 30 DirectionL=1;//Set the direction Left motor
Degs 0:b62ee1c95bd3 31 BrakeR = BrakeL = 1;//Take Brake OFF
Degs 0:b62ee1c95bd3 32 for (s= 0.0; s < 1.0 ; s += 0.01) {
Degs 0:b62ee1c95bd3 33 MotorRightWheel=s;
Degs 0:b62ee1c95bd3 34 MotorLeftWheel=s;
Degs 0:b62ee1c95bd3 35 wait(0.2);
Degs 0:b62ee1c95bd3 36 }
Degs 0:b62ee1c95bd3 37 return (s);
Degs 0:b62ee1c95bd3 38 }
Degs 0:b62ee1c95bd3 39
Degs 0:b62ee1c95bd3 40 float DriveReverse() {
Degs 0:b62ee1c95bd3 41 float s =0;
Degs 0:b62ee1c95bd3 42 DirectionR=1;//Set the direction Right motor
Degs 0:b62ee1c95bd3 43 DirectionL=0;//Set the direction Left motor
Degs 0:b62ee1c95bd3 44 BrakeR = BrakeL = 1; //Take Brake OFF
Degs 0:b62ee1c95bd3 45 for (float s= 0.0; s < 1.0 ; s += 0.01) {
Degs 0:b62ee1c95bd3 46 MotorRightWheel=s;
Degs 0:b62ee1c95bd3 47 MotorLeftWheel=s;
Degs 0:b62ee1c95bd3 48 wait(0.2);
Degs 0:b62ee1c95bd3 49 }
Degs 0:b62ee1c95bd3 50 wait(0.2);// Slow down and stop
Degs 0:b62ee1c95bd3 51 for (float s = 1.0; s > 0.0; s -= 0.01) {
Degs 0:b62ee1c95bd3 52 MotorRightWheel=s;
Degs 0:b62ee1c95bd3 53 MotorLeftWheel=s;
Degs 0:b62ee1c95bd3 54 wait(0.2);
Degs 0:b62ee1c95bd3 55 }
Degs 0:b62ee1c95bd3 56 BrakeR = BrakeL = 0; //Put Brake ON
Degs 0:b62ee1c95bd3 57 return (s);
Degs 0:b62ee1c95bd3 58 }
Degs 0:b62ee1c95bd3 59
Degs 0:b62ee1c95bd3 60 float ZeroSpeedForward() {
Degs 0:b62ee1c95bd3 61 float s =0;
Degs 0:b62ee1c95bd3 62 DirectionR=0;//Set the direction Right motor
Degs 0:b62ee1c95bd3 63 DirectionL=1;//Set the direction Left motor
Degs 0:b62ee1c95bd3 64 for (float s = 1.0; s > 0.0; s -= 0.01) {
Degs 0:b62ee1c95bd3 65 MotorRightWheel=s;
Degs 0:b62ee1c95bd3 66 MotorLeftWheel=s;
Degs 0:b62ee1c95bd3 67 wait(0.2);
Degs 0:b62ee1c95bd3 68 }
Degs 0:b62ee1c95bd3 69 BrakeR = BrakeL = 0; //Put Brake ON
Degs 0:b62ee1c95bd3 70 return (s);
Degs 0:b62ee1c95bd3 71 }
Degs 0:b62ee1c95bd3 72
Degs 0:b62ee1c95bd3 73 int main() {
Degs 0:b62ee1c95bd3 74 float distance, speed = 0;
Degs 0:b62ee1c95bd3 75 while (1) {
Degs 0:b62ee1c95bd3 76 lcd.cls();
Degs 0:b62ee1c95bd3 77 distance = RangeReading();
Degs 0:b62ee1c95bd3 78 lcd.printf("Range: %2.f cm\n",distance);
Degs 0:b62ee1c95bd3 79 wait(0.2);
Degs 0:b62ee1c95bd3 80 if (distance >100 && speed <0.1) {
Degs 0:b62ee1c95bd3 81 lcd.printf("Forward \n");
Degs 0:b62ee1c95bd3 82 speed = DriveForwardFullSpeed();
Degs 0:b62ee1c95bd3 83 }
Degs 0:b62ee1c95bd3 84 distance = RangeReading();
Degs 0:b62ee1c95bd3 85 lcd.printf("Range: %2.f cm\n",distance);
Degs 0:b62ee1c95bd3 86 if (distance < 100 && speed >0.5) {
Degs 0:b62ee1c95bd3 87 speed = ZeroSpeedForward();
Degs 0:b62ee1c95bd3 88 }
Degs 0:b62ee1c95bd3 89 distance = RangeReading();
Degs 0:b62ee1c95bd3 90 if (distance > 0.0 && speed == 0.0) {
Degs 0:b62ee1c95bd3 91 lcd.printf("Reverse \n");
Degs 0:b62ee1c95bd3 92 speed = DriveReverse();
Degs 0:b62ee1c95bd3 93 }
Degs 0:b62ee1c95bd3 94 wait (0.5);
Degs 0:b62ee1c95bd3 95 }
Degs 0:b62ee1c95bd3 96 }
Degs 0:b62ee1c95bd3 97