Jak Przechowywać Dane W Arduino?

Spisu treści:

Jak Przechowywać Dane W Arduino?
Jak Przechowywać Dane W Arduino?

Wideo: Jak Przechowywać Dane W Arduino?

Wideo: Jak Przechowywać Dane W Arduino?
Wideo: Storing Data on an Arduino 2024, Listopad
Anonim

Płytki Arduino mają kilka rodzajów pamięci. Po pierwsze, jest to statyczna pamięć RAM (pamięć o dostępie swobodnym), która służy do przechowywania zmiennych podczas wykonywania programu. Po drugie, to pamięć flash przechowująca napisane szkice. Po trzecie, jest to pamięć EEPROM, której można używać do stałego przechowywania informacji. Pierwszy typ pamięci jest ulotny, traci wszystkie informacje po ponownym uruchomieniu Arduino. Drugie dwa typy pamięci przechowują informacje, dopóki nie zostaną zastąpione nową, nawet po wyłączeniu zasilania. Ostatni typ pamięci - EEPROM - umożliwia zapisywanie, przechowywanie i odczytywanie danych w razie potrzeby. Zastanowimy się teraz nad tym wspomnieniem.

Przechowywanie danych w EEPROM Arduino
Przechowywanie danych w EEPROM Arduino

Niezbędny

  • - Arduino;
  • - komputer.

Instrukcje

Krok 1

EEPROM to skrót od Electricly Erasable Programmable Read-Only Memory, tj. elektrycznie kasowana pamięć tylko do odczytu. Dane w tej pamięci mogą być przechowywane przez dziesiątki lat po wyłączeniu zasilania. Liczba cykli przepisywania jest rzędu kilku milionów razy.

Ilość pamięci EEPROM w Arduino jest raczej ograniczona: dla płyt opartych na mikrokontrolerze ATmega328 (np. Arduino UNO i Nano) ilość pamięci to 1 KB, dla płyt ATmega168 i ATmega8 - 512 bajtów, dla ATmega2560 i ATmega1280 - 4 KB.

Krok 2

Do pracy z EEPROM dla Arduino została napisana specjalna biblioteka, która jest domyślnie zawarta w Arduino IDE. Biblioteka zawiera następujące funkcje.

read (address) - odczytuje 1 bajt z EEPROM; adres - adres, z którego odczytywane są dane (komórka zaczynająca się od 0);

write (adres, value) - zapisuje wartość wartości (1 bajt, liczba od 0 do 255) do pamięci pod adresem adres;

aktualizacja (adres, wartość) - zastępuje wartość pod adresem, jeśli jej stara zawartość różni się od nowej;

get (adres, data) - odczytuje dane określonego typu z pamięci pod adresem;

put (adres, data) - zapisuje dane określonego typu do pamięci pod adresem;

EEPROM [adres] - pozwala na użycie identyfikatora "EEPROM" jako tablicy do zapisu i odczytu danych z pamięci.

Aby skorzystać z biblioteki w szkicu, dołączamy ją za pomocą dyrektywy #include EEPROM.h.

Krok 3

Zapiszmy dwie liczby całkowite do EEPROM, a następnie odczytajmy je z EEPROM i wyślijmy do portu szeregowego.

Z liczbami od 0 do 255 nie ma problemów, zajmują zaledwie 1 bajt pamięci i są zapisywane w żądanej lokalizacji za pomocą funkcji EEPROM.write().

Jeśli liczba jest większa niż 255, to za pomocą operatorów highByte() i lowByte() należy ją podzielić przez bajty, a każdy bajt należy zapisać do własnej komórki. Maksymalna liczba w tym przypadku to 65536 (lub 2 ^ 16).

Spójrz, monitor portu szeregowego w komórce 0 wyświetla po prostu liczbę mniejszą niż 255. W komórkach 1 i 2 przechowywana jest duża liczba 789. W tym przypadku komórka 1 przechowuje współczynnik przepełnienia 3, a komórka 2 przechowuje brakującą liczbę 21 (tj. 789 = 3 * 256 + 21). Do ponownego złożenia dużej liczby, przetworzonej na bajty, służy funkcja słowa (): int val = słowo (hi, low), gdzie hi i low to wartości bajtów high i low.

We wszystkich innych komórkach, których nigdy nie zapisaliśmy, przechowywane są liczby 255.

Zapisywanie liczb całkowitych do EEPROM Arduino
Zapisywanie liczb całkowitych do EEPROM Arduino

Krok 4

Aby pisać liczby i łańcuchy zmiennoprzecinkowe, użyj metody EEPROM.put(), a do odczytu użyj EEPROM.get().

W procedurze setup() najpierw zapisujemy liczbę zmiennoprzecinkową f. Następnie poruszamy się o liczbę komórek pamięci, które zajmuje typ float i piszemy ciąg znaków o pojemności 20 komórek.

W procedurze loop() odczytamy wszystkie komórki pamięci i spróbujemy je odszyfrować najpierw jako typu „float”, a następnie jako typu „char” i wyprowadzić wynik na port szeregowy.

Widać, że wartość w komórkach od 0 do 3 została poprawnie zdefiniowana jako liczba zmiennoprzecinkowa, a począwszy od czwartej - jako ciąg.

Otrzymane wartości ovf (przepełnienie) i nan (nie liczba) wskazują, że liczba nie może być poprawnie przekonwertowana na liczbę zmiennoprzecinkową. Jeśli dokładnie wiesz, jaki rodzaj danych zajmują komórki pamięci, nie będziesz miał żadnych problemów.

Zapisywanie liczb zmiennoprzecinkowych i ciągów do EEPROM Arduino
Zapisywanie liczb zmiennoprzecinkowych i ciągów do EEPROM Arduino

Krok 5

Bardzo wygodną funkcją jest odwoływanie się do komórek pamięci jako elementów tablicy EEPROM. Na tym szkicu w procedurze setup() najpierw zapiszemy dane do pierwszych 4 bajtów, a w procedurze loop() co minutę będziemy odczytywać dane ze wszystkich komórek i wyprowadzać je na port szeregowy.

Zalecana: