/*
Chronomètre de sprint de 100 m ou 200 m.
Départ par Bp, emission d'un son,
arrêt par cellule LDR coupure de faisceau lumineux. 2 chrono affichés.
*/
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int Bp=3; //START
int Cellule; //cellule LDR
int Buzzer=4;
int Minutes1=0;
float Secondes1=0;
int Minutes2=0;
float Secondes2=0;
unsigned long Timer;
//Utilisé à la place de float. Il faut diviser par 1000.00 pour avoir la virgule.
unsigned long Chrono1;
unsigned long Chrono2;
unsigned long Prems;
unsigned long Deuz;
bool finish=false;
void setup() {
Serial.begin(9600);
pinMode(Bp, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(2), stop, RISING);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
}
void loop() {
ZERO:
lcd.print("Chrono : ");
lcd.setCursor(9,0);
lcd.print("READY");
lcd.setCursor(9,0);
while(digitalRead(Bp)==HIGH) {}
Timer = millis();
tone(Buzzer,150,1000);
Serial.print("-RUN-");
lcd.print(" RUN ");
lcd.setCursor(0,1);
ONE:
Chrono1=millis()-Timer;
Serial.println(Chrono1/1000.000);
if(finish==false) {goto ONE;}
Prems=Chrono1;
finish=false;
TWO:
Chrono2=millis()-Timer;
Serial.println(Chrono2/1000.000);
if(finish==false) {goto TWO;}
Deuz=Chrono2;
calcul();
ecran();
}
void ecran (){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("1>");
lcd.setCursor(3,0);
lcd.print(Minutes1);
lcd.setCursor(4,0);
lcd.print("min");
lcd.setCursor(8,0);
lcd.print(Secondes1/1000.000);
lcd.setCursor(13,0);
lcd.print("sec");
Serial.println(Chrono2/1000.000);
lcd.setCursor(0,1);
lcd.print("2>");
lcd.setCursor(3,1);
lcd.print(Minutes2);
lcd.setCursor(4,1);
lcd.print("min");
lcd.setCursor(8,1);
lcd.print(Secondes2/1000.000);
lcd.setCursor(13,1);
lcd.print("sec");
while(digitalRead(Bp)==HIGH) {}
lcd.clear();
finish=false;
Minutes1=0;
Secondes1=0;
Minutes2=0;
Secondes2=0;
delay(1500); //évite le re-RUN immédiat.
}
void stop(){
finish=true;
}
void calcul(){
Minutes1=Prems/60000; //Minutes est un int, donc le résultat sera un entier.
Secondes1=Prems-Minutes1*60000; //Secondes est un float. La multiplication * est prioritaire.
Minutes2=Deuz/60000;
Secondes2=Deuz-Minutes2*60000;
}