Scalextric Lap Timer using ultrasonic sensor
Dependencies: HCSR04 mbed TextLCD
main.cpp@0:b88af2ed370b, 2015-12-01 (annotated)
- Committer:
- MrBedfordVan
- Date:
- Tue Dec 01 13:38:46 2015 +0000
- Revision:
- 0:b88af2ed370b
- Child:
- 1:034f79c00c98
Initial Version for ARM Festival Day
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MrBedfordVan | 0:b88af2ed370b | 1 | #include "mbed.h" |
MrBedfordVan | 0:b88af2ed370b | 2 | #include "hcsr04.h" |
MrBedfordVan | 0:b88af2ed370b | 3 | |
MrBedfordVan | 0:b88af2ed370b | 4 | Serial pc(SERIAL_TX, SERIAL_RX); |
MrBedfordVan | 0:b88af2ed370b | 5 | HCSR04 usensor(D2,D4); |
MrBedfordVan | 0:b88af2ed370b | 6 | DigitalOut myled1(LED1); |
MrBedfordVan | 0:b88af2ed370b | 7 | Timer t; |
MrBedfordVan | 0:b88af2ed370b | 8 | Timer wait_t; |
MrBedfordVan | 0:b88af2ed370b | 9 | |
MrBedfordVan | 0:b88af2ed370b | 10 | int main() |
MrBedfordVan | 0:b88af2ed370b | 11 | { |
MrBedfordVan | 0:b88af2ed370b | 12 | int dist = 0; |
MrBedfordVan | 0:b88af2ed370b | 13 | float current_time = 0; |
MrBedfordVan | 0:b88af2ed370b | 14 | float fastest_time = 99999; |
MrBedfordVan | 0:b88af2ed370b | 15 | float wait_time = 2.0; |
MrBedfordVan | 0:b88af2ed370b | 16 | int lap_count = 0; |
MrBedfordVan | 0:b88af2ed370b | 17 | int fastest_lap = 0; |
MrBedfordVan | 0:b88af2ed370b | 18 | pc.baud(9600); |
MrBedfordVan | 0:b88af2ed370b | 19 | myled1 = 1; |
MrBedfordVan | 0:b88af2ed370b | 20 | |
MrBedfordVan | 0:b88af2ed370b | 21 | float min_laptime = 1.0; // s |
MrBedfordVan | 0:b88af2ed370b | 22 | int num_laps = 10; |
MrBedfordVan | 0:b88af2ed370b | 23 | int sample_time = 100; //ms |
MrBedfordVan | 0:b88af2ed370b | 24 | |
MrBedfordVan | 0:b88af2ed370b | 25 | pc.printf("ARM Sheffield Scalextric Challenge \n"); |
MrBedfordVan | 0:b88af2ed370b | 26 | |
MrBedfordVan | 0:b88af2ed370b | 27 | while(lap_count < num_laps+1) { |
MrBedfordVan | 0:b88af2ed370b | 28 | usensor.start(); |
MrBedfordVan | 0:b88af2ed370b | 29 | wait_ms(sample_time); |
MrBedfordVan | 0:b88af2ed370b | 30 | dist=usensor.get_dist_cm(); |
MrBedfordVan | 0:b88af2ed370b | 31 | //pc.printf("Distance %d\n\r", dist); |
MrBedfordVan | 0:b88af2ed370b | 32 | if (lap_count > 0) { |
MrBedfordVan | 0:b88af2ed370b | 33 | wait_time = wait_t.read(); |
MrBedfordVan | 0:b88af2ed370b | 34 | } |
MrBedfordVan | 0:b88af2ed370b | 35 | if ((dist < 10) and (wait_time > min_laptime)) { // spotted car at least a minimum laptime later |
MrBedfordVan | 0:b88af2ed370b | 36 | myled1 = 1; |
MrBedfordVan | 0:b88af2ed370b | 37 | wait_t.reset(); |
MrBedfordVan | 0:b88af2ed370b | 38 | wait_t.start(); |
MrBedfordVan | 0:b88af2ed370b | 39 | if (lap_count == 0) { |
MrBedfordVan | 0:b88af2ed370b | 40 | t.reset(); |
MrBedfordVan | 0:b88af2ed370b | 41 | t.start(); |
MrBedfordVan | 0:b88af2ed370b | 42 | pc.printf("Timing... \r"); |
MrBedfordVan | 0:b88af2ed370b | 43 | lap_count++; |
MrBedfordVan | 0:b88af2ed370b | 44 | } else { |
MrBedfordVan | 0:b88af2ed370b | 45 | //t.stop(); |
MrBedfordVan | 0:b88af2ed370b | 46 | current_time = t.read(); |
MrBedfordVan | 0:b88af2ed370b | 47 | t.reset(); |
MrBedfordVan | 0:b88af2ed370b | 48 | if (current_time < fastest_time) { |
MrBedfordVan | 0:b88af2ed370b | 49 | fastest_time = current_time; |
MrBedfordVan | 0:b88af2ed370b | 50 | fastest_lap = lap_count; |
MrBedfordVan | 0:b88af2ed370b | 51 | } |
MrBedfordVan | 0:b88af2ed370b | 52 | pc.printf("Lap : %d, Lap time : %f s , Fastest Lap Time : %f s \r", lap_count, current_time, fastest_time); |
MrBedfordVan | 0:b88af2ed370b | 53 | lap_count++; |
MrBedfordVan | 0:b88af2ed370b | 54 | } |
MrBedfordVan | 0:b88af2ed370b | 55 | } else { |
MrBedfordVan | 0:b88af2ed370b | 56 | myled1 = 0; |
MrBedfordVan | 0:b88af2ed370b | 57 | } |
MrBedfordVan | 0:b88af2ed370b | 58 | } |
MrBedfordVan | 0:b88af2ed370b | 59 | pc.printf("\n GAME OVER \n"); |
MrBedfordVan | 0:b88af2ed370b | 60 | pc.printf("Fastest Lap Time : %f s on Lap : %d \n", fastest_time, fastest_lap); |
MrBedfordVan | 0:b88af2ed370b | 61 | |
MrBedfordVan | 0:b88af2ed370b | 62 | t.stop(); |
MrBedfordVan | 0:b88af2ed370b | 63 | wait_t.stop(); |
MrBedfordVan | 0:b88af2ed370b | 64 | |
MrBedfordVan | 0:b88af2ed370b | 65 | } |
MrBedfordVan | 0:b88af2ed370b | 66 |