Basic funcitonality

Dependencies:   mbed mbed-rtos SevenSegmentSerial HC_SR04_Ultrasonic_Library

Revision:
8:88cf71c84e04
Parent:
7:04c8f6b7a42a
--- a/main.cpp	Wed Apr 28 16:05:30 2021 +0000
+++ b/main.cpp	Fri Apr 30 12:42:11 2021 +0000
@@ -1,9 +1,10 @@
 //******************************************************
 // Mbed to Raspberry Pi     ** Raspberry Pi to Mbed    *
 //******************************************************
-// 0 - pass starting line   ** S - start race          *
-// 1 - pass checkpoint 1    ** R - reset               *
-// 2 - pass checkpoint 2    **                         *
+// 0 - start line, lap 1    ** S - start race          *
+// 1 - cp1, lap 1           ** R - reset               *
+// 2 - cp2, lap 2           **                         *
+// 3 - start line, lap 2    **                         *
 // ...                      **                         *
 // 9 - end race             **                         *
 //******************************************************
@@ -15,7 +16,6 @@
 Thread      thread1;
 Thread      thread2;
 Serial      pc(USBTX,USBRX);
-DigitalOut  led0(p5);
 DigitalOut  led1(p6);
 DigitalOut  led2(p7);
 PwmOut      speaker(p25);
@@ -31,15 +31,13 @@
 int width[3];           //width of each checkpoint, mm
 int threshold[3];       //how much distance has to change, mm
 float sensitivity[3] = {0.1,0.1,0.1};
+int setup[3] = {1,1,1};
+
 int total_laps = 3;
 int current_lap = 0;
-int i = 500;
-
 bool early_start = 0;
 bool start_done = 0;
 
-int setup[3] = {1,1,1};
-
 //state machine, tracks current position in track
 enum state_type {start,past_start,past_cp1,past_cp2};
 state_type track_state = start;
@@ -76,52 +74,38 @@
     start_done = 1;
     speaker.period(1.0/E5NOTE);
     speaker =0.5;
-    Thread::wait(1500);
+    Thread::wait(1000);
     speaker = 0;
     rgbCtrl1 = 0;
     rgbCtrl2 = 0;
     rgbCtrl3 = 0;
 }
 
-// Plays bleep for crossing finish line
+//plays for crossing finish line and checkpoints
 void play_audio()
 {
-    speaker.period(1.0/B4NOTE); // 500hz period
-    speaker =0.5; //50% duty cycle - max volume
+    speaker.period(1.0/B4NOTE); //500hz period
+    speaker =0.5;               //50% duty cycle - max volume
     Thread::wait(150);
-    speaker=0.0; // turn off audio
+    speaker=0.0;                //turn off audio
 }
 
 //executed when crossing starting line
 void start_line(int distance)
 {
+    //calibration
     if (setup[0]) {
         width[0] = distance;
         threshold[0] = distance*sensitivity[0];
         setup[0] = !setup[0];
-        //pc.printf("Setup: Starting Line\n");
-        //pc.printf("Distance: %3d\n\n",distance);
     }
 
     if (width[0] - distance >= threshold[0]) {
-        //pc.printf("Past starting line\n");
-        led0 = 1;
         led1 = 0;
         led2 = 0;
         current_lap++;
-        //pc.printf("%d\n",current_lap);
         track_state = past_start;
-        switch (current_lap) {
-            case 1 :
-                pc.putc('0');
-                break;
-            case 2 :
-                pc.putc('3');
-                break;
-            case 3 :
-                pc.putc('6');
-                break;
-        }
+        pc.putc('0' + (current_lap*total_laps) - 3);
         thread1.start(&play_audio);
     }
 }
@@ -133,25 +117,12 @@
         width[1] = distance;
         threshold[1] = distance*sensitivity[1];
         setup[1] = !setup[1];
-        //pc.printf("Setup: Starting Line\n");
-        //pc.printf("Distance: %3d\n\n",distance);
     }
 
     if (width[1] - distance >= threshold[1]) {
-        //pc.printf("Past Checkpoint 1\n");
         led1 = 1;
         track_state = past_cp1;
-        switch (current_lap) {
-            case 1 :
-                pc.putc('1');
-                break;
-            case 2 :
-                pc.putc('4');
-                break;
-            case 3 :
-                pc.putc('7');
-                break;
-        }
+        pc.putc('0' + (current_lap*total_laps) - 2);
         thread1.start(&play_audio);
     }
 }
@@ -163,25 +134,12 @@
         width[2] = distance;
         threshold[2] = distance*sensitivity[2];
         setup[2] = !setup[1];
-        //pc.printf("Setup: Starting Line\n");
-        //pc.printf("Distance: %3d\n\n",distance);
     }
 
     if (width[2] - distance >= threshold[2]) {
-        //pc.printf("Past Checkpoint 2\n");
         led2 = 1;
         track_state = past_cp2;
-        switch (current_lap) {
-            case 1 :
-                pc.putc('2');
-                break;
-            case 2 :
-                pc.putc('5');
-                break;
-            case 3 :
-                pc.putc('8');
-                break;
-        }
+        pc.putc('0' + (current_lap*total_laps) - 1);
         thread1.start(&play_audio);
     }
 }
@@ -202,7 +160,7 @@
     sonar1.checkDistance();
     sonar2.checkDistance();
 
-    //wait for start char from Pi
+    //wait for start char from PC
     while (1) {
         if (pc.getc() == 'S') {
             break;
@@ -217,24 +175,24 @@
     while(!start_done) {
         if (current_lap) {
             rgbCtrl1 = rgbCtrl2 = rgbCtrl3 = 0;
-            led0 = led1 = led2 = 0;
+            led1 = led2 = 0;
             rgbRed = 1;
             rgbGreen = 0;
-            bool other = true;
-            speaker.period(1/E5NOTE);
+            speaker.period(1/B4NOTE);
+            bool other = true;          //true every other interation, used to turn speaker on/off
             while (1) {
                 rgbCtrl1 = !rgbCtrl1;
                 rgbCtrl2 = !rgbCtrl2;
                 rgbCtrl3 = !rgbCtrl3;
-                led0 = !led0;
                 led1 = !led1;
                 led2 = !led2;
                 speaker = other ? 0.5 : 0.0;
                 other = !other;
+                //check for reset char
                 if (pc.getc() == 'R') {
                     mbed_reset();
                 }
-                Thread::wait(50);
+                Thread::wait(200);
             }
         }
         Thread::wait(50);
@@ -257,7 +215,7 @@
         }
         if (current_lap > total_laps) {
             pc.putc('9');
-            //pc.printf("Race Over");
+            //wait for reset char
             while(1) {
                 if (pc.getc() == 'R') {
                     mbed_reset();
@@ -265,6 +223,10 @@
                 Thread::wait(50);
             }
         }
+        //check for reset char
+        if (pc.getc() == 'R') {
+            mbed_reset();
+        }
         Thread::wait(50);
     }
 }
\ No newline at end of file