10-03-2018, 01:29
Witajcie.
Znalazłem taką funkcję
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
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
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