Curtis Sellier / Mbed 2 deprecated Project_Car_Curtis_Non_Tested

Dependencies:   Servo mbed

Committer:
csellier
Date:
Sun Oct 16 16:36:56 2016 +0000
Revision:
9:a543d0cdfce9
Parent:
8:07464acc8a85
Child:
10:57a0c57cabac
updated program avoid obstacle 90 90 90

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kmarangi 0:65fd20a989e9 1 #include "mbed.h"
kmarangi 0:65fd20a989e9 2 #include "Servo.h"
csellier 3:581d391d248c 3
csellier 3:581d391d248c 4 #define DISTANCE 0.45
csellier 3:581d391d248c 5
csellier 3:581d391d248c 6
csellier 2:0b86e6482e4b 7 Serial pc (USBTX, USBRX); // USB serial interface
csellier 3:581d391d248c 8
csellier 1:8c1e3382b4d7 9 Servo ServoRight(p21); // continuous rotation hobby servo right
csellier 1:8c1e3382b4d7 10 Servo ServoLeft(p22); // continuous rotation hobby servo left
csellier 3:581d391d248c 11
csellier 2:0b86e6482e4b 12 PwmOut LEDleft(p23);
csellier 2:0b86e6482e4b 13 PwmOut LEDright(p24);
csellier 3:581d391d248c 14
csellier 2:0b86e6482e4b 15 AnalogIn IRfront(p15);
csellier 2:0b86e6482e4b 16 AnalogIn IRleft(p16);
csellier 2:0b86e6482e4b 17 AnalogIn IRright(p17);
csellier 2:0b86e6482e4b 18 AnalogIn LDRleft(p18);
csellier 2:0b86e6482e4b 19 AnalogIn LDRright(p19);
kmarangi 0:65fd20a989e9 20
kmarangi 0:65fd20a989e9 21 void init_servo() {
csellier 3:581d391d248c 22 // calibrate the servos for +/-5ms over +/-45deg
csellier 3:581d391d248c 23 ServoRight.calibrate(0.0005,45);
csellier 3:581d391d248c 24 ServoLeft.calibrate(0.0005,45);
kmarangi 0:65fd20a989e9 25 }
kmarangi 0:65fd20a989e9 26
csellier 3:581d391d248c 27 int main() {
csellier 3:581d391d248c 28 float front;
csellier 3:581d391d248c 29 float left;
csellier 3:581d391d248c 30 float right;
csellier 9:a543d0cdfce9 31 float LDRvalueleft;
csellier 9:a543d0cdfce9 32 float LDRvalueright;
kmarangi 0:65fd20a989e9 33
csellier 3:581d391d248c 34 // set the USB serial interface baud rate
csellier 3:581d391d248c 35 pc.baud(921600);
csellier 3:581d391d248c 36 init_servo();
kmarangi 0:65fd20a989e9 37
kmarangi 0:65fd20a989e9 38 while(1) {
csellier 3:581d391d248c 39
csellier 9:a543d0cdfce9 40 // Auto drive : the car will avoid all obstacles aroiund it and get away from them
csellier 3:581d391d248c 41 front = IRfront.read();
csellier 3:581d391d248c 42 left = IRleft.read();
csellier 3:581d391d248c 43 right = IRright.read();
csellier 8:07464acc8a85 44 LDRvalueright = LDRright.read();
csellier 9:a543d0cdfce9 45 LDRvalueleft = LDRleft.read(); //output voltage of the LDR used for line following feature
csellier 3:581d391d248c 46
csellier 9:a543d0cdfce9 47 /*****************************************************************************
csellier 9:a543d0cdfce9 48 / if (front > DISTANCE) { Collision avoidance system only,the robot will move away from an obstacle/wall if getting to close to it
csellier 9:a543d0cdfce9 49 / if (left > DISTANCE) {
csellier 9:a543d0cdfce9 50 / ServoRight.write(0.5); //turn right
csellier 9:a543d0cdfce9 51 / ServoLeft.write(0.4);
csellier 9:a543d0cdfce9 52 / } else {
csellier 9:a543d0cdfce9 53 / ServoRight.write(0.6); // turn left
csellier 9:a543d0cdfce9 54 / ServoLeft.write(0.5);
csellier 9:a543d0cdfce9 55 / }
csellier 9:a543d0cdfce9 56 / } else if (left > DISTANCE) {
csellier 9:a543d0cdfce9 57 / if (right < DISTANCE) {
csellier 9:a543d0cdfce9 58 / ServoRight.write(0.5); // right
csellier 9:a543d0cdfce9 59 / ServoLeft.write(0.4);
csellier 9:a543d0cdfce9 60 / } else {
csellier 9:a543d0cdfce9 61 / ServoRight.write(0.6); // forward
csellier 9:a543d0cdfce9 62 / ServoLeft.write(0.4);
csellier 9:a543d0cdfce9 63 / }
csellier 9:a543d0cdfce9 64 / }
csellier 9:a543d0cdfce9 65 /*****************************************************************************/
csellier 3:581d391d248c 66 //Turn both LED's on for the line following feature
csellier 3:581d391d248c 67 LEDleft=1;
csellier 3:581d391d248c 68 LEDright=1;
csellier 3:581d391d248c 69
csellier 6:550027985c6c 70 // send the servo command to the servos themselves
csellier 9:a543d0cdfce9 71 //ServoRight.write(0.6); // write to the continuous rotation servo1
csellier 9:a543d0cdfce9 72 // ServoLeft.write(0.4); // write to the continous servo2
csellier 9:a543d0cdfce9 73
csellier 9:a543d0cdfce9 74 if (front > DISTANCE) {
csellier 9:a543d0cdfce9 75 // turn right
csellier 9:a543d0cdfce9 76 ServoRight.write(0.5); // stop servoright
csellier 9:a543d0cdfce9 77 ServoLeft.write(0.4); // turn on servoleft
csellier 9:a543d0cdfce9 78 wait(2.0); //wait 2 seconds to allow the robot to turn approximately 90 degrees
csellier 9:a543d0cdfce9 79 if (left > DISTANCE) {
csellier 9:a543d0cdfce9 80 // keep going straight for 1 second
csellier 9:a543d0cdfce9 81 ServoRight.write(0.6); // write to the continuous rotation servo1
csellier 9:a543d0cdfce9 82 ServoLeft.write(0.4); // write to the continous servo2
csellier 9:a543d0cdfce9 83 wait(1.0);
csellier 9:a543d0cdfce9 84 } else {
csellier 9:a543d0cdfce9 85 // turn left 90 degrees
csellier 9:a543d0cdfce9 86 ServoRight.write(0.5);
csellier 9:a543d0cdfce9 87 ServoLeft.write(0.4);
csellier 9:a543d0cdfce9 88 wait(2.0); // wait 2 seconds to allow the robot to turn approx. 90 degrees
csellier 9:a543d0cdfce9 89 ServoRight.write(0.6); //go straight for 1 second
csellier 9:a543d0cdfce9 90 ServoLeft.write(0.4);
csellier 9:a543d0cdfce9 91 if (left > DISTANCE) {
csellier 9:a543d0cdfce9 92 //keep going straight for 1 second
csellier 9:a543d0cdfce9 93 ServoRight.write(0.6);
csellier 9:a543d0cdfce9 94 ServoLeft.write(0.4);
csellier 9:a543d0cdfce9 95 wait(1.0); //wait for 1 second
csellier 9:a543d0cdfce9 96 } else {
csellier 9:a543d0cdfce9 97 // turn left 90 degrees
csellier 9:a543d0cdfce9 98 ServoRight.write(0.6);
csellier 9:a543d0cdfce9 99 ServoLeft.write(0.5);
csellier 9:a543d0cdfce9 100 wait(2.0); //wait 2 seconds to allow robot to turn 90 degrees
csellier 9:a543d0cdfce9 101 }
csellier 9:a543d0cdfce9 102 }
csellier 9:a543d0cdfce9 103
csellier 9:a543d0cdfce9 104
kmarangi 0:65fd20a989e9 105
csellier 3:581d391d248c 106 }
kmarangi 0:65fd20a989e9 107 }
kmarangi 0:65fd20a989e9 108
kmarangi 0:65fd20a989e9 109