Dudas respecto a AnalogRead/SensorValue

Hola

Tengo dudas respecto a unos comandos. Queriendo iniciar un poco en lo relacionado a programación en Arduino, encontré un proyecto que me pareció muy entretenido para comenzar. Consiste en un cronómetro con sensores infrarrojos que permite calcular el tiempo que toma un autito de juguete en dar vuelta a una pista en la que también marca la que toma menos tiempo.

La cosa es que intenté hacer el circuito con el Arduino, con buenos resultados. Pero desde hace poco he querido hacer 2 sensores conectados al mismo circuito para poder medir el tiempo que demora el auto en recorrer una distancia definida, en el cual intentando conectarlo al circuito, me marca uno de los 2, debiendo desconectar los otros para que los primeros

La duda es, ¿es realmente posible poner 2 sensores para lo que busco? (1 que inicia el tiempo y otro que lo termina).

Adjunto la página y los comandos que utilizo.

Comandos:

// Load libraries for LCD display and create and lcd object
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

// Initialise variables
int sensorPin = A1;
int ledPin = 13;
int sensorValue = 0;
unsigned int start = 0;
unsigned int lap = 0;
unsigned int tempo = 0;
char last[16];

void setup()
{
// Initialise the LCD display
lcd.begin(16,2);
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Ready");

// Initialise serial communication at 9600 bps
Serial.begin(9600);

// Power up the IR sensor
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
}

void loop()
{
sensorValue = analogRead(sensorPin);
if (sensorValue > 900) // An object is detected
{
tempo = millis(); // Record the current time
lap = tempo - start; // Calculate the lap time
start = tempo; // Reset the clock

// Calculate the seconds and milliseconds for nicer printout of lap time
unsigned int sec = lap / 1000;
unsigned int msec = lap - sec*1000;

// Print out the lap time on the serial port
sprintf(last, "Last: %02u"%03u", sec, msec);
Serial.println(last);

// Print out the lap time on the LCD display
lcd.setCursor(0, 0); // Set the cursor on the first display line
lcd.print(last);

Serial.println("---");
delay(1000); // Needed to avoid that the car triggers multiple detections
}
}

a ver si entiendo. has puesto dos sensores para medir el intervalo de tiempo entre ambos.
El código parece ser el mismo de DIY. Solo veo un sensor a A1 y que pasa con el otro sensor?
Luego tu código inicia cuando el IR es > 900

  tempo = millis(); // Record the current time
      lap = tempo - start; // Calculate the lap time
      start = tempo; // Reset the clock

anotas el tiempo en tempo
calculas la diferencia respecto de start
y lo inicializas para la siguente vuelta.
Yo te diría que asi esta mal.
En principio, dos led IR mejor alimentarlos con na tensión fija como seguro lo haces y leerlos digitalmetne y para evitar errores, usas dos interrupciones para no perder ni un microsegundo.

Bien he reescrito el código, le agregué tiempo de vuelta en fila superior del led y Tiempo del tramo entre IRs en la segunda linea.
Las conexiones serán
IR largada a pin2
IR fin del tramo a pin3

Los led emisores deben enviar permanentemente el rayo IR.
Los led receptores supongo que deben trabajar bien entre plena ilumnación y no iluminación.
Dime cuando pruebas eso que valores arroja el IR receptor.

Este es el código.

// Load libraries for LCD display and create and lcd object
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

// Initialise variables
const byte sensorPin1 	= 2;
const byte sensorPin2 	= 3;

const byte ledPin 		= 13;
byte sensorValue1;
byte sensorvalue2;

volatile unsigned int startTime = 0;
volatile unsigned int lapTime = 0;
volatile unsigned int tempo = 0;
volatile unsigned int stopTime = 0;
volatile unsigned int tramoTime = 0;
char last[16];
bool presentoVuelta = false;
bool presentoTramo = false;

unsigned int seg, tseg;
unsigned int mseg, tmseg;
 
void setup()
{
  // Initialise the LCD display
  lcd.begin(16,2);
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Ready");
  
  // Initialise serial communication at 9600 bps
  Serial.begin(9600);
    
  // Power up the IR sensor
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, HIGH);
  attachInterrupt(0, startCrono, RISING); // pin 2 supongo que cuando pasa cae la tensión 
  attachInterrupt(1, stropCrono, RISING); // Pin 3 sino poner FALLING

}



void loop()
{
    
	if (presentoVuelta) {
      // Calculate the seconds and milliseconds for nicer printout of lap time
      seg = lapTime / 1000;
      mseg = lapTime - seg*1000;
      
      // Print out the lap time on the serial port
      sprintf(last, "T vuelta: %02u\"%03u", seg, mseg);
      Serial.println(last);

      // Print out the lap time on the LCD display
      lcd.setCursor(0, 0); // Set the cursor on the first display line
      lcd.print(last);
    }
      
    if (presentoTramo){
      tseg = tramoTime / 1000;
      tmseg = tramoTime - tseg*1000;

      sprintf(last, "T tramo: %02u\"%03u", tseg, tmseg);
      Serial.println(last);
      
      lcd.setCursor(0, 1); // fijamos el cursor en la segunda linea del LCD
      lcd.print(last);
    }
}

void startCrono(){ 			// pin 2 es la interruptcón 0
							// no hace falta medir el pin porque ya lo hace la interrupción
    tempo = millis();		// mantenemos esto para poder medir el tiempo de vuelta
    lapTime = tempo - startTime;
    startTime = tempo;
    presentoVuelta = true; 		// presento datos de vuelta 			
}

void stropCrono (){
	stopTime = millis();
	tramoTime = stopTime - tempo;
	presentoTramo = true;			// presento tiempo del tramo medido
}

aunque no tiene errores, porque compila, talvez tenga algun fallo porque no lo probé.