Платките Arduino имат няколко вида памет. Първо, това е статична RAM (памет с произволен достъп), която се използва за съхраняване на променливи по време на изпълнение на програмата. На второ място, флаш паметта съхранява скиците, които сте написали. И трето, това е EEPROM, който може да се използва за постоянно съхраняване на информация. Първият тип памет е нестабилна, тя губи цялата информация след рестартиране на Arduino. Вторите два типа памет съхраняват информация, докато тя бъде заменена с нова, дори и след изключване на захранването. Последният тип памет - EEPROM - позволява да се записват, съхраняват и четат данни при необходимост. Ще разгледаме този спомен сега.
Необходимо
- - Arduino;
- - компютър.
Инструкции
Етап 1
EEPROM означава електрически изтриваема програмируема памет само за четене, т.е. електрически изтриваема памет само за четене. Данните в тази памет могат да се съхраняват десетки години след изключване на захранването. Броят на циклите на пренаписване е от порядъка на няколко милиона пъти.
Количеството EEPROM памет в Arduino е доста ограничено: за платки, базирани на микроконтролера ATmega328 (например Arduino UNO и Nano), количеството памет е 1 KB, за платките ATmega168 и ATmega8 - 512 байта, за ATmega2560 и ATmega1280 - 4 KB.
Стъпка 2
За работа с EEPROM за Arduino е написана специална библиотека, която по подразбиране е включена в IDE на Arduino. Библиотеката съдържа следните функции.
четене (адрес) - чете 1 байт от EEPROM; адрес - адресът, от който се четат данните (клетка, започваща от 0);
запис (адрес, стойност) - записва стойността на стойността (1 байт, число от 0 до 255) в паметта на адресния адрес;
актуализация (адрес, стойност) - замества стойността по адрес, ако старото й съдържание се различава от новото;
get (адрес, данни) - чете данни от посочения тип от паметта на адрес;
put (адрес, данни) - записва данни от посочения тип в паметта на адрес;
EEPROM [адрес] - позволява ви да използвате идентификатора „EEPROM“като масив за записване на данни и четене от паметта.
За да използваме библиотеката в скицата, ние я включваме с директивата #include EEPROM.h.
Стъпка 3
Нека напишем две цели числа в EEPROM и след това да ги прочетем от EEPROM и да ги изведем към серийния порт.
Няма проблеми с числата от 0 до 255, те заемат само 1 байт памет и се записват на желаното място с помощта на функцията EEPROM.write ().
Ако числото е по-голямо от 255, тогава с помощта на операторите highByte () и lowByte () то трябва да бъде разделено на байтове и всеки байт трябва да бъде записан в собствената си клетка. Максималният брой в този случай е 65536 (или 2 ^ 16).
Вижте, мониторът на серийния порт в клетка 0 просто показва число по-малко от 255. В клетки 1 и 2 се съхранява голям брой 789. В този случай клетка 1 съхранява фактор за препълване 3, а клетка 2 съхранява липсващия номер 21 (т.е. 789 = 3 * 256 + 21). За да сглобите повторно голям брой, анализиран на байтове, има функцията word (): int val = дума (hi, low), където hi и low са стойностите на високия и ниския байт.
Във всички останали клетки, които никога не сме записвали, се съхраняват числа 255.
Стъпка 4
За да напишете числа и низове с плаваща запетая, използвайте метода EEPROM.put (), а за четене - EEPROM.get ().
В процедурата за настройка () първо записваме число с плаваща запетая f. След това се придвижваме по броя на клетките с памет, които заема типът float, и записваме низ от char с капацитет 20 клетки.
В процедурата loop () ще прочетем всички клетки на паметта и ще се опитаме да ги дешифрираме първо като тип "float", а след това като тип "char" и ще изведем резултата към серийния порт.
Можете да видите, че стойността в клетки от 0 до 3 е била правилно дефинирана като число с плаваща запетая и като се започне от 4-та - като низ.
Получените стойности ovf (препълване) и nan (не число) показват, че числото не може да бъде правилно преобразувано в число с плаваща запетая. Ако знаете точно какъв тип данни заемат клетките на паметта, тогава няма да имате проблеми.
Стъпка 5
Много удобна функция е да се отнасят клетките на паметта като елементи на EEPROM масив. В тази скица, в процедурата setup (), първо ще запишем данните в първите 4 байта, а в процедурата loop () всяка минута ще четем данни от всички клетки и ще ги извеждаме към серийния порт.