2011-12-16 60 views
5

我在建造一個時鐘。我想通過將以太網電纜插入時鐘來設置時鐘。大多數情況下,時鐘不會插入互聯網。如果沒有以太網電纜,則以太網開始塊60秒鐘

我有一個Arduino板和一個以太網shield,可以成功連接到時間服務器並讀取時間(請參閱示例>以太網下的UdpNtpClient示例文件)。

的問題是,配置以太網屏蔽,60  秒Ethernet.begin()呼叫塊如果屏蔽沒有連接到因特網。我希望時鐘知道時間並定期檢查是否有以太網電纜插入,如果有,請更正時間。但是,大多數情況下,這種檢查會產生負面結果,所以我不能讓時鐘每次凍結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,然後花一點時間瀏覽一下庫找到這些類型的設置)

它很難知道超時應該多長時間。但是一分鐘似乎很長時間。當然你不想簡短。 我不會少於15秒。

/David Cox