Basic funcitonality

Dependencies:   mbed mbed-rtos SevenSegmentSerial HC_SR04_Ultrasonic_Library

Revision:
1:28e137ae5af7
Parent:
0:0747159bf07d
Child:
2:8c29e1aaaff0
--- a/main.cpp	Fri Apr 16 20:51:22 2021 +0000
+++ b/main.cpp	Mon Apr 19 18:06:59 2021 +0000
@@ -9,16 +9,22 @@
 
 #include "mbed.h"
 #include "ultrasonic.h"
+#include "rtos.h"
 
+Thread      thread1;
 Serial      pc(USBTX,USBRX);
 DigitalOut  led0(p5);
 DigitalOut  led1(p6);
 DigitalOut  led2(p7);
+//Ticker      sound;
+PwmOut      speaker(p25);
 
 int width[3];          //width of each checkpoint, mm
 int sensitivity = 5;   //sensitivity, adjust with testing, mm
 int total_laps = 3;
 int current_lap = 0;
+int frequency = 500;
+int i = 500;
 
 int setup[3] = {1,1,1};
 
@@ -26,6 +32,13 @@
 enum state_type {start,past_start,past_cp1,past_cp2};
 state_type track_state = start;
 
+void play_audio()
+{
+    speaker =0.5; //50% duty cycle - max volume
+    Thread::wait(3);
+    speaker=0.0; // turn off audio
+}
+
 //executed when crossing starting line
 void start_line(int distance)
 {
@@ -33,9 +46,9 @@
         pc.printf("Setup\n");
         pc.printf("%d",distance);
         width[0] = distance;
-        setup[0] = !setup[0];   
+        setup[0] = !setup[0];
     }
-    
+
     if (width[0] - distance >= sensitivity) {
         pc.printf("Past start line\n");
         led0 = 1;
@@ -45,6 +58,7 @@
         pc.printf("%d\n",current_lap);
         track_state = past_start;
         pc.putc('0');
+        thread1.start(&play_audio);
     }
 }
 
@@ -55,9 +69,9 @@
         pc.printf("Setup\n");
         pc.printf("%d",distance);
         width[1] = distance;
-        setup[1] = !setup[1];   
+        setup[1] = !setup[1];
     }
-    
+
     pc.printf("Past Checkpoint 1\n");
     if (width[1] - distance >= sensitivity) {
         led1 = 1;
@@ -73,9 +87,9 @@
         pc.printf("Setup\n");
         pc.printf("%d",distance);
         width[2] = distance;
-        setup[2] = !setup[2];   
+        setup[2] = !setup[2];
     }
-    
+
     pc.printf("Past Checkpoint 2\n");
     if (width[2] - distance >= sensitivity) {
         led2 = 1;
@@ -88,18 +102,18 @@
 ultrasonic  sonar1(p17,p18,0.1,0.1,&checkpoint1);     //checkpoint 1
 ultrasonic  sonar2(p21,p22,0.1,0.1,&checkpoint2);     //checkpoint 2
 
-int main() 
+int main()
 {
+    speaker.period(1.0/frequency); // 500hz period
     sonar0.startUpdates();
     sonar1.startUpdates();
     sonar2.startUpdates();
-    
+
     sonar0.checkDistance();
     sonar1.checkDistance();
     sonar2.checkDistance();
 
-    while(1) 
-    {
+    while(1) {
         switch (track_state) {
             case start:
                 sonar0.checkDistance();
@@ -118,9 +132,9 @@
             pc.putc('9');
             while(1) {
                 pc.printf("Race Over");
-                wait(0.05);    
+                Thread::wait(0.05);
             }
         }
-        wait(0.05);
+        Thread::wait(0.05);
     }
 }
\ No newline at end of file