/**
* Author: giltesa
* WebSite: http://giltesa.com
* License: CC BY-NC-SA 3.0
*
* Esta estructura, de tipo union y no struct, permite guardar un dato del tipo que queramos, y hacerlo accesible de dos formas distintas.
* - La primera de ellas es accediendo al dato directamente como una variable mas.
* - La segunda forma es accediendo a su memoria, en el caso del float este tiene un tamaño de 4 bytes, eso hace que podamos acceder a sus 4 bytes por separado.
* Esto aparentemente no tiene ninguna utilidad, salvo que queramos transmitirlo entre dos Arduinos inalambricamente ya que para ello han de ser enviados los bytes uno a uno. Despues se recogen uno a uno y se restauran en otra estructura union:
*/
union miDato{
float fval;
byte b[4]; // Array de bytes de tamaño igual al tamaño de la primera variable: int = 2 bytes, float = 4 bytes
} origen, destino; // Se crean dos estructuras Union, cada una es independiente de la otra y guardan distintos datos.
void setup()
{
Serial.begin(9600);
delay(1000);
// A la estructura de origen se le da un valor float, una temperatura por ejemplo.
origen.fval = -103.36;
// Se imprime para comprobar que se ha guardado bien:
Serial.print("Origen= ");
Serial.print(origen.fval);
// Ahora se copia byte a byte la estructura de origen en la estructura de destino:
for(int i=0 ; i < sizeof(origen.fval) ; i++)
destino.b[i] = origen.b[i];
// Y se imprime el float de la estructura de destino, es el mismo dato que el de origen!
Serial.print("\nDestino= ");
Serial.print(destino.fval);
}
void loop()
{
}