ir+funzione if

ciao a tutti..ho un problema strano che non riesco a capire.premendo i pulsanti del telecomando il motore esegue un ciclo for in avanti o indietro,pero ogni tanto impazzisce e non esegue il for continua a girare...perche?
grazie mille

int motorPin1 = 7;
int motorPin2 = 8;
int motorPin3 = 9;
int motorPin4 = 10;
int delayTime = 10; // velocita motore
int finecorsa; //finecorsa
int ciclo=40;
int contatore=0;
#include <IRremote.h> // use the library
int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;

void setup()
{
pinMode(3,INPUT);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
Serial.begin(9600); // for serial monitor output
irrecv.enableIRIn(); // Start the receiver
}
void loop()
{
motore();
telecomando();

}
void motore()
{
if (contatore <= 0 )
{
finecorsa=digitalRead(3);
if (finecorsa==HIGH)
{
for (int i=1; i <= ciclo; i++)
{
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
}
contatore=contatore+1;
}

else
{
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
}
}
}

void telecomando()
{
if (irrecv.decode(&results)) // have we received an IR signal?
{
Serial.println(results.value, HEX); // display it on serial monitor in hexadecimal
irrecv.resume();// receive the next value
}
if ( results.value == 0xFFA05F)
{
for (int i=1; i <= ciclo; i++)
{
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
}
}
if ( results.value == 0xFF00FF)
{
for (int i=1; i <= ciclo; i++)
{
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
}
}
}

Innanzitutto divresti spiegarci due cosette.
Cosa dovrebbe fare questo circuito.
Che tipo di motore passo passo stai usando (non sono tutti uguali)
Usi un driver per il motore ?

Arduino ?
Standalone ?
Frequenza del chip ?

Sono tutti dati che servono ad ipotizzare un possibile problema.

ciao...
allora sto usando un driver che e....l297 dne con arduino uno.
voglio realizzare una torre di raffreddamento e il motore passo passo bipolare recurato da una stampante deve aprire delle tapparelle.
il ciclo e questo:
-se nel ciclo precedende non si e concluso ( saltato uno stepp ,mancata corrente..) esegue una rotazione antioraria fino ad impegnare il fine corsa e si arresta
-motore in posizione 0 l finecorsa impegnato esegue 40 stepp in senso orario e si arresta
-manca ancora la parte di chiusura che la sto facendo ma mi sono imbattuto in questo problema..
-telecomando per apertura e chiusura tapparelle manualmente.

funziona pero dopo circa 10-15 pressioni quindi venti cicli impazzisce e non esegue piu il ciclo for e va in rotazione costante.