Problema con codigo para deteccion con FC-51 {SOLUCIONADO}

Hola , estoy desarrollando un pequeño proyecto utilizando un Arduino Uno , un modulo sensor FC-51 y un modulo bluetooth HC-05 , la idea es detectar un objeto en movimiento que pasa delante del sensor y enviar un dato a través de BT a una aplicación al móvil , la aplicación activa un cronometro con este dato y lo para cuando pasa el siguiente objeto delante del sensor , en resumen controla el tiempo que trascurre entre detección y detección del sensor.
A nivel hardware y app lo tengo controlado , y el proyecto en general lo tengo funcionando con este codigo .

// Envia dato mediante BT y al led

#include <SoftwareSerial.h>

SoftwareSerial miBT(10, 11);

int sensor = 2;
int LED = 13;

void setup(){
 //Serial.begin(9600); 
 miBT.begin(38400);
 pinMode (sensor, INPUT);
 pinMode (LED, OUTPUT);
}

void loop(){
 miBT.println("A"); 
 if (digitalRead(sensor) == LOW) {
 miBT.println("1");
 //Serial.println("1");
 digitalWrite(LED, HIGH);

 }
 else {
 miBT.println("0");
 //Serial.println("0");
 digitalWrite(LED, LOW);                      
  }
 }

El problema que tengo es el siguiente , los objetos a detectar son irregulares y de diferentes volumenes , entonces pasa alguna ves que el mismo objeto es detectado varias veces a su paso por lo cual recibo en la aplicacion varios "1" provenientes del mismo objeto .
La pregunta es ¿ como podría hacer a través del código para evitar esto y solo obtener una deteccion por cada objeto ? yo se que el siguiente objeto a detectar nunca pasara antes de 2 o 3 segundos con lo que podria contar con este tiempo de margen para que el sistema vuelva a detetar , pero no tengo claro como hacerlo.
Soy un viejo electronico , pero algo nuevo en la programacion de arduino , intentando aprender poco a poco.
Gracias de antemano.

Busca ejemplos de debounce por software. Y lo aplicas a tu código poniendo el lapso que dices de 2 segundos.

Por otro lado, imho, una comunicación por BT no te dará ninguna precisión para un cronometro, tendría que ser el Arduino quien calculara el tiempo y enviarlo a la App.

Como te dice jordi3sk97, bastaría por bloquear tu detección por esos 2000 mseg cuando has detectado algo y cierras entonces tu capacidad para ver mas objetos o el mismo.

Pero viendo tu código veo otro problema y es el que todos cometen.
Cuando ves algo y se pone en el estado de detección

 if (digitalRead(sensor) == LOW) {

tu sistema enviará varios 1s porque el te sigue diciendo que lo ve, porque esta delante!!

Lo que debes hacer es enviar esa información cuando el sensor cambia de 1 a 0 o sea mirar el flanco de caida del sensor.
El sensor viene diciendo NO VEO NADA, NO VEO NADA y de repente dice DETECTO OBJETO pues.. eso es un cambio de flanco de NO VEO NADA en HIGH a DETECTO OBJETO en LOW.

eso se hace asi

// Envia dato mediante BT y al led

#include <SoftwareSerial.h>

SoftwareSerial miBT(10, 11);

const byte sensor = 2;
const byte LED    = 13;
bool  detecto, detectoAnt = true;

void setup(){
    //Serial.begin(9600); 
    miBT.begin(38400);
    pinMode (sensor, INPUT);
    pinMode (LED, OUTPUT);
}

void loop(){
    miBT.println("A"); 

    detecto = digitalRead(sensor);
    // Flanco descendente de 1 a 0
    if (!detecto && detectoAnt) {
        miBT.println("1");        // envio 1 para indicar que veo objeto
        //Serial.println("1");
        digitalWrite(LED, HIGH);
    }
    
    // envio 0 para indicar que no veo nada 
    // esto lo hará una sola vez
    // flanco ascendente de 0 a 1
    if (detecto && !detectoAnt) { 
        miBT.println("0");
        //Serial.println("0");
        digitalWrite(LED, LOW);                      
    }
    detectoAnt = detecto;
}

Gracias por la información y explicaciones , en cuanto regrese de viaje hago pruebas y comento.
Una duda , sobre lo que dice jordi3sk97 sobre la precisión del BT es por el retardo de este tipo de comunicación ? , en este caso solo lo uso para la orden remota de activación/desactivación pero entiendo que la precisión del propio crono estará determinada por la programación de la App.

jpmarques:
../..en este caso solo lo uso para la orden remota de activación/desactivación pero entiendo que la precisión del propio crono estará determinada por la programación de la App.

Leyendo esto,... no entiendo la frase. No me queda claro que se activa/desactiva, quien da la orden remota, y si la App te refieres al programa del Arduino o a la del móvil.

Pero según tu primer mensaje yo entendí:

1 - El Arduino detecta un objeto,
2 - El Arduino envía una señal por BT al móvil
3 - El móvil empieza a cronometrar()
4 - El Arduino detecta un objeto
5 - El Arduino envía una señal por BT al móvil
6 - El móvil termina de cronometrar(
)

Imho cronometro = precisión, y yo por aquí no la veo.
Me parece mas correcto.

1 - El Arduino detecta un objeto,
2 - El Arduino detecta un objeto
3 - El Arduino calcula el tiempo y envía un mensaje con el valor por BT al móvil.

Solucionado el tema del código , gracias .
Un saludo,,