This is the main code section

Dependencies:   HC_SR04_Ultrasonic_Library mbed

Committer:
vceyssens3
Date:
Sun Apr 30 23:49:22 2017 +0000
Revision:
0:b99573af2591
main code;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vceyssens3 0:b99573af2591 1 #include "mbed.h"
vceyssens3 0:b99573af2591 2 #include "ultrasonic.h"
vceyssens3 0:b99573af2591 3
vceyssens3 0:b99573af2591 4 Serial pc(USBTX, USBRX);
vceyssens3 0:b99573af2591 5 DigitalOut start(p30,1);
vceyssens3 0:b99573af2591 6 DigitalOut right(p29,1);
vceyssens3 0:b99573af2591 7 DigitalOut left(p28,1);
vceyssens3 0:b99573af2591 8 DigitalOut up(p27,1);
vceyssens3 0:b99573af2591 9 DigitalOut down(p26,1);
vceyssens3 0:b99573af2591 10 DigitalOut on_switch(p25,0);
vceyssens3 0:b99573af2591 11 DigitalOut myled(LED1);
vceyssens3 0:b99573af2591 12 DigitalOut led2(LED2);
vceyssens3 0:b99573af2591 13 DigitalOut led3(LED3);
vceyssens3 0:b99573af2591 14 DigitalOut led4(LED4);
vceyssens3 0:b99573af2591 15 InterruptIn car_start(p23);
vceyssens3 0:b99573af2591 16
vceyssens3 0:b99573af2591 17
vceyssens3 0:b99573af2591 18 //int volatile start_var = 0;
vceyssens3 0:b99573af2591 19 //int volatile counter = 1;
vceyssens3 0:b99573af2591 20 //int volatile drive_var = 0;
vceyssens3 0:b99573af2591 21 //int volatile movement = 0;
vceyssens3 0:b99573af2591 22 int volatile right_var = 0;
vceyssens3 0:b99573af2591 23 int volatile left_var = 0;
vceyssens3 0:b99573af2591 24
vceyssens3 0:b99573af2591 25 void drive_func();
vceyssens3 0:b99573af2591 26
vceyssens3 0:b99573af2591 27 void dist(int distance) //necessary for the sonar to work. I dont know why.
vceyssens3 0:b99573af2591 28 {
vceyssens3 0:b99573af2591 29
vceyssens3 0:b99573af2591 30 }
vceyssens3 0:b99573af2591 31
vceyssens3 0:b99573af2591 32 ultrasonic front(p6, p7, .1, 1, &dist); //Set the trigger pin to D8 and the echo pin to D9
vceyssens3 0:b99573af2591 33 ultrasonic rightc(p8,p9,.1,1, &dist);
vceyssens3 0:b99573af2591 34 ultrasonic leftc(p21,p22,.1,1, &dist); //have updates every .1 seconds and a timeout after 1
vceyssens3 0:b99573af2591 35 ultrasonic back(p13,p14,0.1,1, &dist);
vceyssens3 0:b99573af2591 36
vceyssens3 0:b99573af2591 37 void starting_commands(){ // toggles the button to start the cop car
vceyssens3 0:b99573af2591 38 start = 0;
vceyssens3 0:b99573af2591 39 wait(0.1);
vceyssens3 0:b99573af2591 40 start = 1;
vceyssens3 0:b99573af2591 41 wait(0.1);
vceyssens3 0:b99573af2591 42 }
vceyssens3 0:b99573af2591 43
vceyssens3 0:b99573af2591 44
vceyssens3 0:b99573af2591 45 void start_func() // sequence that gets the cop car into no noise run mode
vceyssens3 0:b99573af2591 46 {
vceyssens3 0:b99573af2591 47 on_switch =1;
vceyssens3 0:b99573af2591 48 starting_commands();
vceyssens3 0:b99573af2591 49 starting_commands();
vceyssens3 0:b99573af2591 50 starting_commands();
vceyssens3 0:b99573af2591 51 starting_commands();
vceyssens3 0:b99573af2591 52 starting_commands();
vceyssens3 0:b99573af2591 53 }
vceyssens3 0:b99573af2591 54
vceyssens3 0:b99573af2591 55 void drive_func() // pulses the drive pin; the pulsing is so that the car doesnt go too fast
vceyssens3 0:b99573af2591 56 {
vceyssens3 0:b99573af2591 57 front.checkDistance();
vceyssens3 0:b99573af2591 58 while(front.getCurrentDistance() > 300){
vceyssens3 0:b99573af2591 59 front.checkDistance();
vceyssens3 0:b99573af2591 60 up = 0;
vceyssens3 0:b99573af2591 61 wait(0.1);
vceyssens3 0:b99573af2591 62 up = 1;
vceyssens3 0:b99573af2591 63 wait(0.1);
vceyssens3 0:b99573af2591 64 }
vceyssens3 0:b99573af2591 65 }
vceyssens3 0:b99573af2591 66
vceyssens3 0:b99573af2591 67 void stop_func() // stops the car and checks right and left sonars for obstructions
vceyssens3 0:b99573af2591 68 {
vceyssens3 0:b99573af2591 69 up = 1;
vceyssens3 0:b99573af2591 70 down = 0;
vceyssens3 0:b99573af2591 71 wait(0.1);
vceyssens3 0:b99573af2591 72 down = 1;
vceyssens3 0:b99573af2591 73 front.checkDistance();
vceyssens3 0:b99573af2591 74 rightc.checkDistance();
vceyssens3 0:b99573af2591 75 leftc.checkDistance();
vceyssens3 0:b99573af2591 76 back.checkDistance();
vceyssens3 0:b99573af2591 77 if (rightc.getCurrentDistance()<300) right_var = 1;
vceyssens3 0:b99573af2591 78 if (leftc.getCurrentDistance()<300) left_var = 1;
vceyssens3 0:b99573af2591 79 }
vceyssens3 0:b99573af2591 80
vceyssens3 0:b99573af2591 81 void turn_func() // turns the car until the front sonar is unobstructed
vceyssens3 0:b99573af2591 82 {
vceyssens3 0:b99573af2591 83 int turn_var = 0;
vceyssens3 0:b99573af2591 84 while(turn_var == 0){
vceyssens3 0:b99573af2591 85 if (right_var == 0){
vceyssens3 0:b99573af2591 86 down = 0;
vceyssens3 0:b99573af2591 87 wait(0.1);
vceyssens3 0:b99573af2591 88 down = 1;
vceyssens3 0:b99573af2591 89 right=up=0;
vceyssens3 0:b99573af2591 90 wait(0.1);
vceyssens3 0:b99573af2591 91 right=up=1;
vceyssens3 0:b99573af2591 92 if(front.getCurrentDistance()>300) turn_var = 1;
vceyssens3 0:b99573af2591 93 }
vceyssens3 0:b99573af2591 94 else if (left_var == 0){
vceyssens3 0:b99573af2591 95 down = 0;
vceyssens3 0:b99573af2591 96 wait(0.1);
vceyssens3 0:b99573af2591 97 down = 1;
vceyssens3 0:b99573af2591 98 left=up=0;
vceyssens3 0:b99573af2591 99 wait(0.1);
vceyssens3 0:b99573af2591 100 left=up=1;
vceyssens3 0:b99573af2591 101 if(front.getCurrentDistance()>300) turn_var = 1;
vceyssens3 0:b99573af2591 102 }
vceyssens3 0:b99573af2591 103 else {
vceyssens3 0:b99573af2591 104 down = 0;
vceyssens3 0:b99573af2591 105 wait(0.2);
vceyssens3 0:b99573af2591 106 down = 1;
vceyssens3 0:b99573af2591 107 if (rightc.getCurrentDistance()>300) right_var = 0;
vceyssens3 0:b99573af2591 108 if (leftc.getCurrentDistance()>300) left_var = 0;
vceyssens3 0:b99573af2591 109 }
vceyssens3 0:b99573af2591 110 }
vceyssens3 0:b99573af2591 111 left_var = right_var = 0;
vceyssens3 0:b99573af2591 112 }
vceyssens3 0:b99573af2591 113
vceyssens3 0:b99573af2591 114 int main() {
vceyssens3 0:b99573af2591 115 wait(3);
vceyssens3 0:b99573af2591 116
vceyssens3 0:b99573af2591 117 front.startUpdates();
vceyssens3 0:b99573af2591 118 rightc.startUpdates();
vceyssens3 0:b99573af2591 119 leftc.startUpdates();
vceyssens3 0:b99573af2591 120 back.startUpdates();
vceyssens3 0:b99573af2591 121 start_func();
vceyssens3 0:b99573af2591 122 //int front_var = 0;
vceyssens3 0:b99573af2591 123 // int rear_var = 0;
vceyssens3 0:b99573af2591 124 // int right_var = 0;
vceyssens3 0:b99573af2591 125 // int left_var = 0;
vceyssens3 0:b99573af2591 126 //
vceyssens3 0:b99573af2591 127
vceyssens3 0:b99573af2591 128 while(1) {
vceyssens3 0:b99573af2591 129 front.checkDistance(); //call checkDistance() as much as possible, as this is where
vceyssens3 0:b99573af2591 130 rightc.checkDistance();
vceyssens3 0:b99573af2591 131 leftc.checkDistance();
vceyssens3 0:b99573af2591 132 back.checkDistance();
vceyssens3 0:b99573af2591 133 pc.printf("Front Distance %d mm\r\n", front.getCurrentDistance());
vceyssens3 0:b99573af2591 134 pc.printf("Right Distance %d mm\r\n", rightc.getCurrentDistance());
vceyssens3 0:b99573af2591 135 pc.printf("Left Distance %d mm\r\n", leftc.getCurrentDistance());
vceyssens3 0:b99573af2591 136 pc.printf("Back Distance %d mm\r\n", back.getCurrentDistance());
vceyssens3 0:b99573af2591 137
vceyssens3 0:b99573af2591 138 drive_func();
vceyssens3 0:b99573af2591 139 stop_func();
vceyssens3 0:b99573af2591 140 turn_func();
vceyssens3 0:b99573af2591 141
vceyssens3 0:b99573af2591 142 }
vceyssens3 0:b99573af2591 143 }