Scalextric Lap Timer using ultrasonic sensor
Dependencies: HCSR04 mbed TextLCD
main.cpp@1:034f79c00c98, 2016-09-28 (annotated)
- Committer:
- MrBedfordVan
- Date:
- Wed Sep 28 16:05:35 2016 +0000
- Revision:
- 1:034f79c00c98
- Parent:
- 0:b88af2ed370b
- Child:
- 2:b47f8dbf374c
Initial Version of simple Scalextric Lap Timer for Ada Lovelace day
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MrBedfordVan | 1:034f79c00c98 | 1 | // Scalextric Timer for Ada Lovelace Day |
MrBedfordVan | 1:034f79c00c98 | 2 | // |
MrBedfordVan | 1:034f79c00c98 | 3 | // Uses Nucleo board F072 with LCD Keypad shield |
MrBedfordVan | 1:034f79c00c98 | 4 | // Connect D3 to Trig & D2 to Echo |
MrBedfordVan | 1:034f79c00c98 | 5 | // Connect VCC to 5V (pin CN7 18) |
MrBedfordVan | 1:034f79c00c98 | 6 | // Connect GND to 0V (pin CN7 19) |
MrBedfordVan | 1:034f79c00c98 | 7 | |
MrBedfordVan | 0:b88af2ed370b | 8 | #include "mbed.h" |
MrBedfordVan | 1:034f79c00c98 | 9 | #include "hcsr04.h" // Ultrasonic sensor |
MrBedfordVan | 1:034f79c00c98 | 10 | #include "TextLCD.h" // LCD1602 |
MrBedfordVan | 0:b88af2ed370b | 11 | |
MrBedfordVan | 1:034f79c00c98 | 12 | // serial PC for debug |
MrBedfordVan | 0:b88af2ed370b | 13 | Serial pc(SERIAL_TX, SERIAL_RX); |
MrBedfordVan | 1:034f79c00c98 | 14 | // Ultrasonic sensor |
MrBedfordVan | 1:034f79c00c98 | 15 | HCSR04 usensor(D3,D2); // Trig, Echo |
MrBedfordVan | 1:034f79c00c98 | 16 | |
MrBedfordVan | 1:034f79c00c98 | 17 | // LCD Shield |
MrBedfordVan | 1:034f79c00c98 | 18 | TextLCD lcd(D8, D9, D4, D5, D6, D7); // used to drive display |
MrBedfordVan | 1:034f79c00c98 | 19 | AnalogIn keys(A0); // used to sample buttons |
MrBedfordVan | 1:034f79c00c98 | 20 | |
MrBedfordVan | 1:034f79c00c98 | 21 | Timer lap_timer; |
MrBedfordVan | 1:034f79c00c98 | 22 | Timer wait_timer; |
MrBedfordVan | 1:034f79c00c98 | 23 | |
MrBedfordVan | 1:034f79c00c98 | 24 | // display text on LCD |
MrBedfordVan | 1:034f79c00c98 | 25 | void textLCD(char *text, int line) { |
MrBedfordVan | 1:034f79c00c98 | 26 | char tmpBuf[16]; |
MrBedfordVan | 1:034f79c00c98 | 27 | for (int i = 0; i < 16; i++) tmpBuf[i] = 0x20; |
MrBedfordVan | 1:034f79c00c98 | 28 | for (int i = 0; i < strlen(text); i++) { |
MrBedfordVan | 1:034f79c00c98 | 29 | if (i < 16) tmpBuf[i] = text[i]; |
MrBedfordVan | 1:034f79c00c98 | 30 | lcd.locate(i, line); |
MrBedfordVan | 1:034f79c00c98 | 31 | lcd.putc(tmpBuf[i]); |
MrBedfordVan | 1:034f79c00c98 | 32 | } |
MrBedfordVan | 1:034f79c00c98 | 33 | } |
MrBedfordVan | 1:034f79c00c98 | 34 | |
MrBedfordVan | 0:b88af2ed370b | 35 | |
MrBedfordVan | 0:b88af2ed370b | 36 | int main() |
MrBedfordVan | 0:b88af2ed370b | 37 | { |
MrBedfordVan | 1:034f79c00c98 | 38 | // Variables used |
MrBedfordVan | 0:b88af2ed370b | 39 | int dist = 0; |
MrBedfordVan | 0:b88af2ed370b | 40 | float current_time = 0; |
MrBedfordVan | 1:034f79c00c98 | 41 | int lap_count = 0; |
MrBedfordVan | 0:b88af2ed370b | 42 | float wait_time = 2.0; |
MrBedfordVan | 0:b88af2ed370b | 43 | pc.baud(9600); |
MrBedfordVan | 1:034f79c00c98 | 44 | char lap_string[16]; |
MrBedfordVan | 1:034f79c00c98 | 45 | char laptime_string[16]; |
MrBedfordVan | 0:b88af2ed370b | 46 | |
MrBedfordVan | 1:034f79c00c98 | 47 | // Values to tune |
MrBedfordVan | 1:034f79c00c98 | 48 | float min_laptime = 1.0; // Minimum laptime - time to wait after seeing car before measuring again in seconds |
MrBedfordVan | 1:034f79c00c98 | 49 | int sample_time = 100; // Sample time - time between sampling value from sensor in milliseconds |
MrBedfordVan | 1:034f79c00c98 | 50 | int trigger_distance = 4; // Trigger distance - distance below which the car registers as detected |
MrBedfordVan | 0:b88af2ed370b | 51 | |
MrBedfordVan | 1:034f79c00c98 | 52 | // Intro Screen |
MrBedfordVan | 0:b88af2ed370b | 53 | pc.printf("ARM Sheffield Scalextric Challenge \n"); |
MrBedfordVan | 1:034f79c00c98 | 54 | textLCD("ARM Scalextric ", 0); |
MrBedfordVan | 1:034f79c00c98 | 55 | |
MrBedfordVan | 1:034f79c00c98 | 56 | // Main loop |
MrBedfordVan | 1:034f79c00c98 | 57 | while(1) { |
MrBedfordVan | 0:b88af2ed370b | 58 | usensor.start(); |
MrBedfordVan | 0:b88af2ed370b | 59 | wait_ms(sample_time); |
MrBedfordVan | 0:b88af2ed370b | 60 | dist=usensor.get_dist_cm(); |
MrBedfordVan | 1:034f79c00c98 | 61 | pc.printf("Distance %d\n\r", dist); // Debug to Serial port/USB |
MrBedfordVan | 0:b88af2ed370b | 62 | if (lap_count > 0) { |
MrBedfordVan | 1:034f79c00c98 | 63 | wait_time = wait_timer.read(); |
MrBedfordVan | 0:b88af2ed370b | 64 | } |
MrBedfordVan | 1:034f79c00c98 | 65 | if ((dist < trigger_distance) and (wait_time > min_laptime)) { // spotted car at least a minimum laptime later |
MrBedfordVan | 1:034f79c00c98 | 66 | wait_timer.reset(); |
MrBedfordVan | 1:034f79c00c98 | 67 | wait_timer.start(); |
MrBedfordVan | 1:034f79c00c98 | 68 | if (lap_count == 0) { // First Lap - start timer |
MrBedfordVan | 1:034f79c00c98 | 69 | lap_timer.reset(); |
MrBedfordVan | 1:034f79c00c98 | 70 | lap_timer.start(); |
MrBedfordVan | 1:034f79c00c98 | 71 | pc.printf("Timing... \r"); // Debug |
MrBedfordVan | 1:034f79c00c98 | 72 | textLCD("Timing..........", 1); // |
MrBedfordVan | 0:b88af2ed370b | 73 | lap_count++; |
MrBedfordVan | 1:034f79c00c98 | 74 | } else { // Completed a lap |
MrBedfordVan | 1:034f79c00c98 | 75 | current_time = lap_timer.read(); |
MrBedfordVan | 1:034f79c00c98 | 76 | lap_timer.reset(); |
MrBedfordVan | 1:034f79c00c98 | 77 | pc.printf("Lap : %d, Lap time : %f s \r", lap_count, current_time); |
MrBedfordVan | 1:034f79c00c98 | 78 | sprintf(lap_string, "Lap : %d ", (char*)lap_count); |
MrBedfordVan | 1:034f79c00c98 | 79 | sprintf(laptime_string, "Lap time : %f s, ", current_time); |
MrBedfordVan | 1:034f79c00c98 | 80 | textLCD(" ", 0); |
MrBedfordVan | 1:034f79c00c98 | 81 | textLCD(lap_string, 0); |
MrBedfordVan | 1:034f79c00c98 | 82 | textLCD(" ", 1); |
MrBedfordVan | 1:034f79c00c98 | 83 | textLCD(laptime_string, 1); |
MrBedfordVan | 0:b88af2ed370b | 84 | lap_count++; |
MrBedfordVan | 0:b88af2ed370b | 85 | } |
MrBedfordVan | 1:034f79c00c98 | 86 | } |
MrBedfordVan | 0:b88af2ed370b | 87 | } |
MrBedfordVan | 0:b88af2ed370b | 88 | } |
MrBedfordVan | 0:b88af2ed370b | 89 |