0

私はこのコードブロックを書きました:

void NTP::setTime() {
    connWithNTP();
    if(!timeNTPReadyToSet) {
        Serial.println("Getting time from RTC");
        timeFromRTC();
        if (year == 2000) {
            while(dhcpTest == false && timeNTPReadyToSet == false) {
                Serial.print("Kolaei apo to DHCP");
                startEthernetAndUdp();
                connWithNTP();
                timeFromNTP();
            }
        }
    }
    else {
        Serial.print("Getting time from NTP");
        timeFromNTP();
    }
    serialPrinting();
}

すべてがOKのときに私がしたことによると(インターネット接続はOKで、NTPサーバーは正常に動作しています)。コードはelse printNTP サーバーから時刻を取得します (これが発生します)。私の問題は、serialPrinting が実行されないことです。

この関数は、シリアル モニタに時刻を出力するだけです。関数 timeFromNTP と timeFromRTC は、カレンダーと時刻を含む変数を設定するだけです。

シリアル モニタが NTP サーバーからの取得時刻を表示した後、何も表示しません。この setTime 関数をループで設定したので、最初から開始します。

serialPrinting() を実行することは可能ですか? setTime() を呼び出したときにこの関数がいずれかの方法で実行される場合、serialPrinting が心配です。

私はこれを得る:

0

0

0

4 番目の NTPServer が動作中

NTP から時刻を取得する

0

0

0

0

4 番目の NTPServer が動作中

NTP から時刻を取得する

ゼロと「4 番目の NTPServer の動作」は、connWithNTP に由来します。

4

1 に答える 1

0

まあ、他の関数のいずれかがループに陥ったり、setTime を再度呼び出してスタックした場合を除いて、serialPrinting を実行しない方法はありませんでした。ここからは見えないいくつかのサブ関数があり、安全上の理由から setTime を呼び出しています (現在は必要ありません)。だからループがありました。serialPrinting をスキップする可能性のあるループまたは内部エラーのないこのコードには方法がありません。

于 2013-02-22T12:44:13.153 に答える