//-----------------------
//Stopwatch with Lap Time
//-----------------------
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//---------------------------------
LiquidCrystal_I2C lcd(0x27, 16, 2); //0x3F
//---------------------------------
String milliSec; boolean debounce1, debounce2;
unsigned long btn1PressStart=0, btn2PressStart=0;
unsigned long Sec, Min, startMillis; int lapNum = 1;
//============================================================
void setup()
{
pinMode(3,INPUT); pinMode(7,INPUT);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("---STOPWATCH----");
lcd.setCursor(0,1);
lcd.print(" Press to start");
}
//============================================================
void loop()
{
if(millis()-btn1PressStart > 500) debounce1 = true;
if(digitalRead(3) == HIGH && debounce1 == true)
{
btn1PressStart = millis();
debounce1 = false;
stopWatch();
}
}
//=============================================================
void stopWatch()
{
lcd.clear();
startMillis = millis();
while(1)
{
if(millis()-btn1PressStart > 500) debounce1 = true;
if(digitalRead(3) == HIGH && debounce1 == true)
{
btn1PressStart = millis();
debounce1 = false;
lcd.setCursor(0,0); lcd.print(" ");
lcd.setCursor(13,0); lcd.print("END");
lapNum = 1;
btn2PressStart = 0;
break;
}
//-------------------------------------------------
if(millis()-btn2PressStart > 500) debounce2 = true;
if(digitalRead(7) == HIGH && debounce2 == true)
{
btn2PressStart = millis();
debounce2 = false;
lapTime();
}
//-------------------------------------------------
milliSec = String((millis()-startMillis)%1000);
Sec = ((millis()-startMillis)/1000)%60;
Min = ((millis()-startMillis)/60000)%60;
//-------------------------------------------------
lcd.setCursor(0,0); lcd.print("BGN ");
if(Min < 10)
{
lcd.print("0"); lcd.print(Min);
}
else lcd.print(Min);
lcd.print(":");
if(Sec < 10)
{
lcd.print("0"); lcd.print(Sec);
}
else lcd.print(Sec);
lcd.print(".");
lcd.print(milliSec[0]); lcd.print(milliSec[1]);
}
}
//============================================================
void lapTime()
{
String lapMilliSec = milliSec;
int lapSec = Sec, lapMin = Min;
//---------------------------------------------
lcd.setCursor(0,1);
lcd.print("LP"); lcd.print(lapNum); lapNum++;
lcd.setCursor(4,1);
if(Min < 10)
{
lcd.print("0"); lcd.print(lapMin);
}
else lcd.print(lapMin);
lcd.print(":");
if(Sec < 10)
{
lcd.print("0"); lcd.print(lapSec);
}
else lcd.print(lapSec);
lcd.print(".");
lcd.print(lapMilliSec[0]); lcd.print(lapMilliSec[1]);
}