Бібліотека EEPROM
У мікроконтролері Ардуїно є EEPROM - пам'ять, у якій інформація зберігається навіть після вимкнення пристрою (подібно до маленького жорсткого диска). Ця бібліотека дозволяє записувати та зчитувати інформацію з цієї пам'яті.
Об'єм пам'яті EEPROM різних мікроконтролерів, що входять до складу Ардуїно, може відрізнятися: 1024 байта в ATmega328, 512 байт - в ATmega168 та ATmega8, 4 КБ (4096 байт) - в ATmega1280 та ATmega2560.
Мікроконтролери ATmega мають на борту енергонезалежну пам'ять EEPROM, яка не втратить записані в неї дані навіть після вимкнення живлення. 512 байтів такої пам'яті несуть ATmega8 і ATmega168, 1024 байта - ATmega328, 4096 байтів - Arduino Mega. Пам'ять типу EEPROM допускає кілька десятків тисяч циклів запису та стирання даних. Вона може стати в нагоді для збереження змінних налаштувань при відключенні живлення від пристроїв Arduino. Для роботи з цією пам'яттю у складі Arduino IDE є зручна бібліотека EEPROM.
Функції бібліотек EEPROM
Бібліотека EEPROM містить дві функції: читання та запис у пам'ять даних.
Функція читання EEPROM.read
Функція EEPROM.read зчитує байт із енергонезалежної пам'яті EEPROM. Якщо байт раніше ніколи не перезаписувався — поверне значення 255.
Синтаксис функції EEPROM.read: EEPROM.read(address)
Параметр: address - порядковий номер осередку пам'яті для читання від 0 до 512 (або 1024) (int);
Значення, що повертається - байт, що зберігається в комірці пам'яті.
Приклад зчитування значення всіх байтів енергонезалежної пам'яті EEPROM і виведення в COM-порт представлений у прикладі.
byte value; void setup()
Serial.print(address); Serial.print("\t"); Serial.print(value, DEC); Serial.println();
// встановлюємо наступну комірку пам'яті address= address + 1;
// EEPROM містить лише 512(1024) байт
address = 0; delay(500);
Функція запису EEPROM.write
Функція EEPROM.write записує байт в незалежну пам'ять.
Синтаксис функції EEPROM.write:
address - порядковий номер осередку пам'яті для запису - від 0 до 511 (int);
value – байт для запису – від 0 до 255 (byte). Значення, що повертається, немає.
Можлива кількість циклів перезапису даних (Write/Erase Cycles) у пам'яті обмежена 100 тис. разів – це слід враховувати під час використання даної пам'яті. Час, необхідний завершення циклу запису, становить 3,3 ms. Ця затримка вже враховується бібліотекою EEPROM.
Приклад збереження в незалежній пам'яті EEPROM значень, лічених з аналогового входу analog input 0, представлений у лістингу 8.2. Дані значення залишаться в пам'яті та після відключення живлення від плати та в майбутньому можуть бути доступні для іншого скетчу.
"GECgabCaCg DGECabCDED EFEDGEDC CECaCag gCEDgCEDEFGECDgC ">;
// пробіл - це пауза
// Тривалість кожної ноти і паузи
int addr1 = 0; int addr2 = 10;
void write_melody(int num)
EEPROM.write(addr1, addr2); // покажчик на мелодію EEPROM.write(addr2,tempo[num]>>8); // для tempo – 2 байти addr2++;
// Підключити динамік до pin 8 int speakerPin = 8;
// підключити кнопку до pin 9 int buttonPin = 9;
// темп відтворення, ноти, тривалості int tempo, notes, beats;
int rand1; int count = 0;
void playNote(char note, int duration)
// масив для найменувань нот (до ремі . і т. д. в межах двох октав) char names [] = < 'c', 'd', 'e', 'f', 'g', 'a', 'b',
1432, 1276, 1136, 1014;
// програти тон, що відповідає нотідля (int i = 0; i 0)
notes=EEPROM.read(addr1); addr1++; beats=EEPROM.read(addr1); addr1++;
tone(speakerPin,0, beats*tempo*1000L); // пауза else