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.
main.cpp
- Committer:
- csellier
- Date:
- 2016-10-21
- Revision:
- 11:055ee1a3cb75
- Parent:
- 10:57a0c57cabac
- Child:
- 12:8ae6609a66bf
File content as of revision 11:055ee1a3cb75:
#include "mbed.h" #include "Servo.h" #define DISTANCE 0.45 #define VBORDER 0.5 //VBORDER being the LDR voltage value when going from the black line to the white surface and vice versa Serial pc (USBTX, USBRX); // USB serial interface Servo ServoRight(p21); // continuous rotation hobby servo right Servo ServoLeft(p22); // continuous rotation hobby servo left PwmOut LEDleft(p23); PwmOut LEDright(p24); AnalogIn IRfront(p15); AnalogIn IRleft(p16); AnalogIn IRright(p17); AnalogIn LDRleft(p18); AnalogIn LDRright(p19); void init_servo() { // calibrate the servos for +/-5ms over +/-45deg ServoRight.calibrate(0.0005,45); ServoLeft.calibrate(0.0005,45); } int main() { float front; float left; // float right; float LDRvalueleft; float LDRvalueright; // set the USB serial interface baud rate pc.baud(921600); init_servo(); while(1) { // Auto drive : the car will avoid all obstacles aroiund it and get away from them front = IRfront.read(); left = IRleft.read(); // right = IRright.read(); LDRvalueright = LDRright.read(); LDRvalueleft = LDRleft.read(); //output voltage of the LDR used for line following feature /***************************************************************************** / if (front > DISTANCE) { Collision avoidance system only,the robot will move away from an obstacle/wall if getting to close to it, backup program if the following doesn't work / if (left > DISTANCE) { / ServoRight.write(0.5); //turn right / ServoLeft.write(0.4); / } else { / ServoRight.write(0.6); // turn left / ServoLeft.write(0.5); / } / } else if (left > DISTANCE) { / if (right < DISTANCE) { / ServoRight.write(0.5); // right / ServoLeft.write(0.4); / } else { / ServoRight.write(0.6); // forward / ServoLeft.write(0.4); / } / } *****************************************************************************/ //Turn both LED's on for the line following feature LEDleft=1; LEDright=1; // send the servo command to the servos themselves //ServoRight.write(0.6); // write to the continuous rotation servo1 // ServoLeft.write(0.4); // write to the continous servo2 if (front > DISTANCE) { // turn right ServoRight.write(0.5); // stop servoright ServoLeft.write(0.4); // turn on servoleft wait(2.0); //wait 2 seconds to allow the robot to turn approximately 90 degrees // go straight for a second to establish separation from the object ServoRight.write(0.6); ServoLeft.write(0.4); wait(1.0); if (left > DISTANCE) { // keep going straight for 1 second ServoRight.write(0.6); // write to the continuous rotation servo1 ServoLeft.write(0.4); // write to the continous servo2 wait(1.0); } else { // turn left 90 degrees ServoRight.write(0.5); ServoLeft.write(0.4); wait(2.0); // wait 2 seconds to allow the robot to turn approx. 90 degrees ServoRight.write(0.6); //go straight for 1 second ServoLeft.write(0.4); if (left > DISTANCE) { //keep going straight for 1 second ServoRight.write(0.6); ServoLeft.write(0.4); wait(1.0); //wait for 1 second } else { // turn left 90 degrees ServoRight.write(0.6); ServoLeft.write(0.5); wait(2.0); //wait 2 seconds to allow robot to turn 90 degrees ServoRight.write(0.6); //after turning 90 deg turn both servos on so the robot goes straight ahead ServoLeft.write(0.4); } } } else if (front < DISTANCE) { //follow line if (LDRvalueright < VBORDER && LDRvalueleft > VBORDER){ // turn right } if (LDRvalueright > VBORDER && LDRvalueleft < VBORDER){ //turn left } if LDRvalueright = VBORDER && LDRvalueright = VBORDER) { //go straight } } } }