Control led RGB sin ayuda de analogwrite (PWM)

Hola, me presento, soy Daniel, nuevo en el foro…
Luego de dos semanas leyendo y practicando un poco sobre la placa de arduino, desidi fabricar un pequeño robot de 3 servos, modulo ultrasónico, receptor de IR y ahora un led RGB, e aquí mi problema…
De lo que puedo deducir entre todo lo que leí; tengo un conflicto en librerías y sus timers, por lo que me tire a programar la variación del led RGB sin la ayuda del PWM como normalmente se haría… Estoy usando “Micros” para establecer la frecuencia y variación de colores, la idea es que suba un color, luego baje otro y así sucesivamente hasta rotar los tres… Pero, el funcionamiento va bien hasta la tercera vuelta y luego se queda colgado entre colores rojo y azul y no varia mas!..

Separo el código del led y lo adjunto para que por favor me hechen una mano… Perdonen si mi código no es el mejor o tiene muchos errores o malos manejos, estoy abierto a sugerencias y con muchas ganas de aprender. Mil gracias, saludos.

unsigned long actualMicros;
byte ledr = 9;
byte ledg = 10;
byte ledb = 11;
int LEDEstado = LOW;  //para cambio de estado (on/off) de pines asociados
long cambioMicros = 0; //para medir cambios de micros en bloque de 2 milisegundos
long cambioMicrosP = 0; //para bloque mayor de micros
int highR = 0;   //variable para ciclo alto
int lowR = 0;  //variable para ciclo bajo
int lapso = 10000; //bloque mayor de millis, para aumento de "highR" 
int inc = 4;  //incremento de "highR" por ciclo
byte checkpoint = 0; //marcación de puntos altos y bajos del ciclo de trabajo
byte LED; //variable para alternar los 3 pines de salida



void setup()
{
  Serial.begin(9600); //inicio puerto serie

  LED = 10; //se prepara para empezar por gestionar el pin 10 (ledg),  color verde
  pinMode(ledr, OUTPUT); //se inicia pin 9 (rojo) como salida
  pinMode(ledg, OUTPUT);  //se inicia pin 10 (verde) como salida
  pinMode(ledb, OUTPUT);  //se inicia pin 11 (azul) como salida
  digitalWrite(ledr, HIGH);   //inicio con color rojo encendido
}

/*PRIMER BLOQUE DE CODIGO: Maneja la frecuencia(subida y bajada de flancos para la simulacion del PWM a 500Hz, periodo de 2000 microsegundos)*/

void loop()
{

  actualMicros = micros();



  if (LEDEstado == LOW)  //entra al bloque si LEDEstado es LOW
  {
    lowR = (2000 - highR);  //se establece la duracion del ciclo bajo de trabajo
    if (actualMicros - cambioMicros >= lowR) entra al bloque si micros supero o igualo el valor de lowR
    {
      LEDEstado = HIGH; //asigna alto a la variable, se usara despues para escribir en el pin de salida
      cambioMicros = actualMicros;  //se iguala "cambio Micros" con micros
    }
  }
  else
  {
    if (actualMicros - cambioMicros >= highR)  //entra al bloque si micros supero o igualo el valor de  highR
    {
      LEDEstado = LOW;  //asigna bajo a la variable, se usara despues
      cambioMicros = actualMicros;  //se iguala "cambio Micros" con micros
    }
  }
  digitalWrite (LED, LEDEstado);  se escribe el valor de LEDEstado en el pin asignado según LED




/*SEGUNDO BLOQUE DEL PROGRAMA: este establece mediante micros, el lapso de tiempo que estará activa la intensidad del color del led según se estableció en el PRIMER BLOQUE DEL PROGRAMA y hará un incremento en el ciclo de trabajo para variar la intensidad, además de cambiar de un color a otro luego de alcanzar los limites asignados*/

  if (actualMicros - cambioMicrosP >= lapso)
  {
    highR = highR + inc;  // incrementa el tiempo del pulso positivo 
    if (highR >= 2000 || highR <= 0)
    {
      checkpoint = checkpoint + 1;  //si highR llego al max o min suma1
      //Serial.println(checkpoint);
      switch (checkpoint)  //maquina de estados, maneja los colores del led y su iluminación 
      {
        case 1:
          digitalWrite(ledg, HIGH);
          LED = LED - 1; //led #9 ROJO BAJA
          inc = -inc;
          break;

        case 2:
          digitalWrite(ledr, LOW);

          LED = LED + 2; //led #11 AZUL SUBE
          inc = -inc;
          break;

        case 3:
          digitalWrite(ledb, HIGH);

          LED = LED - 1; //led #10 VERDE BAJA
          inc = -inc;
          break;

        case 4:
          digitalWrite(ledg, LOW);

          LED = LED - 1; //led #9 ROJO SUBE
          inc = -inc;
          break;

        case 5:
          digitalWrite(ledr, HIGH);

          LED = LED + 2; //led #11 AZUL BAJA
          inc = -inc;
          checkpoint = 0;
          break;
      }
    }

    cambioMicrosP = actualMicros;

  }

}