2011-12-16 12 views
5

Sto costruendo un orologio. Voglio impostare l'orologio collegando un cavo Ethernet all'orologio. La maggior parte delle volte l'orologio non viene collegato a Internet.Ethernet avvia blocchi per 60 secondi se non c'è il cavo Ethernet

Ho una scheda Arduino e una Ethernet shield che può connettersi con successo a un server orario e leggere l'ora (consultare il file di esempio UdpNtpClient in Esempi> Ethernet).

Il problema è che per configurare la protezione Ethernet, i blocchi di chiamata Ethernet.begin() per 60   se lo schermo non è connesso a Internet. Vorrei che l'orologio indicasse l'ora e controllasse periodicamente se fosse collegato un cavo Ethernet e, in tal caso, apportare correzioni al momento. Il più delle volte questo controllo avrà un risultato negativo, tuttavia, quindi non posso avere il blocco dell'orologio per 60   sec ogni volta.

È possibile rilevare se il cavo è collegato in modo più rapido rispetto alla funzione Ethernet.begin()? È possibile scrivere una soluzione "multithreading", dove Ethernet.begin() non è bloccante?

risposta

1

Guardando la libreria Ethernet di serie, non è possibile impedirne il blocco.

Suppongo che tu sia using DHCP? Questo sembra essere da dove proviene il blocco. Hai lo stesso problema quando usi un indirizzo IP statico?

C'è un numero di post di blog disponibili su Google che copre questo problema esatto, incluse alcune biforcazioni della libreria Ethernet che consentono di farlo in modo non bloccante.

+0

Grazie! Penso che questo funzionerà. Qualcuno ha anche detto che posso ottenere il tempo da un'unità GPS, quindi potrei provarlo anche io. – rob

+0

Il GPS suona come una grande idea per me, lo facciamo con il nostro hardware per sincronizzare gli orologi all'inizio. Ricorda che il tempo GPS è un paio di secondi al di fuori del normale orario UTC ... Inoltre, non è necessario collegare il cavo Ethernet. Buona fortuna con il tuo progetto di orologio = D –

+0

Dove trovo quei "post di blog disponibili su Google che coprono questo esatto problema"? – powtac

1

Nel file di intestazione DHCP.h è possibile trovare la definizione di classe per una nuova connessione DHCP. Quindi è possibile vedere che esiste un valore di timeout predefinito di 60000 ms.

(suggerimento utile: se superi lo sforzo iniziale e inizia a utilizzare eclipse per gestire i tuoi progetti adruino, è davvero grandioso perché puoi semplicemente premere F3 su funzioni come Ethernet.begin e fare un po 'di viaggio le librerie per trovare questi tipi di impostazioni)

È difficile sapere per quanto tempo dovrebbe essere il timeout. Ma un minuto sembra davvero molto tempo. Certo che non vuoi andare a corto. Non andrei meno di 15 secondi.

/David Cox

Problemi correlati