Najprostrzy EEPROM write/read anything

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
gbk
Młodszy majsterkowicz
Posty: 9
Rejestracja: 2 lip 2015, 12:04

Najprostrzy EEPROM write/read anything

Post autor: gbk » 7 sie 2015, 13:22

Cześć, szukam lecz nie umiem znaleźć, w internecie są przykłady których nie rozumiem. Jednak chodzi mi o to, żeby ktoś mi napisał najprostszy przykład, w którym mam powiedzmy dwie zmienne, jedna "232932034" druga "342432", które są zapisywane i odczytywane przez EEPROM Write/Read Anything.
Z góry dziękuje

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Delta039
Młodszy majsterkowicz
Posty: 25
Rejestracja: 10 sty 2015, 16:50

Re: Najprostrzy EEPROM write/read anything

Post autor: Delta039 » 17 sie 2015, 20:37

W emulatorze masz gotowe przykłady i tam masz przykłady z EEPROM na zapis i odczyt danych coś skopiuj i sklej razem.
gbk
Młodszy majsterkowicz
Posty: 9
Rejestracja: 2 lip 2015, 12:04

Re: Najprostrzy EEPROM write/read anything

Post autor: gbk » 17 sie 2015, 20:57

Delta039 pisze:W emulatorze masz gotowe przykłady i tam masz przykłady z EEPROM na zapis i odczyt danych coś skopiuj i sklej razem.
Emulator? Chodzi ci o przykłady w w kompilatorze? Tam są tylko na zwykłe EEPROM write/read. Ja potrzebuję na EEPROM Write Anything. Chcę zapisać liczby większe niż 255
stiven
Złota rączka
Posty: 1655
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Najprostrzy EEPROM write/read anything

Post autor: stiven » 17 sie 2015, 21:46

Jeśli nie będziesz zapisywał jakichś struktur danych, tylko po prostu duże liczby, to nie musi być EEPROM Write/Read Anything, wystarczy EEPROM Write/Read long.
http://playground.arduino.cc/Code/EEPROMReadWriteLong
Liczba przed zapisem jest dzielona na 4 osobne bajty, czyli tyle ile zajmuje long. Potem te 4 baty są zapisywane do czterech kolejnych komórek pamięci. Czyli jeśli zapiszesz pod adresem 0, to jeszcze zostaną zajęte komórki 1, 2 i 3, więc przy zapisywaniu następnej liczby adres może być dopiero 4, potem 8, 12 itd.
A przy odczycie podajesz ten początkowy adres, a funkcja odczytuje dane łącznie z 4 komórek i odtwarza pierwotną liczbę i zwraca ją przez funkcje return, dlatego funkcja EEPROMReadlong() nie jest typu void, tylko long, czyli zwraca sobą zmienną typu long. Czyli w programie można napisać

Kod: Zaznacz cały

  long x = EEPROMReadlong(0);   //odczyt spod adres 0 i trzech kolejnych komórek(czyli od 0 do 3)
i w zmiennej x będzie liczba, którą wcześniej zapisaliśmy na przykład w taki sposób:

Kod: Zaznacz cały

  long z = 541564864;
  EEPROMWritelong(0, z);   //zapis zmiennej z do komórek od adresu 0 do 3
Wystarczy do programu dodać takie dwie funkcje, no i trzeba pamiętać, żeby używać co czwarty adres:

Kod: Zaznacz cały

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);
}

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);
}
Ostatnio zmieniony 17 sie 2015, 21:51 przez stiven, łącznie zmieniany 1 raz.
gbk
Młodszy majsterkowicz
Posty: 9
Rejestracja: 2 lip 2015, 12:04

Re: Najprostrzy EEPROM write/read anything

Post autor: gbk » 17 sie 2015, 21:50

Wygląda super, piękne dziękuję :)
ODPOWIEDZ

Strony partnerskie: