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
main.cpp@0:b62ee1c95bd3, 2011-04-01 (annotated)
- 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?
User | Revision | Line number | New 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 |