//-----------------------
//Stopwatch with Lap Time
//-----------------------
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//---------------------------------
//LiquidCrystal_I2C lcd(0x3F, 16, 2);
LiquidCrystal_I2C lcd(0x27, 20, 4); //LCD
//---------------------------------
String milliSec;
boolean debounce1, debounce2;
unsigned long btn1PressStart = 0, btn2PressStart = 0;
unsigned long Sec, Min, startMillis;
int lapNum = 1;
int cylinder1 = A1;
int cylinder2 = A2;
int cylinder3 = A3;
int value = 0;
int countCylinder1 = 0;
int countCylinder2 = 0;
int countCylinder3 = 0;
int valCylinder1;
int valCylinder2;
int valCylinder3;
int val;
int buttonVal;
int buttonCount = 0;
//============================================================
void setup()
{
pinMode(4, INPUT);
pinMode(9, INPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("RESET CYLINDERS");
lcd.setCursor(0, 1);
lcd.print("Press to start");
pinMode(cylinder1, INPUT);
pinMode(cylinder2, INPUT);
pinMode(cylinder3, INPUT);
}
//============================================================
void loop()
{
if (millis() - btn1PressStart > 500) debounce1 = true;
if (digitalRead(4) == HIGH && debounce1 == true)
{
btn1PressStart = millis();
debounce1 = false;
stopWatch();
buttonVal = digitalRead(4);
buttonCount = 0;
lcd.setCursor(13, 3); lcd.print(buttonCount);
}
valCylinder1 = analogRead(cylinder1);
valCylinder2 = analogRead(cylinder2);
valCylinder3 = analogRead(cylinder3);
valCylinder1 = map(valCylinder1, 0, 1023, 0, 100);
valCylinder2 = map(valCylinder2, 0, 1023, 0, 100);
valCylinder3 = map(valCylinder3, 0, 1023, 0, 100);
lcd.setCursor(17, 1);
lcd.print(valCylinder1);
lcd.setCursor(17, 2);
lcd.print(valCylinder2);
lcd.setCursor(17, 3);
lcd.print(valCylinder3);
countCylinder1 = 0;
countCylinder2 = 0;
countCylinder3 = 0;
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
//=============================================================
void stopWatch()
{
lcd.clear();
startMillis = millis();
while (1)
{
if (millis() - btn1PressStart > 500) debounce1 = true;
// if ( Sec == 3 && buttonCount == 0) {
// buttonCount++;
// lcd.setCursor(13, 3); lcd.print(buttonCount);
// break;
// }
if (digitalRead(4) == HIGH && debounce1 == true )
{
//lcd.clear();
btn1PressStart = millis();
debounce1 = false;
lcd.setCursor(0, 0); lcd.print(" ");
lcd.setCursor(13, 0); lcd.print("END");
lapNum = 1;
btn2PressStart = 0;
buttonVal = digitalRead(4);
lcd.setCursor(13, 3); lcd.print(buttonVal);
break;
}
if (countCylinder1 == 1 && countCylinder2 == 1 && countCylinder3 == 1)
{
break;
}
if (Sec == 10)
{
break;
}
//-------------------------------------------------
//----------------------------------------------
//-------------------------------------------------
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]);
valCylinder1 = analogRead(cylinder1);
valCylinder2 = analogRead(cylinder2);
valCylinder3 = analogRead(cylinder3);
valCylinder1 = map(valCylinder1, 0, 1023, 0, 100);
valCylinder2 = map(valCylinder2, 0, 1023, 0, 100);
valCylinder3 = map(valCylinder3, 0, 1023, 0, 100);
lcd.setCursor(15, 1);
lcd.print(countCylinder1);
lcd.setCursor(15, 2);
lcd.print(countCylinder2);
lcd.setCursor(15, 3);
lcd.print(countCylinder3);
//lcd.setCursor(4, 3);
//lcd.print(valCylinder2);
//lcd.setCursor(8, 3);
//lcd.print(valCylinder3);
//lcd.setCursor(14, 3);
//lcd.print(countCylinder1);
if (valCylinder1 < 45 ) {
lapTime1();
digitalWrite(5, HIGH);
}
if (valCylinder1 > 55) {
lapTime1();
digitalWrite(5, HIGH);
}
if (valCylinder2 < 45 ) {
lapTime2();
digitalWrite(6, HIGH);
}
if (valCylinder2 > 55) {
lapTime2();
digitalWrite(6, HIGH);
}
if (valCylinder3 < 45 ) {
lapTime3();
digitalWrite(7, HIGH);
}
if (valCylinder3 > 55) {
lapTime3();
digitalWrite(7, HIGH);
};
}
}
//============================================================
void lapTime1()
{
if (countCylinder1 <= 0) {
String lapMilliSec = milliSec;
int lapSec = Sec, lapMin = Min;
//---------------------------------------------
lcd.setCursor(0, 1);
lcd.print("C1");
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]);
countCylinder1++;
}
}
void lapTime2()
{
if (countCylinder2 <= 0) {
String lapMilliSec = milliSec;
int lapSec = Sec, lapMin = Min;
//---------------------------------------------
lcd.setCursor(0, 2);
lcd.print("C2");
lcd.setCursor(4, 2);
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]);
countCylinder2++;
}
}
void lapTime3()
{
if (countCylinder3 <= 0) {
String lapMilliSec = milliSec;
int lapSec = Sec, lapMin = Min;
//---------------------------------------------
lcd.setCursor(0, 3);
lcd.print("C3");
lcd.setCursor(4, 3);
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]);
countCylinder3++;
}
}