Микроконтроллер на платах Arduino и Genuino имеют постоянную EEPROM: память, значения которой сохраняются при выключении питания платы (по принципу жесткого диска).
Цель этого примера — показать метод EEPROM.update(), который записывает данные, только если они отличаются от предыдущего содержимого ячейки, которая будет перезаписана. Это решение может сэкономить время выполнения, потому что каждая операция записи занимает 3,3 мс. Также EEPROM имеет ограничение в 100 000 циклов записи для каждой ячейки памяти, поэтому, избегая перезаписи одного и того же значения в любом месте, вы увеличите общий срок службы EEPROM.
Требуемое оборудование
Плата Arduino или Genuino
Требуемая схема
Нет схемы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
/*** EEPROM Update method Stores values read from analog input 0 into the EEPROM. These values will stay in the EEPROM when the board is turned off and may be retrieved later by another sketch. If a value has not changed in the EEPROM, it is not overwritten which would reduce the life span of the EEPROM unnecessarily. Released using MIT licence. ***/ #include <EEPROM.h> /** the current address in the EEPROM (i.e. which byte we're going to write to next) **/ int address = 0; void setup() { /** EMpty setup **/ } void loop() { /*** need to divide by 4 because analog inputs range from 0 to 1023 and each byte of the EEPROM can only hold a value from 0 to 255. ***/ int val = analogRead(0) / 4; /*** Update the particular EEPROM cell. these values will remain there when the board is turned off. ***/ EEPROM.update(address, val); /*** The function EEPROM.update(address, val) is equivalent to the following: if( EEPROM.read(address) != val ){ EEPROM.write(address, val); } ***/ /*** Advance to the next address, when at the end restart at the beginning. Larger AVR processors have larger EEPROM sizes, E.g: - Arduno Duemilanove: 512b EEPROM storage. - Arduino Uno: 1kb EEPROM storage. - Arduino Mega: 4kb EEPROM storage. Rather than hard-coding the length, you should use the pre-provided length function. This will make your code portable to all AVR processors. ***/ address = address + 1; if (address == EEPROM.length()) { address = 0; } /*** As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an EEPROM address is also doable by a bitwise and of the length - 1. ++address &= EEPROM.length() - 1; ***/ delay(100); } |
Смотрите также:
EEPROM Clear: очистить байты в EEPROM.
EEPROM Read: Чтение EEPROM и отправка его значений на компьютер.
EEPROM Write: Сохраняет значения с аналогового входа в EEPROM.
EEPROM Crc: Вычисляет CRC содержимого EEPROM, как если бы это был массив.
EEPROM Get: Считывание данных с EEPROM и их вывод на монитор порта в виде числа с плавающей точкой float.
EEPROM Iteration: Несколько разных способов пройти через пространство памяти EEPROM.
EEPROM Put: Запись данных в EEPROM разными способами.