Scalextric Lap Timer using ultrasonic sensor

Dependencies:   HCSR04 mbed TextLCD

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?

UserRevisionLine numberNew 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