Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: HCSR04 Motor mbed
main.cpp
- Committer:
 - lhartfield
 - Date:
 - 2015-06-07
 - Revision:
 - 23:07b3c12800a6
 - Parent:
 - 21:42c0db071a7f
 - Parent:
 - 22:e808fb71847d
 - Child:
 - 24:513c88816ed8
 
File content as of revision 23:07b3c12800a6:
// Code written by:
// Jon Baker
// Alessandro Grande
// Abdul-Rehman Sharif
// Lucinda Hartfield
// Circuitry made by:
// Yucando Navarrete
// Vivekanand Gupta
// The following code will control a robotic car
// by detetecting an object and charging towards it
// it uses basic functions as:
//
// move_forward(speed)
//                      -   used to move_forward on an object detected
//                          the robot will move in a straight line
//                          until it detects the arena line where
//                          it will use reverse() to move back
//
// detect_object(range, speed)
//                      -   used to detect an object, the robot will
//                          move in a circle to find an object and
//                          return 1 if it finds something and return
//                          0 if it does not find anything - the search
//                          will be carried out for 15 seconds.
//
// detect_line ()
//                      -   used to detect a line, it returns the following
//                          an int value as follows:
//                          0  - if no line is detected
//                          1  - if line detected from the front
//                          -1 - if line detected from the back
//
// reverse(speed)
//                      -   reverses the robot with move_forwardspeed in same position
//
// reverseandturn(speed)
//                      -   reverses whie moving in a circular direction
//
// stop()
//                      -   stops the robot
//
// moverandom(speed)
//                      -   used to move the robot randomly, the robot will either
//                          move forward, move backward, or turn around. The movement 
//                          will be carried out for a random time
//
// Libraries for using the above functions and more ...
#include "mbed.h"
#include "Motor.h"
#include "hcsr04.h"
#include "functions.h"
// Set for debugging purpose
// Example: pc(TX, RX)
//Serial pc(USBTX, USBRX);
// Global parameters
// Speed at which it move_forwards an object
// optimum value: 0.4 to 0.8
float move_forwardspeed;
// Speed at which it rotates to find an object
// optimum value: 0.3 to 0.5
float searchspeed;
// Range of detection
// optimum value: 30 to 50
unsigned int range;
void initialise()
{
    move_forwardspeed = 0.6;
    searchspeed = 0.5;
    range = 30;
    // Wait for 5 seconds to move away from robot
    wait(5);
}
// The main loop - please write your code here
int main()
{
    // Initialise the code
    initialise();
    printf("Starting the robot...");
    Timer t;
    t.start();
    int detect_l = 0;
    int detect_o = 0;
    while(true) {
        // Sample code to detect and object and move_forward at it
        detect_o = detect_object(range, searchspeed);
        if (detect_o == 1) {
            move_forward(move_forwardspeed);
            while (true) {
                detect_l = detect_line();
                // If line is detected from front then reverse
                if(detect_l == 1) {
                    stop();
                    turn_leds_on();
                    reverse(searchspeed);
                    wait(1.5);
                    detect_l = 0;
                    break;
                // If line is detected from back just keep on moving forward
                } else if (detect_l == -1) {
                    stop();
                    turn_leds_on();
                    move_forward(searchspeed);
                    wait(1.5);
                    detect_l = 0;
                    break;
                }
            }
        } else {
            move_random();
        }
        detect_o = 0;
        stop();
    }
}