ECE4180 Final Project

Dependencies:   LSM9DS1_Library Motor mbed-rtos mbed HC_SR04_Ultrasonic_Library

Fork of IMURoomba4_ThrowSumMo by James Plager

Revision:
5:ab5fd9a37d7a
Parent:
4:63e69557142e
Child:
6:7123768ea0c9
--- a/main.cpp	Thu May 04 19:45:42 2017 +0000
+++ b/main.cpp	Thu May 04 20:23:10 2017 +0000
@@ -4,6 +4,7 @@
 //#include "SDFileSystem.h"
 #include "Motor.h"
 //#include "wave_player.h"
+#include "ultrasonic.h"
 
 #define PI 3.14159
 // Earth's magnetic field varies by location. Add or subtract
@@ -30,6 +31,10 @@
 // Speaker out
 //AnalogOut DACout(p18);      //must(?) be p18
 //SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
+ultrasonic mu(p29, p30, .1, 1);    //Set the trigger pin to D8 (p29) and the echo pin to D9 (p30)
+                                        //have updates every .1 seconds and a timeout after 1
+                                        //second, and call dist when the distance changes
+
 Thread thread1;
 //Thread thread2;
 //Mutex BTmutex;                  //mutex for send/recv data on Bluetooth
@@ -37,8 +42,10 @@
 
 //Globals
 float throttle = 0.5;
-float currIR1;
+//float currIR1;
 float currIR2;
+float sonar;
+float sonarThresh = 0.5;
 //float origHeading;
 //float heading;
 
@@ -188,16 +195,17 @@
     while(objOnRight) {
         mutex.lock();
         dev.printf("Avoiding Obstacles...\n\r");
-        currIR1 = IR1; //must keep scanning IR readers to know when object is cleared
+        //currIR1 = IR1; //must keep scanning IR readers to know when object is cleared
+        sonar = mu.getCurrentDistance()*0.00328084;
         currIR2 = IR2;
-        dev.printf("    IR1 Reading         IR2 Reading\n\r         %f          %f\n\r", currIR1, currIR2);
+        dev.printf("    IR1 Reading         IR2 Reading\n\r         %f          %f\n\r", sonar, currIR2);
         mutex.unlock();
         if(currIR2 < 0.7) {
             objOnRight = false;   //if IR2 drops below threshold, obstacle passed. Break out of loop
             
             wait(0.5);              //give robot time to drive past object
         }
-        if(currIR1 > 0.8){          // don;t crash to anything in front
+        if(sonar < sonarThresh){          // don;t crash to anything in front
             stop();
             myled=led2=led3=led4=1;
         }
@@ -303,6 +311,7 @@
     //bluetooth setup
     pc.baud(9600);
     dev.baud(9600);
+    mu.startUpdates();//start measuring the distance from Sonar
     //wait to recv start command or time delay
     for(int i=0; i<3; i++) {        //temp delay for a few sec
         myled=led2=led3=led4=1;
@@ -335,17 +344,19 @@
             myled=1;
             //update current IR readings
             //mutex.lock();//IR readings included in mutex since they are shared global variables
-            currIR1 = IR1;
+            //currIR1 = IR1; //replaced with sonar
+            sonar = mu.getCurrentDistance()*0.00328084;
             currIR2 = IR2;
             mutex.lock();         //prevent race conditions in BT dataoutput //changed from BTmutex
             dev.puts("      Front IR reading    Right IR reading\n\r");     // print IR readings over BT
-            dev.printf("        %2f             %2f\n\r", currIR1, currIR2);
+            //dev.printf("        %2f             %2f\n\r", currIR1, currIR2);
+            dev.printf("        %2f             %2f\n\r", sonar, currIR2); //changed
             //pc.puts("      Front IR reading    Right IR reading\n\r");     // print IR readings over serial
             //pc.printf("        %2f             %2f\n\r", currIR1, currIR2);
             mutex.unlock(); // changed from BTmutex
             
             // Forward collision handling code block
-            if(currIR1 > 0.8) {     // 0.85 is threshold for collision
+            if(sonar < sonarThresh) {     // 0.85 is threshold for collision
                 led3=1;
                 avoidObstacle();    // steer around obstacle when detected
                 led3=0;