El ejemplo de ayer estaba bien pero tenia el problema de que si queríamos enviar varios datos teníamos que enviar varias estructuras Union. Para arreglar eso que mejor que hacer que el tipo de dato de la estructura Union sea una estructura Struct. Así se puede acceder byte a byte al Struct y enviarlo por Serial, bluetooth, RF, etc. para que el otro Arduino la reciba del tirón!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
/** * Author: giltesa * WebSite: http://giltesa.com * License: CC BY-NC-SA 3.0 */ struct Sensores{ float temperatura; float humedad; int luz; }; union Datos{ Sensores dato; byte b[sizeof(Sensores)]; } origen, destino; void setup() { Serial.begin(9600); delay(1000); origen.dato.temperatura = -103.38; origen.dato.humedad = 84.06; origen.dato.luz = 124; Serial.print("OrigenT= "); Serial.print(origen.dato.temperatura); Serial.print("\nOrigenH= "); Serial.print(origen.dato.humedad); Serial.print("\nOrigenL= "); Serial.print(origen.dato.luz); for(int i=0 ; i < sizeof(origen.dato) ; i++) destino.b[i] = origen.b[i]; Serial.print("\n\nDestinoT= "); Serial.print(destino.dato.temperatura); Serial.print("\nDestinoH= "); Serial.print(destino.dato.humedad); Serial.print("\nDestinoL= "); Serial.print(destino.dato.luz); } void loop() { } |
Perdona Alberto mi supina ignorancia, pero precisamente estoy montando una estación metereologica para mi mujer (como excusa para trastear con su permiso) y estoy encallado con la transmisión remota a partir de modulo RF 433 de temperatura+humedad+sensor lluvia.
Tu solución para enviar los datos me parece genial, pero no acabo de ver como funciona el bucle for de tu ejemplo (sin llaves?) y se me hace dificil «ligarlo» con el codigopara transmitir, y por supuesto recibir en la base.
Me interesa ademas al recibir los datos no solo mostrarlos en el LCD, sino cargarlos en variables para poder procesarlos, sobre todo la tem. exterior que quiero trabajarla con la presión admosferica (el sensor lo tengo en la base ya) para hacer una minima previsión del tiempo futuro, que le va a encantar a mi chica !!! (aunque no acierte siempre, jajaja). Perdona el ladrillo y mil gracias adelantadas.
Hola Ricardo,
El bucle for cuando no tiene llaves lo que hace es iterar la siguiente linea que tiene debajo, solo la primera, ese for seria lo mismo que este otro:
for(int i=0 ; i < sizeof(origen.dato) ; i++) { destino.b[i] = origen.b[i]; } Y lo que hace en este ejemplo es copiar los datos de una estructura a otra. Tu en realidad lo que tendrás que hacer es enviar una estructura desde un modulo y recibirla desde el otro. Si por ejemplo tu estructura tiene un tamaño de 20 (eso te lo indica: sizeof(origen.dato)) entonces tendrás que imprimir/enviar esos 20 bytes uno tras otro al modulo RF para que lo envié. Luego el otro tendrá que recogerlos y restaurarlos en otra estructura. Es algo complejo, te recomiendo que pruebes primero este código y luego cuando veas como funciona lo puedes ir complicando añadiendo el código para la transmisión de datos. Saludos.
Gracias, alberto, ahora lo tengo claro,es lo que pensaba, pero llevo ya tanto tiempo dandole vueltas y hechando horas a esta funcionalidad que añadi a ultima hora a mi proyecto (la base ya está resuelta y montada, a falta de añadirla) que no quería meterme a fondo sin una minima seguridad… Transmitir OK , ya veremos como decodifico y meto en variables float & int lo recibido, preveo que basicamente es la misma idea de codigo . Ya te molestare cuando llegue ahi si me encallo, ya que eres tan amable.
Un saludo y felicidades por tu magnifico blog