Zapis odczyt EEprom double, float - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: Zapis odczyt EEprom double, float (/watek-zapis-odczyt-eeprom-double-float) |
Zapis odczyt EEprom double, float - iwi - 10-03-2018 Witajcie. Znalazłem taką funkcję Kod: //======================== EEPROM 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); Kod: llat = EEPROMReadlong(121); //EEPROMWritelong(121,50052254); 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 RE: Zapis odczyt EEprom double, float - kaczakat - 10-03-2018 Wczoraj opisałem float w eeprom tu: https://forum.arduinopolska.pl/watek-jak-zapisa%C4%87-w-eeprom-float-nie-dzia%C5%82a-mi-put-get - to w całości rozwiąże problem. Jest w AVR coś takiego jak domyślna promocja do INT, jeśli w wyrażeniu używasz float i 1000, to 1000 lepiej zapisać tak 1000.0. Obawiam się, że zapis (float)(Ilat/1000000) powoduje rzutowanie na float już wyniku obciętego do liczb całkowitych. Dla pewności wyrzuć sobie te dane na serial i oczkami zobacz, czy efekt jest taki jak zaplanowany. RE: Zapis odczyt EEprom double, float - iwi - 10-03-2018 Wystarczyło zmienić albo dopisać rzutowanie Kod: pozycja_LAT = (float)((float)llat/1000000); Ale jeszcze napomknę że z terminalem to nie jest taka prosta sprawa (jest prosta, ale trzeba wiedzieć) ponieważ domyślnie daje tylko 2 miejsca po przecinku. Ale wystarczy dodać po zmiennej drugą wartość i już jest ok Kod: Serial.print(pozycja_LAT,6); RE: Zapis odczyt EEprom double, float - kaczakat - 11-03-2018 Oczywiście, można pozycja_LAT = (float)((float)llat/1000000), można też pozycja_LAT = ((float)llat/1000000.0), Serial.print(llat/1000000.0,6) zadziała, można też użyć istniejących funkcji put/get typowych dla arduino (a dla wielu zmiennych połączonych w strukturę) lub eeprom_update_block()/eeprom_read_block() przygotowanych w AVR <avr/eeprom.h>. Dla każdej filozofii programowania odpowiednie rozwiązanie. Można też grzebnąć w bibliotece, bo ta zmienna jest w GPS przechowywana jako liczby całkowite i taka konwersja w te i wewte jest po prostu zadziwiająca. |