LAP TIMER para RC/SLOT

Hello I have a problem I have this Code https://github.com/DivuxX/ARDUINO-LAP-TIMER-SLOT.git which is a lap timer for a mini RC cars, when a car pass through the IR sensor, in the console it prints the number of the lap and the time. I want to add this 'when the button is pressed wait till something pass through and then start counting the time of the first lap, and when again press the button, show the total time of all the laps' This code is not mine,is from a YT video [Arduino] DIY RC Car Lap Timer - YouTube and my Arduino knowledge is nearly 0, I've read some documentation and forums but I can't find a way to do it. thank you in advance.

Buenas, tengo un problema, tengo este código, (el link de github del texto en ingles)
que es un contador de vueltas para coches de RC y slot, que cuando se ejecuta el código si un coche pasa, se registra la vuelta y el tiempo.
Y me gustaría añadir que cuando se de a un botón se ejecute el código pero que no empiece a contar el tiempo hasta que el sensor no detecte algo, y que cuando lo detecte comience a contar el tiempo de la primera vuelta y que cuando se vuelva a dar el botón deje de contar vueltas y mande un resultado por consola de las vueltas totales y el tiempo total de todas las vueltas. este código no es mío y es sacado de un video de YT que esta posteado en el texto de arriba en ingles
y mis conocimiento de Arduino son basicamente nulos,he leido documentacion y visto algunos foros pero no logro dar con la forma de hacerlo.

Gracias.

Moderador:
Si posteas en el foro en inglés nunca traduzcas al español porque los vuelve locos, y automáticamente lo mueven a este foro en español.
Manten el idioma nativo del foro en cada consulta. Lo puedes leer en las Normas del Foro sea el idioma que sea.

Me encanta tu consulta, y lo digo con mucha ironía porque esta claro que no has leído las normas del foro.
Este foro brinda ayuda, pero acá pides que te hagamos las cosas y no muestras esfuerzo de tu parte.
El código me parece muy simple, algo que leyendo la documentación sobre millis() podrias haber hecho por tu propia cuenta.

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

void setup()
{
  Serial.begin(9600);
  
  pinMode(2, INPUT);
  digitalWrite(2, HIGH);
}


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

Creo que tienes que leer y practicar un poco.
Ademas explicate mejor:
Quieres que al presionar un boton se ejecture el código? Qué código y si son 3 líneas que solo cuentan y muestran vuelta y tiempo.
Las vueltas totales ya las tienes, porque con cada vuelta se acumula la cantidad total de vueltas.
El tiempo total de todas las vueltas, solo debes ir sumandolo en una variable adecuada, del mismo tipo que i, o a.
Por cierto, double no es el tipo de variable adecuado. Debe ser unsigned long.

  1. En las normas del foro no pone absolutamente nada de que no se pueda traducir a ingles.
    de hecho en las mismas normas del foro pone que por las distintas regiones en las que de habla español puede haber variaciones en el idioma y que se trate de usar un lenguaje lo mas general posible, precisamente puedo entender que tu eres de Latinoamérica, allí seguramente tengáis palabras que aquí en Cantabria no tengamos, por eso esta en ingles que es un idioma mucho mas generalizado que el español, fácil de comprender para todos.
  2. El post esta puesto en español y en internacional , no solo lo van a leer españoles, lo va a leer gente de todo el mundo, así que en ingles esta bien
  3. Como bien digo en el post yo no tengo conocimientos de programación y he leído documentación visto tutoriales etc... y no encuentro una manera para hacerlo, el código a ti te puede parecer muy simple siendo moderador precisamente de la comunidad de Arduino pero yo no soy ni moderador ni programador así que no es que no haya puesto de mi parte, es que no se que poner, por eso pido ayuda
  4. yo no pido que nadie me haga la cama, yo solo estoy buscando alguien que me explique como hacer que cuando yo de a un botón se ejecute el código y que espere hasta que pase algo por el sensor para empezar a contar.

yo solo venia a por ayuda...

Yo te hice una pregunta porque no te entiendo que quieres hacer.

No me has respondido.

Moderador:
Respecto del ingles, ya te dije, estamos en un foro en español. Para la próxima ya sabes.
Solo usa ingles para referirte a una hoja de datos o un comentario de alguién que este asi explicado y para ello cítalo con su referencia o link.
Nadie en inglés te va a responder aqui, para eso esta el foro en inglés y si hubieras publicado esto en el foro en inglés, automáticamente lo hubieran movido a este foro. Porque en cuanto ven algo que apenas tiene comentarios en español, lo mueven a este foro . He visto hilos completos con expicación y algunos comentarios en español que han sido movidos.

de hecho si...

[/quote]
yo no pido que nadie me haga la cama, yo solo estoy buscando alguien que me explique como hacer que cuando yo de a un botón se ejecute el código y que espere hasta que pase algo por el sensor para empezar a contar.
[/quote]

Bueno, okay.
Pues lo que yo te pedía era que me dijeras en tal pin tengo el sensor y en tal otro un boton.
Del código se deduce que el sensor esta en el pin 2.
Ahora además tienes un botón pulsador conectado a supongamos pin 3, puedes cambiarlo donde gustes.

Había escrito un código pero un amigo del foro me recordó algo y tiene razón, si alguien quiere hacer las cosas (como en tu caso) no hay que darle servido las cosas. No es lo que pidió.

Te recomiendo leer los tutoriales de la sección Documentación, millis(), como usar pulsadores o interruptores.

Yo te explico

Definis una variable para guardar el estado del botón y otra para almacenar la primera detección.
En el loop.
Lees el pin del botón.
Si está pulsado invertis el valor de la variable que guarda el estado.
Si esa variable es verdadera, verificas la variable que guarda la detección.
Si es verdadera contas las vueltas y tiempo como hasta ahora,
Si es falsa, lees el detector.
Si hay detección, pones la variable en verdadero y empezas a medir el tiempo guardando el valor de millis()

Eso es todo.

Lo que sí, arregla las definiciones porque las variables que guardan milisegundos deben ser UL no double.

Saludos