Skocz do zawartości

EEPROM zapis 0,56


betepok

Pomocna odpowiedź

Witam

W jednym z projektów chcę zapisać do pamięci EEPROM liczbę po przecinku (0.51).

Co do liczb całkowitych od 0 do 255 zastosowaną teorie znam i z powodzeniem stosuję.

W sieci znalazłem coś takiego link. Nie ogarniam tego 😕 . Biblioteka załadowana (EEPROMAnything.h) wszystko się kompiluje ale jak zapisać i następnie wyświetlić wartość?

#include <EEPROM.h>
#include "EEPROMAnything.h"

float wartosc;

struct config_t
{
   long alarm;
   int mode; 
} configuration;

void setup(){
 Serial.begin(9600);

 {
    EEPROM_writeAnything(0, configuration);

 }
}
void loop(){

       wartosc = EEPROM_readAnything(0, configuration);
       Serial.println(wartosc);

       delay(500);
}
Link do komentarza
Share on other sites

Generalnie do EEPROM zapisujesz bajty, a nie "liczbę po przecinku". Czyli jak chcesz zapisać tam coś typu float, to musisz przy zapisywaniu rozbić to na poszczególne bajty, zapisać, a potem przy odczytywaniu te bajty z powrotem do typu float złożyć. Jest wiele sposobów na to, osobiście lubię używać typu union do tego. Polecam doczytać w dowolnie wybranym podręczniku do C.

Link do komentarza
Share on other sites

Czego nie ogarniasz? Obie funkcje zostały napisane jako szablony (template). Oczekują adresu EEPROMu i referencji do zmiennej którą zapisujesz lub odczytujesz. Obie oddają liczbę bajtów zajmowanych przez zmienną - to może się przydać gdy będziesz zapisywał lub odczytywał więcej rzeczy po kolei.

#include <EEPROM.h> 
#include "EEPROMAnything.h" 

float wartosc; 

void setup(){ 
 Serial.begin(9600); 

 { 
    wartość = 0.57;
    EEPROM_writeAnything(0, wartosc); 
 } 
} 
void loop(){ 

       EEPROM_readAnything(0, wartosc); 
       Serial.println(wartosc); 

       delay(500); 
}
  • Pomogłeś! 1
Link do komentarza
Share on other sites

No tak - najciemniej pod latarnią. Dzięki "marek1707"

Działa jak należy. Myślałem jeszcze o przedłużeniu żywota pamięci. Czyta tylko wartość z pamięci (0.51) 🙁

#include <EEPROM.h> 
#include "EEPROMAnything.h" 

float wartosc; 
float waga;
void setup(){ 
 Serial.begin(9600); 


wartosc = 0.78;    //wiem ze w pamieci 0.51
if ( wartosc != EEPROM_readAnything(0, wartosc)){

    EEPROM_writeAnything(0, wartosc); 
   }

} 

void loop(){ 

       EEPROM_readAnything(0, wartosc); 
       Serial.println(wartosc); 

       delay(500); 
}
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Oczywiście, warto zapisywać do EEPROMu tylko wtedy gdy coś się zmieniło. Tylko, że nie w ten sposób. Jak już napisałem wartością funkcji odczytującej jest liczba bajtów czyli długość zmiennej. W tym przypadku wartością wyrażenia EEPROM_readAnything(0, wartosc) jest zawsze 4, bo tyle bajtów zajmuje zmienna typu float w pamięci RAM. Musisz najpierw odczytać do innej zmiennej a potem ją porównać z tym czego oczekujesz:

#include <EEPROM.h> 
#include "EEPROMAnything.h" 

float wartosc;
float cotamjest;
float waga; 
void setup(){ 
 Serial.begin(9600); 


wartosc = 0.78;    //wiem ze w pamieci 0.51 
EEPROM_readAnything(0, cotamjest);
if ( wartosc != cotamjest){ 
    EEPROM_writeAnything(0, wartosc); 
   } 

} 

void loop(){ 

       EEPROM_readAnything(0, wartosc); 
       Serial.println(wartosc); 

       delay(500); 
}
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.