This is the main code section
Dependencies: HC_SR04_Ultrasonic_Library mbed
Revision 0:b99573af2591, committed 2017-04-30
- Comitter:
- vceyssens3
- Date:
- Sun Apr 30 23:49:22 2017 +0000
- Commit message:
- main code;
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HC_SR04_Ultrasonic_Library.lib Sun Apr 30 23:49:22 2017 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/ejteb/code/HC_SR04_Ultrasonic_Library/#e0f9c9fb4cf3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Sun Apr 30 23:49:22 2017 +0000
@@ -0,0 +1,143 @@
+#include "mbed.h"
+#include "ultrasonic.h"
+
+Serial pc(USBTX, USBRX);
+DigitalOut start(p30,1);
+DigitalOut right(p29,1);
+DigitalOut left(p28,1);
+DigitalOut up(p27,1);
+DigitalOut down(p26,1);
+DigitalOut on_switch(p25,0);
+DigitalOut myled(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+InterruptIn car_start(p23);
+
+
+//int volatile start_var = 0;
+//int volatile counter = 1;
+//int volatile drive_var = 0;
+//int volatile movement = 0;
+int volatile right_var = 0;
+int volatile left_var = 0;
+
+void drive_func();
+
+void dist(int distance) //necessary for the sonar to work. I dont know why.
+{
+
+}
+
+ultrasonic front(p6, p7, .1, 1, &dist); //Set the trigger pin to D8 and the echo pin to D9
+ultrasonic rightc(p8,p9,.1,1, &dist);
+ultrasonic leftc(p21,p22,.1,1, &dist); //have updates every .1 seconds and a timeout after 1
+ultrasonic back(p13,p14,0.1,1, &dist);
+
+void starting_commands(){ // toggles the button to start the cop car
+ start = 0;
+ wait(0.1);
+ start = 1;
+ wait(0.1);
+ }
+
+
+void start_func() // sequence that gets the cop car into no noise run mode
+{
+ on_switch =1;
+ starting_commands();
+ starting_commands();
+ starting_commands();
+ starting_commands();
+ starting_commands();
+}
+
+void drive_func() // pulses the drive pin; the pulsing is so that the car doesnt go too fast
+{
+ front.checkDistance();
+ while(front.getCurrentDistance() > 300){
+ front.checkDistance();
+ up = 0;
+ wait(0.1);
+ up = 1;
+ wait(0.1);
+ }
+}
+
+void stop_func() // stops the car and checks right and left sonars for obstructions
+{
+ up = 1;
+ down = 0;
+ wait(0.1);
+ down = 1;
+ front.checkDistance();
+ rightc.checkDistance();
+ leftc.checkDistance();
+ back.checkDistance();
+ if (rightc.getCurrentDistance()<300) right_var = 1;
+ if (leftc.getCurrentDistance()<300) left_var = 1;
+}
+
+void turn_func() // turns the car until the front sonar is unobstructed
+{
+ int turn_var = 0;
+ while(turn_var == 0){
+ if (right_var == 0){
+ down = 0;
+ wait(0.1);
+ down = 1;
+ right=up=0;
+ wait(0.1);
+ right=up=1;
+ if(front.getCurrentDistance()>300) turn_var = 1;
+ }
+ else if (left_var == 0){
+ down = 0;
+ wait(0.1);
+ down = 1;
+ left=up=0;
+ wait(0.1);
+ left=up=1;
+ if(front.getCurrentDistance()>300) turn_var = 1;
+ }
+ else {
+ down = 0;
+ wait(0.2);
+ down = 1;
+ if (rightc.getCurrentDistance()>300) right_var = 0;
+ if (leftc.getCurrentDistance()>300) left_var = 0;
+ }
+ }
+ left_var = right_var = 0;
+}
+
+int main() {
+ wait(3);
+
+ front.startUpdates();
+ rightc.startUpdates();
+ leftc.startUpdates();
+ back.startUpdates();
+ start_func();
+ //int front_var = 0;
+// int rear_var = 0;
+// int right_var = 0;
+// int left_var = 0;
+//
+
+ while(1) {
+ front.checkDistance(); //call checkDistance() as much as possible, as this is where
+ rightc.checkDistance();
+ leftc.checkDistance();
+ back.checkDistance();
+ pc.printf("Front Distance %d mm\r\n", front.getCurrentDistance());
+ pc.printf("Right Distance %d mm\r\n", rightc.getCurrentDistance());
+ pc.printf("Left Distance %d mm\r\n", leftc.getCurrentDistance());
+ pc.printf("Back Distance %d mm\r\n", back.getCurrentDistance());
+
+ drive_func();
+ stop_func();
+ turn_func();
+
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sun Apr 30 23:49:22 2017 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/mbed_official/code/mbed/builds/97feb9bacc10 \ No newline at end of file