/ / Arduino salto segundo reloj - c, arduino

Arduino salto segundo reloj - c, arduino

Básicamente estoy escribiendo un código simple para incrementar cada segundo y mostrar la hora y la fecha, lo que me frustra, y estoy seguro de que estoy pasando por alto algo obvio.

Entonces mostraré la hora como MJD (fecha juliana modificada) HH: MM: SS pero también permitiré que un MJD codificado represente un segundo evento intercalar y luego muestre correctamente el segundo intercalar.

Funciona, pero salta a las 23:59:59.

Eventualmente planeo portar al viejo AVR, así que no quiero meterme con las librerías Arduino.

int second = 0, minute = 0, hour = 0;
long mjd = 55000;
long leap = 55964;

void setup()
{
Serial.begin(9600);
Serial.print("MDJ ");
Serial.print(mjd);
Serial.print(" ");
Serial.print(hour);
Serial.print(":");
Serial.print(minute);
Serial.print(":");
Serial.println(second);

}

void loop()
{
second++;
if (mjd == leap && hour == 23 && minute == 59 && second == 59) {
second++;
} else {
if (second > 59) {
minute++;
second = 0; // reset seconds to zero
}
}
if (minute > 59) {
hour++;
minute = 0;
}

if (hour > 23) {
mjd++;
hour = 0;
}

Serial.print("MDJ ");
Serial.print(mjd);
Serial.print(" ");
if (hour < 10)
Serial.print("0");
Serial.print(hour);
Serial.print(":");
if (minute < 10)
Serial.print("0");
Serial.print(minute);
Serial.print(":");
if (second < 10)
Serial.print("0");
Serial.println(second);
delay(1000);
}

Respuestas

4 para la respuesta № 1

Creo que tal vez solo necesites un pequeño cambio:

if (mjd == leap && hour == 23 && minute == 59 && second == 60) {
// allow 23:59:60
} else {
...

El problema parece ser que aumenta a la siguiente segundo, y luego si son las 23:59:59 y se indica un segundo intercalar, se incrementa nuevamente a 60 (omitiendo 59).

Lo que probablemente quieras hacer es pasar el segundo a no ser que es un segundo salto.


0 para la respuesta № 2

Incrementa la segunda demasiadas veces cuando llega el momento: 23: 59: 58. Ingresa la función, incrementa los segundos y entonces el second == 59 prueba es además cierto - entonces usted incrementa second de nuevo:

second++;
if (mjd == leap && hour == 23 && minute == 59 && second == 59) {
second++;

No sé cómo se vería el trabajo más limpio, pero solo quieres aumentar second una vez por iteración de bucle