Jak przechowywać dane w Arduino


U kart z rodziny Arduino istnieje kilka rodzajów pamięci. Po pierwsze, jest to statyczne RAM (random access memory), która służy do przechowywania zmiennych w trakcie wykonywania programu. Po drugie, jest to pamięć typu flash, w której przechowywane są napisane przez was skecze. I po trzecie, jest to EEPROM, który można wykorzystać do stałego przechowywania informacji. Pierwszy typ pamięci – energozavisimyi, traci wszystkie informacje po ponownym uruchomieniu Arduino. Drugie dwa rodzaje pamięci przechowują informacje, dopóki nie zostanie zastąpiona nową, nawet po wyłączeniu zasilania. Ostatni rodzaj pamięci EEPROM pozwala na nagrywanie danych, ich przechowywania i odczytywania plików w razie potrzeby. Tę pamięć mamy i rozważmy teraz.

Kak hranit dannye v Arduino



Artykuły na temat:

Pytanie „jaki kupić tablet?” – 3 odpowiedzi

Trzeba

  • – Arduino;
  • – komputer.

Instrukcja

1
EEPROM oznacza Electrically Erasable Programmable Read-Only Memory, czyli elektrycznie kasowana pereprogrammiryemoe pamięci trwałej. Dane w tej pamięci mogą być przechowywane przez dziesiątki lat po odłączeniu zasilania. Ilość cykli nadpisywania – rzędu kilku milionów razy.
Ilość pamięci EEPROM w Arduino jest dość ograniczona: dla płyt głównych opartych na mikrokontrollere ATmega328 (np. Arduino UNO i Nano), ilość pamięci wynosi 1 kb, kart na ATmega168 i ATmega8 – 512 bajtów, na ATmega2560 i ATmega1280 – 4 kb.

2
Do pracy z EEPROM dla Arduino napisana specjalna biblioteka, która wchodzi w Arduino IDE domyślnie. Biblioteka zawiera następujące funkcje.
read(address) – odczytuje 1 bajt z pamięci EEPROM; address – adres, z którego odczytywane są dane (komórka, począwszy od 0);
write(address, value) – zapisuje do pamięci wartość value (1 bajt, liczba od 0 do 255) na adres address;
update(address, value) – zastępuje wartość value na adres address, jeśli jej starsza zawartość różni się od nowego;
get(address, data) – odczytuje dane data określonego typu z pamięci pod adresem address;
put(address, data) – zapisuje dane data określonego typu w pamięć na adres address;
EEPROM[address] – pozwala użyć identyfikatora „EEPROM” jak tablicę, aby zapisywać dane w pamięci i odczytać je z pamięci.
Aby wykorzystać bibliotekę w sketche, podłączamy ją dyrektywą #include EEPROM.h.

3
Niech nagrać w pamięci EEPROM dwie liczby całkowite, a następnie przeczytajmy je z pamięci EEPROM i ustawcie w port szeregowy.
Z liczbami od 0 do 255 problemów nie ma, zajmują tylko 1 bajt pamięci i za pomocą funkcji pamięci EEPROM.write() są zapisywane w odpowiedniej komórce.
Jeśli liczba jest większa niż 255, za pomocą operatorów highByte() i lowByte() trzeba go dzielić na bajty i nagrywać każdy bajt w swoją komórkę. Maksymalna liczba przy tym – 65536 (lub 2^16).
Zobacz, monitor portu szeregowego w komórce 0 po prostu wyświetla liczbę mniejszą niż 255. W komorach 1 i 2 jest przechowywany duża liczba 789. Przy tym komórka 1 przechowuje mnożnik przepełnienia 3, a komórka 2 – brakujące liczby 21 (tj. 789 = 3*256 + 21). Aby ponownie „zebrać” duża liczba, razobrannoe na bajty, jest funkcja word(): int val = word(hi, low), gdzie hi i low – to wartości starszego i młodszego bajtów.
We wszystkich innych komórkach, które nie zostały przez nas ani razu rejestrowane, przechowywane są liczby 255.

Kak hranit dannye v Arduino

4
Do zapisu liczb zmiennoprzecinkowych i wierszy, należy użyć metody EEPROM.put(), a dla odczytu pamięci EEPROM.get().
W procedurze setup() najpierw piszemy liczba zmiennoprzecinkowa f. Następnie dojdziemy na ilość komórek pamięci, która zajmuje typu float, i, k, ciąg znaków char pojemności 20 komórek.
W procedurze loop() będziemy odczytywać wszystkie komórki pamięci i próbować rozszyfrować ich najpierw jako typu „float”, a następnie jako typ „char”, i wyświetlać wynik w port szeregowy.
Widać, że wartość w komórkach od 0 do 3, prawidłowo ustalone jako liczba zmiennoprzecinkowa, a począwszy od 4-tej – jak wiersz.
Pojawiające się wartości ovf (przepełnienie) i nan (nie liczba) mówią o tym, że liczba nie może być poprawnie przekonwertować na liczbę zmiennoprzecinkową. Jeśli wiesz dokładnie, jakiego typu dane jakie komórki pamięci zajmują, to nie będzie powodować problemów.

Kak hranit dannye v Arduino

5
Bardzo wygodna możliwość odwołania do komórek pamięci jak do elementów tablicy EEPROM. W tym sketche w procedurze setup() najpierw zapisujemy dane w 4 pierwsze bajty, a w procedurze loop() w każdej chwili będziemy odczytywać dane z wszystkich komórek i wprowadzać je w port szeregowy.

Kak hranit dannye v Arduino

Jak przechowywać dane w Arduino | Source