/ / Arduino скочи втория часовник - c, arduino

Arduino скочи втори часовник - c, arduino

По принцип пиша проста кодировка за увеличаване на всяка секунда и показвам времето и датата, което ме разочарова и съм сигурен, че ще прегледам нещо очевидно.

Така че аз ще покаже времето, като MJD (с промени Джулиан Дата) HH: MM: SS, но също така даде възможност за кодиран MJD да представлява скок второ събитие, а след това показва правилно скок секунда.

Това е вид работа, но тя изскача от 23:59:59.

Аз в крайна сметка планирам да пренасям обикновен стар AVR, така че наистина не искам да се забъркам с ардуиновите библиотеки.

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);
}

Отговори:

4 за отговор № 1

Мисля, че може да се наложи само една много малка промяна:

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

Проблемът изглежда е, че увеличавате до следващия второ, а след това, ако е 23:59:59 и се появи втора скок, вие увеличавате отново до 60 (прескочите 59).

Това, което вероятно искате да направите, е да преобърнете втория освен ако това е скок втори.


0 за отговор № 2

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

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

Не знам как изглежда най-чистата повторна работа, но само искате да увеличите second веднъж на повторение на цикъл.