tak jsem se konečně dostal k datum, co posílá elektroměr EM357. Dlouho jsem se trápil, než jsem zjistil, že data jsou typu float.
A tím jsem zjistil něco co nechápu...
Jak vlastně funguje převod unsigned long to float? Co se vlastně s čísly děje? A to samé i opačně.
Umí to někdo vysvětlit, jak to tam konverze dělá?
Našel jsem toto a je to SUPER, funguje ale stejně nechápu :
Kód: Vybrat vše
//
// Test prevodu unsigned long to float a zpatky
//
union equiv { float x; unsigned long y; }
equiv ;
unsigned long DataA, DataB;
float vysledek;
//===========================================================
void setup() {
Serial.begin(19200);
DataA = 0x437040A5; // = 240.25
DataB = 0x3F800000; // = 1.00
}
//===========================================================
void loop() {
//................ unsigned long to float ...................
equiv.y = DataA; vysledek = equiv.x;
Serial.println(vysledek,6);
delay(1000);
equiv.y = DataB; vysledek = equiv.x;
Serial.println(vysledek,6);
delay(1000);
//................ float to unsigned long ...................
float Num1 = 240.252517;
unsigned long UnLA = (*(unsigned long*)&Num1);
Serial.println(UnLA, HEX);
delay(1000);
float Num2 = 1.00;
unsigned long UnLB = (*(unsigned long*)&Num2);
Serial.println(UnLB, HEX);
delay(5000);
}