//-----------------------
//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]);
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
r1:1
r1:2
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
r2:1
r2:2
gnd1:GND
logic1:D0
logic1:D1
logic1:D2
logic1:D3
logic1:D4
logic1:D5
logic1:D6
logic1:D7
logic1:GND