Hola pabloc58, como me interesó el proyecto esto es lo que he hecho.
Miralo bien yme consultas. COmpilar compila pero obviamente no tengo el strip de 24 leds para probarlo asi que te lo dejo a ti.
#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);
char *byte_to_binary(byte x);
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(20, 42, 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);
Serial.println(byte_to_binary(hour()));
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,255,255,255); // 1
else
strip.setPixelColor(cont,100, 0, 0); // 0
cont++;
}
Serial.println(" ");
strip.show();
}
char *byte_to_binary(byte x)
{
byte x1 = x / 10;
byte x2 = x % 10;
x = x1 << 4 | x2;
static char b[9];
b[0] = '\0';
int z;
for (z = 128; z > 0; z >>= 1) {
strcat(b, ((x & z) == z) ? "1" : "0");
}
//Serial.print(b);
//Serial.println(" ");
return b;
}
Si abres el monitor serie verás como evoluciona la hora.
La puse con la hora fija de modo que podras corroborar como se comporta.
Tal vez haya que dar vuelta los bits para que coincidan con lo tuyo.