• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Zapis odczyt EEprom double, float
#1
Witajcie.

Znalazłem taką funkcję
Kod:
//======================== EEPROM
void EEPROMWritelong(int address, long value)
     {
     //Decomposition from a long to 4 bytes by using bitshift.
     //One = Most significant -> Four = Least significant byte
     byte four  = (value & 0xFF);
     byte three = ((value >> 8) & 0xFF);
     byte two   = ((value >> 16) & 0xFF);
     byte one   = ((value >> 24) & 0xFF);

     //Write the 4 bytes into the eeprom memory.
     EEPROM.write(address    , four);
     EEPROM.write(address + 1, three);
     EEPROM.write(address + 2, two);
     EEPROM.write(address + 3, one);
     }

//This function will return a 4 byte (32bit) long from the eeprom
//at the specified address to address + 3.
long EEPROMReadlong(long address)
     {
     //Read the 4 bytes from the eeprom memory.
     long four = EEPROM.read(address);
     long three = EEPROM.read(address + 1);
     long two = EEPROM.read(address + 2);
     long one = EEPROM.read(address + 3);

     //Return the recomposed long by using bitshift.
     return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF);
     }

Problem w tym, że nie mogę tymi funkcjami prawidłowo zapisać danych współrzędnych GPSa

Mam zmienne pozycja_LAT i pozycja_LON typu float oraz flat i flon - dane z GPSu
dołożyłem dwie zmienne pomocnicze llat i llon typu long i teraz tak dokonuję zapis do EEPROM


Kod:
         EEPROMWritelong(121,flat*1000000);
         EEPROMWritelong(125,flon*1000000);

Kod:
    llat        = EEPROMReadlong(121); //EEPROMWritelong(121,50052254);    
    llon        = EEPROMReadlong(125); //EEPROMWritelong(125,20076146);
    pozycja_LAT = (float)(llat/1000000);
    pozycja_LON = (float)(llon/1000000);

Próbowałem też na siłę wrzucić dane ale to nic nie daje. Cały czas w EEpromie jest tylko 50,0 i 20,0

Mnożenie przez 1000000 wykonuję żeby pozbyć się przecinka i potem dzielę żeby ten przecinek odzyskać

Wszystko fajnie tylko że to nie działa
 
Odpowiedź
  


Wiadomości w tym wątku
Zapis odczyt EEprom double, float - przez iwi - 10-03-2018, 01:29
RE: Zapis odczyt EEprom double, float - przez iwi - 10-03-2018, 23:11

Skocz do:


Przeglądający: 1 gości