Interrupciones y Arduino EthernetShield

Necesito un poco de orientación en un proyecto en el que estoy trabajando.

Básicamente, usaré dos arduinos:

El primero tendrá:

El segundo tendrá

Como probablemente puedas imaginar, lo que quiero hacer es leer algunos datos del sensor en el segundo arduino, transmitirlos por RF, recibirlos y enviarlos a un servidor en la web.

Tengo algunos problemas para decidir qué enfoque tomar para enviar a través de la Web y recibir los datos a través de RF. Tendré que escuchar constantemente al receptor y, si recibo un mensaje, enviarlo. Pensé en codificar una lista vinculada y "almacenar" los valores de los datos detectados, y luego enviar una solicitud http para cada objeto en la lista hasta que esté vacío. Pero, ¿qué sucede si recibo otra lectura del sensor mientras envío el mensaje? ¿Cuál sería la mejor manera de enviar los datos a través de arduino Ethernet Shield y aún así poder recibir los mensajes del receptor de RF?

Pensé en las interrupciones, pero no tengo idea de cómo se comportaría al leer la respuesta de la solicitud HTML, ya que la mayoría de los ejemplos usan millis() y funciones de retraso.

Respuestas (1)

Las interrupciones en el escudo de ethernet no son compatibles con la biblioteca estándar. (No creo que nadie haya conseguido que funcione). Tenga en cuenta que el RF Link es un receptor y se conectará al RX de la serie. La biblioteca serial de Arduino recopilará esto usando interrupciones (por byte) en el búfer serial, para que su aplicación lo lea. Entonces, siempre que los datos en serie no excedan el búfer rx entre lecturas, su ciclo principal simplemente necesita dar servicio a ambos objetos... inByte = Serial.read(); construyendo su cadena, luego, cuando lo desee, envíe client.print lo que desee a su destino. Ninguna de estas lecturas o impresiones está bloqueando.

Mire el ejemplo ..\libraries\Ethernet\examples\TelnetClient\TelnetClient.ino

Donde puede agregar el encuadre de los datos escuchados en serie y luego poner los resultados deseados en un wput. como se hizo en el ejemplo ..\libraries\Ethernet\examples\PachubeClientString\PachubeClientString.ino