placing
This commit is contained in:
parent
fc85e93e14
commit
1d978cb224
|
@ -21,4 +21,5 @@
|
||||||
platform = atmelavr
|
platform = atmelavr
|
||||||
framework = arduino
|
framework = arduino
|
||||||
board = nanoatmega328
|
board = nanoatmega328
|
||||||
|
build_flags = -Wl,-u,vfprintf -lprintf_flt -l
|
||||||
#targets = upload
|
#targets = upload
|
||||||
|
|
41
src/main.cpp
41
src/main.cpp
|
@ -12,6 +12,7 @@ LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
|
||||||
|
|
||||||
#define PIN_RESET 2
|
#define PIN_RESET 2
|
||||||
#define PIN_CAR1 3
|
#define PIN_CAR1 3
|
||||||
|
#define PIN_LED LED_BUILTIN
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
// input pin for this car
|
// input pin for this car
|
||||||
|
@ -24,7 +25,7 @@ typedef struct {
|
||||||
#define PIN_CAR_STARTING 3
|
#define PIN_CAR_STARTING 3
|
||||||
|
|
||||||
// number of cars (4 max)
|
// number of cars (4 max)
|
||||||
#define CAR_COUNT 1
|
#define CAR_COUNT 2
|
||||||
|
|
||||||
// array of cars
|
// array of cars
|
||||||
Car cars[CAR_COUNT];
|
Car cars[CAR_COUNT];
|
||||||
|
@ -62,19 +63,38 @@ void resetCars() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void displayTimers() {
|
void displayTimers() {
|
||||||
|
short row = 0;
|
||||||
lcd.clear();
|
lcd.clear();
|
||||||
for(short i=0; i<CAR_COUNT; i++) {
|
|
||||||
lcd.setCursor(0,i);
|
// keep track of cars that we've already printed a score for
|
||||||
if (cars[i].elapsedTime == 0) {
|
bool seenCar[CAR_COUNT];
|
||||||
sprintf(buffer, "Car %d: didn't finish", i+1);
|
for (int i=0; i<CAR_COUNT; i++) {
|
||||||
} else {
|
seenCar[i] = false;
|
||||||
sprintf(buffer, "Car %d: %dms", i+1, cars[i].elapsedTime);
|
}
|
||||||
|
|
||||||
|
for(short place=0; place<CAR_COUNT; place++) {
|
||||||
|
|
||||||
|
// find which is the fastest car that hasn't already been processed
|
||||||
|
short currentCar = -1;
|
||||||
|
for (short i=0; i<CAR_COUNT; i++) {
|
||||||
|
if (!seenCar[i] && cars[i].elapsedTime != 0 && (currentCar == -1 || cars[i].elapsedTime < cars[currentCar].elapsedTime)) {
|
||||||
|
currentCar = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// mark car as seen so we don't show the same car again
|
||||||
|
seenCar[currentCar] = true;
|
||||||
|
|
||||||
|
if (cars[currentCar].elapsedTime != 0) {
|
||||||
|
// only print the score if this car finished
|
||||||
|
lcd.setCursor(0,row++);
|
||||||
|
sprintf(buffer, "%d%s: CAR%d @ %0.2fs", place+1, place==0?"st":(place==1?"nd":(place==2?"rd":"th")) , currentCar+1, cars[currentCar].elapsedTime/1000.0);
|
||||||
|
lcd.print(buffer);
|
||||||
}
|
}
|
||||||
lcd.print(buffer);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MAX_TIME 10000
|
#define MAX_TIME 5000
|
||||||
|
|
||||||
unsigned long startTime; // start time in ms
|
unsigned long startTime; // start time in ms
|
||||||
|
|
||||||
|
@ -94,10 +114,11 @@ void loop()
|
||||||
lcd.setCursor(0,0);
|
lcd.setCursor(0,0);
|
||||||
lcd.print("Ready...");
|
lcd.print("Ready...");
|
||||||
resetCars();
|
resetCars();
|
||||||
digitalWrite(LED_BUILTIN, LOW);
|
digitalWrite(PIN_LED, HIGH);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (state == STATE_READY) {
|
if (state == STATE_READY) {
|
||||||
|
digitalWrite(PIN_LED, LOW);
|
||||||
state = STATE_RUNNING;
|
state = STATE_RUNNING;
|
||||||
lcd.setCursor(0,0);
|
lcd.setCursor(0,0);
|
||||||
lcd.print("Running!");
|
lcd.print("Running!");
|
||||||
|
|
Loading…
Reference in New Issue