Arduino прыжок вторые часы - PullRequest
       6

Arduino прыжок вторые часы

2 голосов
/ 07 февраля 2012

В основном я пишу простой фрагмент кода, который увеличивает каждую секунду и отображает время и дату, что меня расстраивает, и я уверен, что пропускаю что-то очевидное.

Так что я будуотображать время в формате MJD (измененная юлианская дата) в формате ЧЧ: ММ: СС, но также разрешать жестко запрограммированный MJD представлять событие високосной секунды, а затем корректно отображать високосную секунду.

Это работает, однакопропускает 23: 59: 59.

Я в конечном итоге планирую портировать на простой старый AVR, так что я действительно не хочу возиться с библиотеками 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);
}

Ответы [ 2 ]

5 голосов
/ 07 февраля 2012

Я думаю, что вам может потребоваться только очень небольшое изменение:

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

Проблема заключается в том, что вы увеличиваете значение до следующей секунды, а затем, если это 23:59:59 и указывается дополнительная секунда, вы снова увеличиваете до 60 (пропуская 59).

То, что вы, вероятно, хотите сделать, - это перевернуть вторую , если это не дополнительная секунда.

0 голосов
/ 07 февраля 2012

Вы увеличиваете вторую слишком много раз, когда идет время: 23: 59: 58.Вы вводите функцию, увеличиваете секунды и , затем , тест second == 59 равен , также true - так что вы снова увеличиваете second:

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

Я не знаю, как будет выглядеть самая чистая переработка, но вы когда-либо захотите увеличивать second один раз за цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...