This is the main code section
Dependencies: HC_SR04_Ultrasonic_Library mbed
main.cpp@0:b99573af2591, 2017-04-30 (annotated)
- Committer:
- vceyssens3
- Date:
- Sun Apr 30 23:49:22 2017 +0000
- Revision:
- 0:b99573af2591
main code;
Who changed what in which revision?
User | Revision | Line number | New 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 | } |