roughly working
This commit is contained in:
parent
fcf733b05b
commit
3abeeddced
65
src/main.cpp
65
src/main.cpp
|
@ -16,28 +16,56 @@ elapsedMillis timeElapsed;
|
||||||
#define PIN_RESET 2
|
#define PIN_RESET 2
|
||||||
#define PIN_CAR1 3
|
#define PIN_CAR1 3
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
short pin;
|
||||||
|
unsigned int elapsedTime;
|
||||||
|
} CarTimer;
|
||||||
|
|
||||||
|
#define PIN_CAR_STARTING 3
|
||||||
|
#define CAR_COUNT 1
|
||||||
|
CarTimer cars[CAR_COUNT];
|
||||||
|
|
||||||
|
// buffer for the LCD line
|
||||||
|
char buffer[40];
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
|
|
||||||
Serial.begin(9600);
|
Serial.begin(9600);
|
||||||
|
|
||||||
pinMode(PIN_RESET, INPUT_PULLUP);
|
pinMode(PIN_RESET, INPUT_PULLUP);
|
||||||
pinMode(PIN_CAR1, INPUT_PULLUP);
|
|
||||||
pinMode(LED_BUILTIN, OUTPUT);
|
pinMode(LED_BUILTIN, OUTPUT);
|
||||||
|
|
||||||
|
// initialize each car PIN
|
||||||
|
for(short i=0; i<CAR_COUNT; i++) {
|
||||||
|
cars[i].pin = PIN_CAR_STARTING + i;
|
||||||
|
pinMode(cars[i].pin, INPUT_PULLUP);
|
||||||
|
}
|
||||||
|
|
||||||
lcd.begin(20, 4);
|
lcd.begin(20, 4);
|
||||||
lcd.backlight();
|
lcd.backlight();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void resetCarTimers() {
|
||||||
|
for(short i=0; i<CAR_COUNT; i++) {
|
||||||
|
cars[i].elapsedTime = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void displayTimers() {
|
||||||
|
lcd.clear();
|
||||||
|
for(short i=0; i<CAR_COUNT; i++) {
|
||||||
|
lcd.setCursor(0,i);
|
||||||
|
sprintf(buffer, "Car %d: %dms", i+1, cars[i].elapsedTime);
|
||||||
|
lcd.print(buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
unsigned int startTime; // start time in ms
|
unsigned int startTime; // start time in ms
|
||||||
bool tripped = false;
|
|
||||||
|
|
||||||
char buffer[40];
|
|
||||||
unsigned int elapsedTime;
|
unsigned int elapsedTime;
|
||||||
|
|
||||||
bool started = false;
|
bool started = false;
|
||||||
bool runnning = false;
|
|
||||||
unsigned int car1elapsed = 0;
|
bool allDone;
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
|
@ -47,7 +75,7 @@ void loop()
|
||||||
lcd.setCursor(0,0);
|
lcd.setCursor(0,0);
|
||||||
lcd.print("Ready?");
|
lcd.print("Ready?");
|
||||||
started = false;
|
started = false;
|
||||||
car1elapsed = 0;
|
resetCarTimers();
|
||||||
digitalWrite(LED_BUILTIN, LOW);
|
digitalWrite(LED_BUILTIN, LOW);
|
||||||
} else {
|
} else {
|
||||||
// if we just started, record current millis counter
|
// if we just started, record current millis counter
|
||||||
|
@ -59,18 +87,19 @@ void loop()
|
||||||
// calculate elapsed time in ms
|
// calculate elapsed time in ms
|
||||||
elapsedTime = timeElapsed - startTime;
|
elapsedTime = timeElapsed - startTime;
|
||||||
|
|
||||||
// if car1 finishes record time
|
allDone = true;
|
||||||
if (digitalRead(PIN_CAR1) == LOW && car1elapsed == 0) {
|
for(short i = 0; i<CAR_COUNT; i++) {
|
||||||
car1elapsed = elapsedTime;
|
if (cars[0].elapsedTime == 0) {
|
||||||
|
if (digitalRead(cars[i].pin) == LOW) {
|
||||||
|
cars[i].elapsedTime = elapsedTime;
|
||||||
|
} else {
|
||||||
|
allDone = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (car1elapsed != 0) {
|
if (allDone) {
|
||||||
// stop if all cars are complete or threshold reached
|
displayTimers();
|
||||||
lcd.clear();
|
|
||||||
lcd.setCursor(0,0);
|
|
||||||
sprintf(buffer, "Car1: %dms", car1elapsed);
|
|
||||||
lcd.print(buffer);
|
|
||||||
digitalWrite(LED_BUILTIN, HIGH);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue