gpop1 - I appreciate your assistance!
As for 2 players pressing a button at the same time... well, the timer would be "captured" by a player/team and "held" so only one button gets pushed.
So far, got all 5 buttons to work, plus converted output to LCD.
Been reading up on pullup to debounce.
Now I just need to figure out how to make the buttons work on momentary contact and not constant contact.
I surmiseI'd have to use a variable for each button, that gets written as "LOW" when button is momentarily pushed and stays that way until another button is pushed.
Here's the sketch so far...
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
const byte button1 = 10; //red
const byte button2 = 9; //blue
const byte button3 = 8; //yellow
const byte button4 = 7; //green
const byte button5 = 6; //reset
const unsigned long interval = 100;
unsigned long previousMillis = 0;
byte redTimer = 0;
byte blueTimer = 0;
byte yellowTimer = 0;
byte greenTimer = 0;
byte redseconds = 0;
byte redminutes = 0;
byte redhours = 0;
byte blueseconds = 0;
byte blueminutes = 0;
byte bluehours = 0;
byte greenseconds = 0;
byte greenminutes = 0;
byte greenhours = 0;
byte yellowseconds = 0;
byte yellowminutes = 0;
byte yellowhours = 0;
bool red = 0;
bool blue = 0;
bool yellow = 0;
bool green = 0;
bool reset = 0;
byte timer = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
pinMode(button3, INPUT_PULLUP);
pinMode(button4, INPUT_PULLUP);
pinMode(button5, INPUT_PULLUP);
lcd.init(); // initialize the lcd and display stopwatches
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("STARTING GAME TIMER!");
delay(5000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("RED : 00:00:00");
lcd.setCursor(0, 1);
lcd.print("BLUE : 00:00:00");
lcd.setCursor(0, 2);
lcd.print("YELLOW : 00:00:00");
lcd.setCursor(0, 3);
lcd.print("GREEN : 00:00:00");
}
void loop() {
unsigned long currentMillis = millis();
red = digitalRead(button1);
blue = digitalRead(button2);
yellow = digitalRead(button3);
green = digitalRead(button4);
reset = digitalRead(button5);
timer = 0;
if (red == LOW) {
timer = 1;
}
if (blue == LOW) {
timer = 2;
}
if (yellow == LOW) {
timer = 3;
}
if (green == LOW) {
timer = 4;
}
if (reset == LOW) {
timer = 5;
}
if (currentMillis - previousMillis >= interval) {//every tenth second
switch (timer) {
case 0://no timing
break;
case 1://red timer
redTimer++;//add one tenth to counter
if (redTimer == 10) {//10 tenths equal one second
redseconds++;//add one second
redTimer = 0;//reset counter
}
if (redseconds == 60) {//60 secs equal one minute
redseconds = 0;// reset counter
redminutes++;//add one minute
}
if (redminutes == 60) {//60 minutes equal one hour
redminutes = 0;// reset counter
redhours++;//add one hour
}
lcd.setCursor(0, 0);
lcd.print("RED : ");
//hours
if (redhours < 10) {//add extra 0 to stop line shift
lcd.print("0");
}
lcd.print(redhours);//show minutes
lcd.print(":");
//minutes
if (redminutes < 10) {//add extra 0 to stop line shift
lcd.print("0");
}
lcd.print(redminutes);//show minutes
lcd.print(":");
//seconds
if (redseconds < 10) {//add extra 0 to stop line shift
lcd.print("0");
}
lcd.print(redseconds);//show seconds
break;
case 2://blue timer
blueTimer++;//add one tenth to counter
if (blueTimer == 10) {//10 tenths equal one second
blueseconds++;//add one second
blueTimer = 0;//reset counter
}
if (blueseconds == 60) {//60 secs equal one minute
blueseconds = 0;// reset counter
blueminutes++;//add one minute
}
if (blueminutes == 60) {//60 minutes equal one hour
blueminutes = 0;// reset counter
bluehours++;//add one hour
}
lcd.setCursor(0, 1);
lcd.print("BLUE : ");
//hours
if (bluehours < 10) {//add extra 0 to stop line shift
lcd.print("0");
}
lcd.print(bluehours);//show minutes
lcd.print(":");
//minutes
if (blueminutes < 10) {//add extra 0 to stop line shift
lcd.print("0");
}
lcd.print(blueminutes);//show minutes
lcd.print(":");
//seconds
if (blueseconds < 10) {//add extra 0 to stop line shift
lcd.print("0");
}
lcd.print(blueseconds);//show seconds
break;
case 3://yellow timer
yellowTimer++;//add one tenth to counter
if (yellowTimer == 10) {//10 tenths equal one second
yellowseconds++;//add one second
yellowTimer = 0;//reset counter
}
if (yellowseconds == 60) {//60 secs equal one minute
yellowseconds = 0;// reset counter
yellowminutes++;//add one minute
}
if (yellowminutes == 60) {//60 minutes equal one hour
yellowminutes = 0;// reset counter
yellowhours++;//add one hour
}
lcd.setCursor(0, 2);
lcd.print("YELLOW : ");
//hours
if (yellowhours < 10) {//add extra 0 to stop line shift
lcd.print("0");
}
lcd.print(yellowhours);//show minutes
lcd.print(":");
//minutes
if (yellowminutes < 10) {//add extra 0 to stop line shift
lcd.print("0");
}
lcd.print(yellowminutes);//show minutes
lcd.print(":");
//seconds
if (yellowseconds < 10) {//add extra 0 to stop line shift
lcd.print("0");
}
lcd.print(yellowseconds);//show seconds
break;
case 4://green timer
greenTimer++;//add one tenth to counter
if (greenTimer == 10) {//10 tenths equal one second
greenseconds++;//add one second
greenTimer = 0;//reset counter
}
if (greenseconds == 60) {//60 secs equal one minute
greenseconds = 0;// reset counter
greenminutes++;//add one minute
}
if (greenminutes == 60) {//60 minutes equal one hour
greenminutes = 0;// reset counter
greenhours++;//add one hour
}
lcd.setCursor(0, 3);
lcd.print("GREEN : ");
//hours
if (greenhours < 10) {//add extra 0 to stop line shift
lcd.print("0");
}
lcd.print(greenhours);//show minutes
lcd.print(":");
//minutes
if (greenminutes < 10) {//add extra 0 to stop line shift
lcd.print("0");
}
lcd.print(greenminutes);//show minutes
lcd.print(":");
//seconds
if (greenseconds < 10) {//add extra 0 to stop line shift
lcd.print("0");
}
lcd.print(greenseconds);//show seconds
break;
case 5://reset timers
redTimer = 0;
redseconds = 0;
redminutes = 0;
redhours = 0;
blueTimer = 0;
blueseconds = 0;
blueminutes = 0;
bluehours = 0;
yellowTimer = 0;
yellowseconds = 0;
yellowminutes = 0;
yellowhours = 0;
greenTimer = 0;
greenseconds = 0;
greenminutes = 0;
greenhours = 0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("RESET!");
delay(500);
lcd.setCursor(0, 0);
lcd.print("RED : 00:00:00");
lcd.setCursor(0, 1);
lcd.print("BLUE : 00:00:00");
lcd.setCursor(0, 2);
lcd.print("YELLOW : 00:00:00");
lcd.setCursor(0, 3);
lcd.print("GREEN : 00:00:00");
break;
}
previousMillis = currentMillis;
}
}