2011-12-16 14 views
5

Estoy construyendo un reloj. Quiero configurar el reloj conectando un cable Ethernet al reloj. La mayoría de las veces el reloj no se conecta a Internet.Ethernet comienza bloques durante 60 segundos si no hay cable Ethernet

Tengo una placa Arduino y una Ethernet shield que pueden conectarse con éxito a un servidor horario y leer la hora (Consulte el archivo de ejemplo UdpNtpClient en Ejemplos> Ethernet).

El problema es que para configurar el blindaje de Ethernet, el Ethernet.begin() llama bloques para 60   segundos si el blindaje no está conectado a Internet. Me gustaría que el reloj indique la hora y compruebe periódicamente si tiene un cable Ethernet enchufado, y si es así, haga las correcciones oportunas. La mayoría de las veces, este control tendrá un resultado negativo, por lo que no puedo congelar el reloj durante 60   segundos cada vez.

¿Es posible detectar si el cable está conectado de una manera más rápida que la función Ethernet.begin()? ¿Es posible escribir una solución de "multihilo", donde Ethernet.begin() es no-bloqueante?

Respuesta

1

Al mirar la biblioteca de stock de Ethernet, no es posible evitar que bloquee.

Supongo que eres using DHCP? Esto parece ser de donde viene el bloqueo. ¿Tiene el mismo problema cuando usa una dirección IP estática?

Hay una cantidad de publicaciones de blog disponibles en Google que cubren este problema exacto, incluidas algunas imágenes de la biblioteca de Ethernet que le permiten hacer esto sin bloqueos.

+0

¡Gracias! Creo que esto funcionará Alguien también dijo que puedo obtener el tiempo de una unidad GPS, así que puedo intentarlo también. – rob

+0

El GPS suena como una gran idea para mí, lo hacemos con nuestro hardware para sincronizar los relojes al principio. Solo recuerde que el tiempo del GPS es un par de segundos fuera de la hora UTC normal ... Además, no es necesario enchufar el cable de ethernet. Buena suerte con su proyecto de reloj = D –

+0

¿Dónde encuentro esas "publicaciones de blog disponibles en Google que cubren este problema exacto"? – powtac

1

En el archivo de encabezado DHCP.h, puede encontrar la definición de clase para una nueva conexión DHCP. Luego puede ver que hay un valor de tiempo de espera predeterminado de 60000ms.

(sugerencia útil: si supera el esfuerzo inicial y comienza a usar eclipse para administrar sus proyectos de adruino, es realmente genial porque puede presionar F3 en funciones como Ethernet.begin y hacer un poco de viaje a través de las bibliotecas para encontrar este tipo de configuraciones)

Es difícil saber cuánto tiempo debe durar el tiempo de espera. Pero un minuto parece mucho tiempo. Por supuesto que no quieres ir al corto. No pasaría menos de 15 segundos.

/David Cox

Cuestiones relacionadas