Reloj binario con adafruit_neopixel

Ahh por cierto, el concepto es totalmente diferente al tuyo.
Yo tomo la hora del reloj que si fuera un RTC estaría en hora pero como no es importante lo fije y adelante.
Muestro la hora, convierto esa hora en nibbles en 2 BCD

Digamos que HH:MM:SS cuando lo presentas son hora:minuto:segundos supongamos 21:44:15

21 son dos digitos decimales que armo y reconstruyo en BCD por eso verás eso de
21/10 = 2
21%10 = 1 (% es módulo, o sea la division de 21 y 10 da un resto, ese resto es el que me interesa.

luego al tener 2 y 1 siguen siendo decimales y los rearmo como

2 << 4 | 1 = 21 pero ahora en BCD o binario si los vieras en bits serína

0010 0001

Bien, eso lo hice con todos pero como son 3 digitos en total son 24 bits y se me ocurrió manejarlos todos como bits y luego decidir que nevio al strip.
Bien... me encontré que si no trabajas correctamente con numeros enteros largos las cuentas dan mal y todo lo que estaba por encima de un entero fallaba
La solución fue esta

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

o sea cada componente debe ser un unsigned long o el compilador los tomará como enteros porque esos números a la derecha son enteros
Otra alternativa es que 20 fuera 20UL y asi.

Si no entiendes me preguntas.

bueno de ese modo logro una conversión en bits almacenados en tmp

Luego un ciclo for que va desde 2^23 hasta 0 barre por todos y cada uno de los bits y si es TRUE hace lo que corresponde y si es FALSE envia el otro strip