2011-12-16 13 views
5

私はクロックを構築しています。私は時計にイーサネットケーブルを差し込んで時計を設定したい。ほとんどの場合、時計はインターネットに接続されません。イーサネットケーブルがない場合、イーサネットは60秒間ブロックを開始します

私はArduinoボードとイーサネットshieldを使用して、タイムサーバーに接続して時刻を読み取ることができます(例>イーサネットのUdpNtpClientサンプルファイルを参照してください)。

シールドがインターネットに接続されていない場合、イーサネットシールドを設定するには、Ethernet.begin()コールブロックが6 秒になるという問題があります。時計に時間を伝え、イーサネットケーブルが接続されているかどうかを定期的にチェックし、そうであれば時間を修正します。しかし、ほとんどの場合、このチェックは負の結果になります。そのため、毎回60  秒間はフリーズすることができません。

ケーブルがEthernet.begin()機能よりも速く接続されているかどうかを検出することはできますか? Ethernet.begin()が非ブロックである「マルチスレッド」ソリューションを作成することは可能ですか?

答えて

1

ストックイーサネットライブラリを見ると、ブロックされないようにすることはできません。

私はあなたがusing DHCPだと思いますか?これは、ブロックがどこから来るのかと思われます。静的IPアドレスを使用するときに同じ問題が発生しますか?

Googleでこの問題を網羅した多数のブログ記事があります。これには、イーサネットライブラリのいくつかのフォークが含まれています。

+0

ありがとうございます!私はこれがうまくいくと思います。誰かも、私はGPSユニットから時間を得ることができると言ったので、私もそれを試みるかもしれません。 – rob

+0

GPSは私にとって偉大なアイデアのように聞こえる、私たちはハードウェアを使って時計を最初に同期させる。ちょうどGPS時間が通常のUTC時間のうち数秒です...また、イーサネットケーブルを差し込む必要はありません。時計プロジェクトで幸運を祈る= D –

+0

「この正確な問題をカバーするGoogleで利用可能なブログ投稿」はどこにありますか? – powtac

1

DHCP.hヘッダーファイルには、新しいDHCP接続のクラス定義があります。 次に、デフォルトのタイムアウト値60000msがあることがわかります。

(役立つヒント:初期作業を終えてeclipseを使用してAdruinoプロジェクトを管理する場合は、Ethernet.beginなどの機能でF3を押して、これらのタイプの設定を見つけるためのライブラリ)

タイムアウトがどれくらい長くあるべきかを知るのは難しいです。しかし、1分は本当に長い時間のようです。もちろん、あなたは短くしたくありません。 私は15秒未満には行きません。

/David Cox

関連する問題