Basic funcitonality

Dependencies:   mbed mbed-rtos SevenSegmentSerial HC_SR04_Ultrasonic_Library

Revision:
3:293a771fc470
Parent:
2:8c29e1aaaff0
Child:
4:8588557fbd75
Child:
5:99be83f824b8
--- a/main.cpp	Mon Apr 19 18:14:06 2021 +0000
+++ b/main.cpp	Mon Apr 19 20:28:11 2021 +0000
@@ -12,19 +12,27 @@
 #include "rtos.h"
 
 Thread      thread1;
+Thread      thread2;
 Serial      pc(USBTX,USBRX);
 DigitalOut  led0(p5);
 DigitalOut  led1(p6);
 DigitalOut  led2(p7);
-//Ticker      sound;
 PwmOut      speaker(p25);
+DigitalOut  rgbRed(p23);
+DigitalOut  rgbGreen(p24);
+DigitalOut  rgbCtrl1(p8);
+DigitalOut  rgbCtrl2(p9);
+DigitalOut  rgbCtrl3(p10);
 
 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 B4Note = 500;
+int E5Note = 659;
 int i = 500;
+bool early_start = 0;
+bool start_done = 0;
 
 int setup[3] = {1,1,1};
 
@@ -32,9 +40,46 @@
 enum state_type {start,past_start,past_cp1,past_cp2};
 state_type track_state = start;
 
+// Race start lights and sound
+void start_race()
+{
+    // 3
+    rgbRed = 1;
+    speaker.period(1.0/B4Note);
+    speaker =0.5;
+    rgbCtrl1 = 1;
+    Thread::wait(500);
+    speaker = 0;
+    Thread::wait(500);
+    // 2
+    speaker =0.5;
+    rgbCtrl2 = 1;
+    Thread::wait(500);
+    speaker = 0;
+    Thread::wait(500);
+    // 1
+    speaker =0.5;
+    rgbCtrl3 = 1;
+    Thread::wait(500);
+    speaker = 0;
+    Thread::wait(500);
+    // GO!
+    rgbRed = 0;
+    rgbGreen = 1;
+    start_done = 1;
+    speaker.period(1.0/E5Note);
+    speaker =0.5;
+    Thread::wait(500);
+    speaker = 0;
+    rgbCtrl1 = 0;
+    rgbCtrl2 = 0;
+    rgbCtrl3 = 0;
+}
+
 // Plays bleep for crossing finish line
 void play_audio()
 {
+    speaker.period(1.0/B4Note); // 500hz period
     speaker =0.5; //50% duty cycle - max volume
     Thread::wait(150);
     speaker=0.0; // turn off audio
@@ -105,7 +150,6 @@
 
 int main()
 {
-    speaker.period(1.0/frequency); // 500hz period
     sonar0.startUpdates();
     sonar1.startUpdates();
     sonar2.startUpdates();
@@ -114,6 +158,15 @@
     sonar1.checkDistance();
     sonar2.checkDistance();
 
+    thread2.start(&start_race);
+
+    while(!start_done) {
+        if (current_lap) {
+            // Flash everything red. Play bad sounds.
+        }
+        Thread::wait(50);
+    }
+
     while(1) {
         switch (track_state) {
             case start:
@@ -133,9 +186,9 @@
             pc.putc('9');
             while(1) {
                 pc.printf("Race Over");
-                Thread::wait(0.05);
+                Thread::wait(50);
             }
         }
-        Thread::wait(0.05);
+        Thread::wait(50);
     }
 }
\ No newline at end of file