strano problema con delay

per PaoloP è un int.

eccovi il codice, non è lungo e nemmeno difficile e comunque sia il problema è isolato, il resto non dovrebbe influenzare minimamente.

int  elettroDx = 9;
int  elettroSx = 10;
int  pompaDx = 11;
int  pompaSx = 12;
int  sensore = 13;
int  pulsante = 2;


volatile int contatore=0; 
int x=0;

int nruote=0;
int Rsensore=0;

void setup ()
{
  Serial.begin(9600);
  pinMode(elettroDx, OUTPUT);
  pinMode(elettroSx, OUTPUT);
  pinMode(pompaDx, OUTPUT);
  pinMode(pompaSx, OUTPUT);
  
  pinMode(sensore, INPUT);   
  
}

void loop()
{
   
  if(true) //la condizione originale non era questa ma il problema sorge anche cosi
	utilizzo();

}

void utilizzo()
{
      contatore++;
      delay(1);  //delay necessario altrimenti succede quanto spiegato prima
      if( contatore == 1000)
          avviso();
     
    lavaggio();  
}


void lavaggio()
{
  //apertura pompe
  digitalWrite(pompaDx, HIGH);
  digitalWrite(pompaSx, HIGH);
  delay(1000); //indicativo per pressione
  
  //chiusura pompe																						
  digitalWrite(pompaDx, LOW);
  digitalWrite(pompaSx, LOW);
  
  //apertura valvole
  digitalWrite(elettroDx, HIGH);
  digitalWrite(elettroSx, HIGH);
  

  do
  {
      delay(1000);
      x++;
  }
  while((( x<=5 || input()==false)) && nruote<1);
  
  x=0;
  digitalWrite(elettroDx, LOW);
  digitalWrite(elettroSx, LOW);
																								  														  																																															  
}

boolean input()
{  
  if( digitalRead(sensore)==HIGH && digitalRead(pulsante)==LOW && nruote==0  ) //attivato-->ruota && pulsante start premuto  0--> prima ruota
    {
        nruote++;  //possibile delay per utenti riconglioniti
        return true;
    }
    if( digitalRead(sensore)==HIGH && nruote==1  ) //attivato-->ruota && pulsante start premuto
    {
        nruote++;
        return true;
    }
          return false;
}
  

void avviso(){
   Serial.println("AIUTO");
}

grazie per l'aiuto