
Robot code for searching an object and charging at it.
Dependencies: HCSR04 Motor mbed
functions.cpp
- Committer:
- abdsha01
- Date:
- 2015-05-23
- Revision:
- 1:bd88d4062c97
- Parent:
- 0:15664f71b21f
- Child:
- 4:0507835a3dce
File content as of revision 1:bd88d4062c97:
// The following file implements all the functions necessary // for the robot. // Please don't modify any of these functions! #include "mbed.h" #include "Motor.h" #include "hcsr04.h" // Returns value from the QRE1113 // lower numbers mean more refleacive // more than 3000 means nothing was reflected. int read_line1() { // Time to record how long input is active Timer temp_t; // Activate the line sensor and then read line1.output(); line1 = 1; wait_us(15); line1.input(); // Start timer temp_t.start(); // Time how long the input is HIGH, but quit // after 1ms as nothing happens after that while (line1 == 1 && temp_t.read_us() < 1000); return temp_t.read_us(); } int read_line2() { // Time to record how long input is active Timer temp_t; // Activate the line sensor and then read line2.output(); line2 = 1; wait_us(15); line2.input(); // Start timer t.start(); // Time how long the input is HIGH, but quit // after 1ms as nothing happens after that while (line2 == 1 && temp_t.read_us() < 1000); return t.read_us(); } int detect_line() { int line1val = read_line1(); int line2val = read_line2(); if ((line1val-line2val) > 50) { printf("Line detected from front"); return 1; } else if ((line1val-line2val) < -50) { printf("Line detected from back"); return -1; } else { printf("Line not detected"); return 0; } } void reverse() { printf("Reverse\n"); MotorLeft.speed((chargespeed)); MotorRight.speed(-(chargespeed)); wait_ms(1000); return; } void reverseandturn() { printf("Reverse and turn\n"); MotorLeft.speed((chargespeed-0.3)); MotorRight.speed(-(chargespeed-0.1)); wait_ms(2000); return; } void charge() { MotorLeft.speed(chargespeed); MotorRight.speed(chargespeed); return; } int detect_object(int smooth) { // Start a timer - finds an object for 10 seconds // if it doesn't find anything returns 0 Timer usensor_t; usensor_t.start(); // Variable to store sensed value int sense; while (usensor_t.readms < 10000) { // Start the ultrasonic sensor usensor.start(); dist = usensor.get_dist_cm(); // If an object is detected based on out set range return 1 if (dist <= range && dist >= 1) { sense = 1; break; } else { sense = 0; MotorLeft.speed(searchspeed); MotorRight.speed(-(searchspeed)); } } return sense; }