contatore con ricevitore ir

Ciao a tutti, oggi ho fatto un test con un sensore infrarosso, l'obiettivo era di realizzare un piccolo contatore che contasse quanti oggetti vengono introdotti in una scatoletta, per farla semplice. Lo script l'ho scritto abbastanza in fretta ma funziona. Per attuare una sorta di debouncing ho dato un delay di 200 millisecondi ogni volta che il "contatto" viene chiuso. Mi chiedevo però se non fosse più affidabile inserire una variabile che considerasse un tempo minimo per il quale un oggetto debba essere rilevato, prima che il contatore lo consideri. La domanda è: costruendola sottraendo i millisecondi trascorsi durante il passaggio da quelli totali dall'inizio del ciclo, alla lunga non manderei in overflow arduino?

const int sensore = A0;

int valoreIR = 0;
int contatore = 0;

int state = HIGH;
int previous = HIGH;

void setup () 
{
Serial.begin (9600);
}
void loop(){
previous = state;

valoreIR = analogRead (sensore);
if (valoreIR == 0) 
{ state = LOW; 

}
else if (valoreIR > 0) 
{ state = HIGH;
}

if ( state == HIGH && previous == LOW) {

add();

}
}

void add(){
 contatore++;
 Serial.println(contatore);
 digitalWrite(13, HIGH);   // set the LED on
 delay(200);
 digitalWrite(13, LOW);   // set the LED on


}

ciao
io stò affrontando il problema di conteggio dei semi, fatto salvo i semi di piccolo diametro lo schema sotto mi funziona bene

stefano

/*
valido per il conteggio
*/
  #include <LiquidCrystal.h>  // include the library code
LiquidCrystal lcd(12, 11, 6, 5, 4, 3); // initialize the library with the numbers of the interface pins

int statosensore1=LOW;  //stato iniziale del sensore
int contatore=0;
int ledpin=13;


void setup() 
{
    lcd.begin(16, 4);  // set up the LCD's number of columns and rows:
  
  pinMode(ledpin,OUTPUT);
   attachInterrupt(0,sensore1,RISING); //sensore collegato al pin 2
   Serial.begin(9600);
}

void loop()
{
  if (statosensore1==HIGH)
{ 
      statosensore1=LOW;  
  contatore++;

  digitalWrite(ledpin,HIGH);
    delay(10);
  digitalWrite(ledpin,LOW);

             lcd.clear();
           lcd.print(contatore);
  Serial.println(contatore);
 }
}

  
  
void sensore1() //pin 2 a cui attaccare il sensore induttivo
{
  statosensore1=HIGH;
}