reloj binario con leds RGB. (modificar colores)

Buenas, retomo por donde lo dejé en su momento, es decir, con el programa que me proporciono Surbyte;

#include <TimeLib.h>
#include <Adafruit_NeoPixel.h>
#include <string.h>

#define pixel_pin   6 //Pin al que he conectado la tira de leds
#define pixel_count 25// numero de leds usados
Adafruit_NeoPixel strip = Adafruit_NeoPixel (25, 6, NEO_GRB + NEO_KHZ800); //declaracion necesaria no se muy bien porque :s

int time = 1000; //Tiempo para los segundos


#define TIME_HEADER  "T"   // Header tag for serial time sync message
#define TIME_REQUEST  7    // ASCII bell character requests a time sync message 

void hora_to_binario(byte hora, byte min, byte seg);
void digitalClockDisplay();

void setup() {
  Serial.begin(115200);
  while (!Serial) ; // wait until Arduino Serial Monitor opens

  // Ajustar al hora manualmente y luego comentarlo siempre y cuando no se apague el arduino.
  setTime(00, 00, 00, 17, 04, 2018);
 
  if(timeStatus()!= timeSet) 
     Serial.println("Unable to sync Time");
  else
     Serial.println("System time Set");      

  strip.begin();//necesarios para poder comenzar no se muy bien por que.
  strip.show();//muestra la anterior linea.
  strip.setPixelColor(0,255,255,255);//para comenzar con los leds en blanco, primer digito representa el nº del led y las siguientes cifras el color en R G y B
  strip.setPixelColor(1,255,255,255);
  strip.setPixelColor(2,255,255,255);
  strip.setPixelColor(3,255,255,255);
  strip.setPixelColor(5,255,255,255);
  strip.setPixelColor(6,255,255,255);
  strip.setPixelColor(7,255,255,255);
  strip.setPixelColor(9,255,255,255);
  strip.setPixelColor(10,255,255,255);
  strip.setPixelColor(11,255,255,255);
  strip.setPixelColor(12,255,255,255);
  strip.setPixelColor(14,255,255,255);
  strip.setPixelColor(15,255,255,255);
  strip.setPixelColor(16,255,255,255);
  strip.setPixelColor(18,255,255,255);
  strip.setPixelColor(19,255,255,255);
  strip.setPixelColor(20,255,255,255);
  strip.setPixelColor(21,255,255,255);
  strip.setPixelColor(23,255,255,255);
  strip.setPixelColor(24,255,255,255);
  strip.show();
}

void loop() {
  
  if (timeStatus() == timeSet) {
       digitalClockDisplay();
   }
   delay(1000);
}
 
void digitalClockDisplay(){
  // digital clock display of the time
  char buffer[40];
  sprintf(buffer, "%02d:%02d:%02d", hour(), minute(), second());
  Serial.println(buffer); 
  hora_to_binario(hour(), minute(), second());
}



time_t requestSync() {
  Serial.write(TIME_REQUEST);  
  return 0; // the time will be sent later in response to serial mesg
}

void hora_to_binario(byte hora, byte min, byte seg) {
  unsigned long tmp = (unsigned long) (hora/10)<<20UL | 
            (unsigned long) (hora%10)<<16UL | 
            (unsigned long) (min/10)<<12UL | 
            (unsigned long) (min%10)<<8UL | 
            (unsigned long) (seg/10)<<4UL | 
            (unsigned long) (seg%10);
  unsigned long z;
    byte cont = 0;

  for (z = 8388608; z > 0UL; z >>= 1UL) {
        Serial.print(((tmp & z) == z)? '1' : '0');    
        if ((tmp & z) == z) 
          strip.setPixelColor(cont,100,0,0);  // 1              
        else
          strip.setPixelColor(cont,255,255,255);  // 0
        cont++;
        
    }
    Serial.println(" ");
    strip.show();
}

Exactamente la parte del codigo que deseo modificar es el siguiente;

 for (z = 8388608; z > 0UL; z >>= 1UL) {
        Serial.print(((tmp & z) == z)? '1' : '0');    
        if ((tmp & z) == z) 
          strip.setPixelColor(cont,100,0,0);  // 1              
        else
          strip.setPixelColor(cont,255,255,255);  // 0
        cont++;
        
    }

Con esta parte del código Surbyte me configuró para que todos los leds sean rojos, ahora bien, deseo cambiar para que las horas tomen un color, los minutos otro color y los segundos otro color, pero no se si será posible con una simple modificación o habría que realizar grandes cambios.

PD: como dije en mis posts anteriores soy totalmente novato y aunque se identificar las partes del programa soy incapaz de hacer una modificación sin que el programa deje de funcionar por completo u.u"

Gracias de antemano a cualquier ayuda o sugerencia!

Jajaja va a salir a la venta?

@Pablosc58 esta vez te va a costar un poco mas porque antes estabas contra reloj por tu entrega si mal recuerdo.

El control de los colores esta dado por esto

if ((tmp & z) == z que básicamente pregunta si es 1 o 0 en cada posicion. Por eso luce tan complejo.

Si quieres saber si es hora min seg hablamos de posiciones de los bits, asi que es mas fácil. Tu hiciste un gráfico en el post anterior, ahora dime como crees que sería?

@surbyte lo que me gustaría es limitar a que el los primeros 16 bits que corresponden a los segundos sean rojos los 16 siguientes azul y los 16 siguientes verdes por ejemplo, según mi análisis creo que debería modificar el valor de "z" y crear dos variables mas para comprarla con "tmp" y que analice el valor del bit si es 0 o 1 pero no se como realizarlo.

He estado leyendo la explicación del funcionamiento de como configuraste el color que me distes en su momento, y aunque lo entiendo no se como hacer para separar los bits y configurar los colores.

Gracias de antemano y siento ser tan torpe.

PD: decir que el montaje ya esta realizado, por lo que el orden en el que se encuentran los leds no puedo modificarlos, dejo aqui un enlace al antiguo post. Decir tambien que es posible que no vea la respuesta hasta el lunes ya que no trabajo ya hasta ese dia que vuelvo a tener el arduino y el reloj a mano por si me demoro en responder es por esta razón.

https://forum.arduino.cc/index.php?topic=541360.15