[SOLUCIONADO] Puntos parpadeantes en reloj Pantallas FT800

He realizado una búsqueda sin resultado.
Es un tema de programación en software.

Y mi pregunta es la siguiente;
Si tengo un reloj tipo DST1307 que muestra en un LCD por ejemplo la hora ;

13**:14:**02

Como se hace para que parpadee los signos**:**; cada segundo según el ejemplo?
Le estoy dando vueltas y no lo consigo, hay alguno ejemplo?

Saludos!

interactua con un millis() de digamos 500mseg para que en un momento muestre la hora con : y en el siguiente sin :
Algo asi

char buffer[20]; // supongamos que tienes un buffer de 20 caracteres.
bool estado = false; // empiezo con falso para que muestre con : la primera vez
unsigned long start = 0;

  if (millis()>start) {
     estado = !estado;
     if (estado) {
         sprintf(buffer,"%02d:%02d:%02d", hora, min, seg);
    else 
         sprintf(buffer,"%02d %02d %02d", hora, min, seg); 
      lcd.print(buffer);
      start = millis() + 500UL; // cargo proximo cambio de 0.5 seg
}

mira si esto te sirve

 DateTime now = RTC.now();
        u8g.setPrintPos(2,62);

        if (now.hour()<10)
        {
          u8g.print('0');
        } 
        u8g.print(now.hour(), DEC);


        if (now.second() & 0x01)
        {
          u8g.print(':');
          u8g.setPrintPos(27,62);
          u8g.print(':');
        }
        u8g.setPrintPos(17,62);

xxxxxxxxxxxxxxxx

aunque lo tenga yo, el mérito es de Juan (Elekas de FT)

Sera cosas de brujas, pero con vuestros ejemplos los dos puntos no parpadean cada segundo, se quedan fijos. El reloj va bien usando este código;

char buffer[20]; // supongamos que tienes un buffer de 20 caracteres.
bool estado = false; // empiezo con falso para que muestre con : la primera vez
unsigned long start = 0;

  if (millis()>start) {
     estado = !estado;   
     if (estado) {
           sprintf(buffer,"%02d:%02d:%02d", gps.time.hour(), gps.time.minute(), gps.time.second() );
  //   start = millis() + 500UL; // cargo proximo cambio de 0.5 seg
   //      GD.cmd_text(351,40, 25, 0, buffer);
     }
    else {
         sprintf(buffer,"%02d %02d %02d", gps.time.hour(), gps.time.minute(), gps.time.second() );
      GD.cmd_text(360,60, 25, 0, buffer);
      start = millis() + 500UL; // cargo proximo cambio de 0.5 seg
     }   
  }

ahh bueno parpadear por segundo quieres?
como defines tu parpadeo. Juega con los tiempos y lo tienes resuelto.

ufffff, creo que no va por hay el problema... para solucionar mi tema.

Hoy creo estar iluminado y he pensado jugar con los números pares e impares.... en cada segundo, aparte que luego tenga que representar la visualización en una pantalla FT8xx, que no son como las alfanuméricas y tienen lo suyo...

Voy a intentarlo pues.

En estas pantallas hay que programar de otra forma. Para conseguir el parpadeo se deben dibujar sobre los dos puntos base, dos puntos con el color del fondo.

 float SEC= second;
  float Divisor = SEC/2;
  GD.printNfloat(100, 150, Divisor, 1, 31);
    
  int INTDivisor = Divisor;

  if((Divisor*10 - INTDivisor*10)==0){  //par
    GD.SaveContext();
    GD.Begin(POINTS);      GD.ColorRGB(255,255,0);
    GD.PointSize(16*20);  GD.Vertex2f(400*16, 200*16);
                           GD.Vertex2f(400*16, 280*16);}
 
  if((Divisor*10 - INTDivisor*10)>0){  //impar
    GD.ColorRGB(0,0,20);
    GD.PointSize(16*20);  GD.Vertex2f(400*16, 200*16);
                          GD.Vertex2f(400*16, 280*16);}
    GD.RestoreContext();

PD: aléjate del DS1307 es un reloj bastante rudimentario susceptible a perder segundos al final del día. El DS3231 es mucho mas robusto, si le instalas una batería recargable LIR2032, no tendrás que modificarle nada al circuito de alimentación.

Bueno ya esta solucionado.
Gracias TFTLCDCyg

Al final no he usado el comando GD.Begin(POINTS) sino que he usado GD.cmd_text con el carácter de los dos puntos y el código ha quedado de esta forma;

  // PARA PARPADEAR 2 PUNTOS
  #define WHITE   0xFFFFFF
  #define GRAY    0x808080

  float SEC= gps.time.second();
  float Divisor = SEC/2;
  int INTDivisor = Divisor;

  if((Divisor*10 - INTDivisor*10)==0)
{  //par
    GD.ColorRGB(WHITE);
    GD.cmd_text(400, 140, 28, 0, ":");
 }
 
  if((Divisor*10 - INTDivisor*10)>0)
{  //impar
    GD.ColorRGB(GRAY);
    GD.cmd_text(400, 140, 28, 0, ":");
  }