Lap timer

Ciao a tutti, sono nuovo qui sul forum avrei una richiesta da farvi:
Sto pensando di usare questo cronometro per rilevare dei tempi di un percorso fatto in bici

 double i = 0;
double a = millis();
double c ;

void setup()
{
  Serial.begin(9600);

  pinMode(2, INPUT);
  pinMode(8, INPUT);
  digitalWrite(2, LOW);
}


void loop()
{
  delay(10);
  if (digitalRead(2) == HIGH)
  {
    c = millis();
    i = (c - a) / 1000;
    if (i > 1)
    {
      Serial.print("\t\t");
      Serial.println(i);
      a = millis();
      delay(1000);
    }
  }

  { if (digitalRead(8) == HIGH)
    {
      delay (1000);
      Serial.print("15");
      delay (5000);
      Serial.print("10");
      delay (5000);
      Serial.print("5");
      delay (2000);
      Serial.print("3");
      delay (1000);
      Serial.print("2");
      delay (1000);
      Serial.print("1");
      delay (1000);
      Serial.print("GO!");
      a = millis();
      delay(15000);
    }
  }
}

che funziona nel seguente modo: premo un pulsante esegue il conto alla rovescia parte il timer, per 15 secondi fa si che la fotocellula non rilevi nulla e dopo di quei 15 secondi la fotocellula può iniziare a rilevare i tempo effettuato questo per permettere a tutti di passarci davanti.
Mi piacerebbe se qualcuno di voi mi potesse aiutare a implementare un altra funzione dissociata da questa che supponendo di partire uno alla volta e arrivando comunque tutti nel medesimo ordine per i primi 15 secondi mano che i corridori ci passano davanti fa partire un cronometro per ogni corridore non piu di 6 (corridori/cronometri) e dopo i 15 secondi mano mano che i corridori passano davanti alla fotocellula perchè hanno terminato il giro mi stampi il relativo tempo. Spero di essermi spiegato.
Intanto grazie mille a tutti!!!

Buonasera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Scusami non lo sapevo è la mia prima volta su un forum, comunque mi sono presentato.
Grazie!

double i1 = 0; //tempo da stampare corridore 1
double i2 = 0; //tempo da stampare corridore 2
double a = millis();
double c1 ; //start cronometro 1
double c2 ;  //start cronometro 2
double c1x ; //stop cronometro 1
double c2x ; //stop cronometro 2
int cr = 0; //corridore numero ...
int x = 0; // tempo dopo il quale si possono stoppare i cronometri
void setup()
{
  Serial.begin(9600);

  pinMode(2, INPUT);
  pinMode(8, INPUT);
  digitalWrite(2, LOW);
}


void loop()
{
  delay(10);
  if (digitalRead(2) == HIGH)
  { x = millis();
    if (millis() - x <= 15000) // se non sono ancora passati 15 secondi incremento di 1 altrimenti -6
     { cr += 1;
      delay (2000);}
    else {
      cr -= 6;
      delay (2000);
    }
    Serial.println(cr);
  }

  if (cr == 1) {
    c1 = millis(); //memorizzo il valore di partenza del cronometro 1 
  }
  if (cr == 2) {
    c2 = millis();
  }

  if (cr == -5) {
    c1x = millis();
    i1 = (c1x - c1) / 1000; //memorizzo il valore di fine del cronometro 1 faccio l'operzaione e stampo
    Serial.println(i1);
    //Serial.println(c1);
   // Serial.println(c1x);
    c1x = 0;
    c1 = 0;
  }

  if (cr == -4) {
    c2x = millis();
    i2 = (c2x - c2) / 1000;
    Serial.print("i2");
    Serial.println(i2);
   // Serial.println(c2);
   // Serial.println(c2x);
    c2x = 0;
    c2 = 0;
  }
  
}

Perchè io ho provato a realizzare questo ma non riesco a venirne a capo

Durante questa quarantena qualcuno riuscirebbe a darmi una mano?