Programación y función PulseIN

Buenos días a todos!... Es la primera vez que escribo en el foro... y la razón es que tengo un problema en el código de mi proyecto, y no logro dar con la solución. En principio, es bastante sencillo:

Con un sensor IR, detecto los cambios de estado (LOW y HIGH) y sus duraciones, según colores Blanco y Negro de un disco q gira.
Si detecta q la duración de los pulsos es más grande que 0 (porque esta girando) o que la duración es 0, pero que el color es Negro (HIGH), la orden al servo es que conserve su posicion 5 grados.
Pero, si la duración es 0, pero el estado es LOW, por lo tanto color Blanco, quiero q se mueva 90 grados.

Hasta acá, mi código funciona comparando la duración de los pulsos con la función, pulse in.
El problema aparece, cuando en el segundo if statement del código (el mismo que hace q el servo se mueva a 90 grados x deteccion de color Blanco), le agrego la orden para mover un motor paso a paso (para que gire continuamente) u otro servo. El programa comienza a fallar, y las detecciones del sensor no surten el efecto ¨programado¨.

Alguna ayuda o pista de qué me puede estar pasando? Desde ya muchas gracias

Dejo mi código:

#include <Servo.h>

Servo servo;

const int pos1 = 5;   //Posicion del servo sin actuar
const int pos2 = 90; //Posicion del servo para correccion

const int Pin_sensor = 2;

int motorPin1 = 8;
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
int delayTime = 5; // Delay que determina la velocidad de giro

unsigned long duration;

int state = HIGH;
int reading;
int previous = LOW;

void setup() {
 pinMode(Pin_sensor, INPUT);
 servo.attach(6);
 servo.write(pos1);
 pinMode(motorPin1, OUTPUT); // Configuración delos PIN-es como salida digital
 pinMode(motorPin2, OUTPUT);
 pinMode(motorPin3, OUTPUT);
 pinMode(motorPin4, OUTPUT);
 Serial.begin(9600);
}

void loop() {
 duration = pulseInLong(Pin_sensor, LOW);
 reading = digitalRead(Pin_sensor);
 //Serial.println(duration);

 if (reading == HIGH && previous == LOW && duration > 0)

 {
   servo.write(pos1);
   delay(10);
   //Serial.println("Negro");

 }

 if (reading == LOW && previous == LOW && duration == 0)
 {
   servo.write(pos2);
   delay (10);
   digitalWrite(motorPin1, HIGH); // Los pines se activan en secuencia
   digitalWrite(motorPin2, LOW);
   digitalWrite(motorPin3, LOW);
   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, HIGH);
   digitalWrite(motorPin4, LOW);
   delay(delayTime);
   digitalWrite(motorPin1, LOW);
   digitalWrite(motorPin2, LOW);
   digitalWrite(motorPin3, LOW);
   digitalWrite(motorPin4, HIGH);
   delay(delayTime);

   //Serial.println("Blanco");
 }

 previous = reading;

}