私は非常に困惑しており、ここの誰かが正気を提供できることを望んでいました.
イベントで指定された時間にスケジュールされたイベントに応答する、かなり精巧な Arduino スケッチがあります。これを行うために、イベントのキューを調べ、イベント時間をチェックして現在の時間と一致するかどうかを確認するループをセットアップしました。現在の温度をチェックし、タイムスタンプ付きのシリアル メッセージを送信するループ内のコードもあります。
クラッシュする (無音になる) までに 10 ~ 15 分以上実行されていないことに気付きました。私はそれが私のコードの一部であると思ったので、再び機能し始めるまでコメントアウトし始めました... setTime() への呼び出しを削除した後、機能し始めた (14 時間以上実行された) だけであることに驚きました!
setTime() ライブラリ関数を呼び出すと、10 分後にクラッシュが発生する仕組みがわかりません。これは非常に安定したライブラリだと思いました...
どんなアイデアでも大歓迎です!
if(timeStatus() != timeSet) {
if (processSyncMessage()) {;
Serial.println(F("Time sync completed.\n"));
}
else { // Time sync failed for some reason, resend request.
Serial.println(F("Waiting for sync message\n"));
}
}
else { // time is set.
...
次のルーチンを「単純化」して、シリアル メッセージの受信と解析を削除し、問題をさらに切り分けました...
int processSyncMessage() {
// if time sync available from serial port, update time and return true
Serial.println(F("Processing time sync message"));
time_t pctime = 1371118147;
setTime(pctime); // Sync Arduino clock to the time received on the serial port
return true;
}