Basic funcitonality
Dependencies: mbed mbed-rtos SevenSegmentSerial HC_SR04_Ultrasonic_Library
Diff: main.cpp
- Revision:
- 4:8588557fbd75
- Parent:
- 3:293a771fc470
--- a/main.cpp Mon Apr 19 20:28:11 2021 +0000 +++ b/main.cpp Mon Apr 26 20:52:21 2021 +0000 @@ -7,25 +7,57 @@ // ... // 9 - end race +/* + + Color Coding + +Finish Line: + red + + black - + yellow mbed out (rbg ctrl) + red rbgRed + blue pwm (audio) + white echo + orange trigger + +Checkpoint 1-2 + red + + black - + white echo + orange trigger + yellow led ctrl + +*/ + +// Includes #include "mbed.h" #include "ultrasonic.h" #include "rtos.h" +#include "SevenSegmentSerial.h" +// Threads Thread thread1; Thread thread2; +// PC Serial Serial pc(USBTX,USBRX); +//LED Ctrls (1 per CP) DigitalOut led0(p5); DigitalOut led1(p6); DigitalOut led2(p7); -PwmOut speaker(p25); -DigitalOut rgbRed(p23); -DigitalOut rgbGreen(p24); +// Finish Line RGB Ctrl DigitalOut rgbCtrl1(p8); DigitalOut rgbCtrl2(p9); DigitalOut rgbCtrl3(p10); +// Finish Line RGB Colors +DigitalOut rgbRed(p23); +DigitalOut rgbGreen(p24); +PwmOut speaker(p25); +// Seven Segment Display +SevenSegmentSerial ssd(UART_MODE, p28); +// Globals int width[3]; //width of each checkpoint, mm -int sensitivity = 5; //sensitivity, adjust with testing, mm +int sensitivity[3]; //sensitivity, adjust with testing, mm int total_laps = 3; int current_lap = 0; int B4Note = 500; @@ -33,7 +65,6 @@ int i = 500; bool early_start = 0; bool start_done = 0; - int setup[3] = {1,1,1}; //state machine, tracks current position in track @@ -44,32 +75,40 @@ void start_race() { // 3 - rgbRed = 1; + ssd.setDigit(3,0); speaker.period(1.0/B4Note); speaker =0.5; + rgbRed = 1; rgbCtrl1 = 1; Thread::wait(500); speaker = 0; Thread::wait(500); + // 2 + ssd.setDigit(2,1); + ssd = 2; speaker =0.5; rgbCtrl2 = 1; Thread::wait(500); speaker = 0; Thread::wait(500); + // 1 + ssd.setDigit(1,2); speaker =0.5; rgbCtrl3 = 1; Thread::wait(500); speaker = 0; Thread::wait(500); + // GO! + ssd.write("GOOO"); rgbRed = 0; rgbGreen = 1; start_done = 1; speaker.period(1.0/E5Note); speaker =0.5; - Thread::wait(500); + Thread::wait(1000); speaker = 0; rgbCtrl1 = 0; rgbCtrl2 = 0; @@ -93,9 +132,10 @@ pc.printf("%d",distance); width[0] = distance; setup[0] = !setup[0]; + sensitivity[0] = 0.1f*width[0]; } - if (width[0] - distance >= sensitivity) { + if (width[0] - distance >= sensitivity[0]) { pc.printf("Past start line\n"); led0 = 1; led1 = 0; @@ -106,6 +146,7 @@ pc.putc('0'); thread1.start(&play_audio); } + } //executed when passing checkpoint 1 @@ -116,10 +157,11 @@ pc.printf("%d",distance); width[1] = distance; setup[1] = !setup[1]; + sensitivity[1] = 0.1f*width[1]; } pc.printf("Past Checkpoint 1\n"); - if (width[1] - distance >= sensitivity) { + if (width[1] - distance >= sensitivity[1]) { led1 = 1; track_state = past_cp1; pc.putc('1'); @@ -134,32 +176,39 @@ pc.printf("%d",distance); width[2] = distance; setup[2] = !setup[2]; + sensitivity[2] = 0.1f*width[2]; } pc.printf("Past Checkpoint 2\n"); - if (width[2] - distance >= sensitivity) { + if (width[2] - distance >= sensitivity[2]) { led2 = 1; track_state = past_cp2; pc.putc('2'); } } - +// Sonars (19-20 CANNOT be set for sonar, they don't allow for interrupts) ultrasonic sonar0(p15,p16,0.1,0.1,&start_line); //starting line ultrasonic sonar1(p17,p18,0.1,0.1,&checkpoint1); //checkpoint 1 ultrasonic sonar2(p21,p22,0.1,0.1,&checkpoint2); //checkpoint 2 int main() { + // Reset + ssd.clear(); + + // Settings + ssd.setBrightness(100); + + // Start Sonars sonar0.startUpdates(); sonar1.startUpdates(); sonar2.startUpdates(); - sonar0.checkDistance(); sonar1.checkDistance(); sonar2.checkDistance(); + // Start Race Lights + Sound thread2.start(&start_race); - while(!start_done) { if (current_lap) { // Flash everything red. Play bad sounds. @@ -167,6 +216,7 @@ Thread::wait(50); } + // Race Checkpoint Tracking while(1) { switch (track_state) { case start: @@ -184,6 +234,10 @@ } if (current_lap > total_laps) { pc.putc('9'); + speaker.period(1.0/E5Note); // 500hz period + speaker =0.5; //50% duty cycle - max volume + Thread::wait(1000); + speaker=0.0; // turn off audio while(1) { pc.printf("Race Over"); Thread::wait(50);