Basic funcitonality
Dependencies: mbed mbed-rtos SevenSegmentSerial HC_SR04_Ultrasonic_Library
Diff: main.cpp
- 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