//-----------------------
//Stopwatch with Lap Time
//-----------------------
#include <LiquidCrystal_I2C.h>
//---------------------------------
LiquidCrystal_I2C lcd(0x27, 16, 2);
//---------------------------------
String milliSec; boolean debounce1, debounce2, debounce4, debounce3 = false ;
unsigned long btn1PressStart=0, btn2PressStart=0;
unsigned long Sec, Min, startMillis; int lapNum = 1;
byte speaker= 10;
//============================================================
void setup()
{
pinMode(4,INPUT);
pinMode(3,INPUT);
pinMode(2,INPUT);
pinMode(7,INPUT);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("-TAMIYA MINI4WD-");
lcd.setCursor(0,1);
lcd.print(" Let's & GO...!!");
// tune();
}
//============================================================
void loop()
{
Reset();
if(millis()-btn1PressStart > 500) debounce1 = true;
if(((digitalRead(4) == HIGH) || (digitalRead(3) == HIGH) || (digitalRead(2) == HIGH )) && (debounce1 == true && debounce3 == false) )
{
btn1PressStart = millis();
debounce1 = false;
stopWatch();
}
}
//=============================================================
void stopWatch()
{
lcd.clear();
startMillis = millis();
while(1)
{
if(millis()-btn1PressStart > 500) debounce1 = true;
if(digitalRead(7) == HIGH)
{ debounce2 = true;
debounce3 = true;
lcd.setCursor(4,0);
lcd.print("Last Lap");
}
if ((digitalRead(4) == HIGH) && (debounce1 == true && debounce2 == true))
{
btn1PressStart = millis();
debounce1 = false;
debounce2 = false;
lcd.setCursor(0,1); lcd.print(" ");
lcd.setCursor(0,0); lcd.print("Line A -FINISH-");
DO(); delay(100); // 1
RE(); delay(100); // 2
MI(); delay(100); // 3
FA(); delay(100); // 4
SOL(); delay(100); // 5
LA(); delay(100); // 6
SI(); delay(100); // 7
DOO(); delay(500); // 8
DIAM(); delay(500);
break;
}
if ((digitalRead(3) == HIGH) && (debounce1 == true && debounce2 == true))
{
btn1PressStart = millis();
debounce1 = false;
debounce2 = false;
lcd.setCursor(0,1); lcd.print(" ");
lcd.setCursor(0,0); lcd.print("Line B -FINISH-");
DO(); delay(100); // 1
RE(); delay(100); // 2
MI(); delay(100); // 3
FA(); delay(100); // 4
SOL(); delay(100); // 5
LA(); delay(100); // 6
SI(); delay(100); // 7
DOO(); delay(500); // 8
DIAM(); delay(500);
break;
}
if((digitalRead(2) == HIGH ) && (debounce1 == true && debounce2 == true))
{
btn1PressStart = millis();
debounce1 = false;
debounce2 = false;
lcd.setCursor(0,1); lcd.print(" ");
lcd.setCursor(0,0); lcd.print("Line C -FINISH-");
DO(); delay(100); // 1
RE(); delay(100); // 2
MI(); delay(100); // 3
FA(); delay(100); // 4
SOL(); delay(100); // 5
LA(); delay(100); // 6
SI(); delay(100); // 7
DOO(); delay(500); // 8
DIAM(); delay(500);
break;
}
//-------------------------------------------------
//-------------------------------------------------
milliSec = String((millis()-startMillis)%1000);
Sec = ((millis()-startMillis)/1000)%60;
Min = ((millis()-startMillis)/60000)%60;
//-------------------------------------------------
lcd.setCursor(0,1); lcd.print("GO. ");
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]);
}
}
// fungsi nada
void DO(){
tone(speaker, 262);
}
void RE(){
tone(speaker, 294);
}
void MI(){
tone(speaker, 330);
}
void FA(){
tone(speaker, 349);
}
void SOL(){
tone(speaker, 395);
}
void LA(){
tone(speaker, 440);
}
void SI(){
tone(speaker, 494);
}
void DOO(){
tone(speaker, 523);
}
void DIAM(){
noTone(speaker);
}
void tune(){
// Song
SOL(); delay(300); // 5
SOL(); delay(400); // 5
DO(); delay(700); // 1
SOL(); delay(400); // 5
SOL(); delay(700); // 5
FA(); delay(400); // 4
MI(); delay(400); // 3
RE(); delay(400); // 2
MI(); delay(500); // 3
DO(); delay(700); // 1
LA(); delay(400); // 6
LA(); delay(500); // 6
SOL(); delay(400); // 5
FA(); delay(400); // 4
MI(); delay(400); // 3
SOL(); delay(400); // 5
DO(); delay(700); // 1
DIAM(); delay(500);
DO(); delay(400); // 1
RE(); delay(400); // 2
MI(); delay(500); // 3
FA(); delay(400); // 4
MI(); delay(400); // 3
FA(); delay(400); // 4
MI(); delay(400); // 3
RE(); delay(400); // 2
RE(); delay(500); // 2
LA(); delay(400); // 6
MI(); delay(400); // 3
SOL(); delay(800); // 5
DO(); delay(700); // 1
SOL(); delay(400); // 5
SOL(); delay(500); // 5
FA(); delay(400); // 4
MI(); delay(400); // 3
RE(); delay(400); // 2
MI(); delay(500); // 3
DO(); delay(500); // 1
LA(); delay(400); // 6
LA(); delay(700); // 6
SOL(); delay(400); // 5
FA(); delay(400); // 4
MI(); delay(400); // 3
SOL(); delay(400); // 5
DO(); delay(700); // 1
DO(); delay(400); // 1
RE(); delay(400); // 2
MI(); delay(500); // 3
FA(); delay(400); // 4
MI(); delay(400); // 3
FA(); delay(400); // 4
MI(); delay(400); // 3
MI(); delay(400); // 3
RE(); delay(700); // 2
SOL(); delay(400); // 5
DOO(); delay(400); // 8
SI(); delay(400); // 7
RE(); delay(400); // 2
DO(); delay(1000); // 1
DIAM(); delay(500);
/*
DO(); delay(500); // 1
RE(); delay(500); // 2
MI(); delay(500); // 3
FA(); delay(500); // 4
SOL(); delay(500); // 5
LA(); delay(500); // 6
SI(); delay(500); // 7
DOO(); delay(1000); // 8
DIAM(); delay(500);
*/
}
void Reset()
{
if(millis()-btn2PressStart > 500) debounce4 = true;
if(digitalRead(6) == HIGH)
{ debounce1 = false;
debounce2 = false;
debounce3 = false;
debounce4 = false;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("-TAMIYA MINI4WD-");
lcd.setCursor(0,1);
lcd.print(" Let's & GO...!!");
}
}