roughly working

This commit is contained in:
Jeff Clement 2016-02-11 19:02:19 -07:00
parent fcf733b05b
commit 3abeeddced
1 changed files with 47 additions and 18 deletions

View File

@ -16,28 +16,56 @@ elapsedMillis timeElapsed;
#define PIN_RESET 2
#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()
{
Serial.begin(9600);
pinMode(PIN_RESET, INPUT_PULLUP);
pinMode(PIN_CAR1, INPUT_PULLUP);
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.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
bool tripped = false;
char buffer[40];
unsigned int elapsedTime;
bool started = false;
bool runnning = false;
unsigned int car1elapsed = 0;
bool allDone;
void loop()
{
@ -47,7 +75,7 @@ void loop()
lcd.setCursor(0,0);
lcd.print("Ready?");
started = false;
car1elapsed = 0;
resetCarTimers();
digitalWrite(LED_BUILTIN, LOW);
} else {
// if we just started, record current millis counter
@ -59,18 +87,19 @@ void loop()
// calculate elapsed time in ms
elapsedTime = timeElapsed - startTime;
// if car1 finishes record time
if (digitalRead(PIN_CAR1) == LOW && car1elapsed == 0) {
car1elapsed = elapsedTime;
allDone = true;
for(short i = 0; i<CAR_COUNT; i++) {
if (cars[0].elapsedTime == 0) {
if (digitalRead(cars[i].pin) == LOW) {
cars[i].elapsedTime = elapsedTime;
} else {
allDone = false;
}
}
}
if (car1elapsed != 0) {
// stop if all cars are complete or threshold reached
lcd.clear();
lcd.setCursor(0,0);
sprintf(buffer, "Car1: %dms", car1elapsed);
lcd.print(buffer);
digitalWrite(LED_BUILTIN, HIGH);
if (allDone) {
displayTimers();
}
}