Arduino-kort har flere typer minne. For det første er det statisk RAM (random access memory), som brukes til å lagre variabler under programutførelse. For det andre er det flashminnet som lagrer skissene du har skrevet. Og for det tredje er det en EEPROM som kan brukes til å lagre informasjon permanent. Den første typen minne er ustabil, den mister all informasjon etter at du har startet om Arduino. De to andre minnetyper lagrer informasjon til den blir overskrevet med en ny, selv etter at strømmen er slått av. Den siste typen minne - EEPROM - lar data skrives, lagres og leses etter behov. Vi vil vurdere dette minnet nå.
Nødvendig
- - Arduino;
- - datamaskin.
Bruksanvisning
Trinn 1
EEPROM står for Electrically Erasable Programmable Read-Only Memory, dvs. elektrisk slettbart skrivebeskyttet minne. Dataene i dette minnet kan lagres i flere år etter at strømmen er slått av. Antall omskrivingssykluser er i størrelsesorden flere millioner ganger.
Mengden EEPROM-minne i Arduino er ganske begrenset: for kort basert på ATmega328-mikrokontrolleren (for eksempel Arduino UNO og Nano) er minnemengden 1 KB, for ATmega168 og ATmega8-kort - 512 byte, for ATmega2560 og ATmega1280 - 4 KB.
Steg 2
For å jobbe med EEPROM for Arduino er det skrevet et spesialbibliotek som er inkludert i Arduino IDE som standard. Biblioteket inneholder følgende funksjoner.
les (adresse) - leser 1 byte fra EEPROM; adresse - adressen der dataene leses fra (celle fra 0);
skriv (adresse, verdi) - skriver verdiverdien (1 byte, tall fra 0 til 255) til minnet på adresseadressen;
oppdatering (adresse, verdi) - erstatter verdien på adressen hvis det gamle innholdet er forskjellig fra det nye;
få (adresse, data) - leser data av den spesifiserte typen fra minnet på adressen;
put (adresse, data) - skriver data av den spesifiserte typen til minnet på adressen;
EEPROM [adresse] - lar deg bruke "EEPROM" -identifikatoren som en matrise for å skrive data til og lese fra minnet.
For å bruke biblioteket i skissen inkluderer vi det med #include EEPROM.h-direktivet.
Trinn 3
La oss skrive to heltall til EEPROM og deretter lese dem fra EEPROM og sende dem til serieporten.
Det er ingen problemer med tall fra 0 til 255, de tar bare 1 byte minne og skrives til ønsket sted ved hjelp av EEPROM.write () -funksjonen.
Hvis tallet er større enn 255, må operatørene highByte () og lowByte () deles med byte, og hver byte må skrives til sin egen celle. Maks antall i dette tilfellet er 65536 (eller 2 ^ 16).
Seriell portmonitor i celle 0 viser ganske enkelt et tall mindre enn 255. I celler 1 og 2 lagres et stort antall 789. I dette tilfellet lagrer celle 1 overløpsfaktoren 3, og celle 2 lagrer det manglende nummeret 21 (dvs. 789 = 3 * 256 + 21). For å samle et stort antall igjen, analysert i byte, er det ordet () -funksjonen: int val = ord (hi, low), hvor hi og low er verdiene for høye og lave byte.
I alle andre celler som vi aldri har skrevet ned, lagres nummer 255.
Trinn 4
For å skrive flytende punktum og strenger bruker du EEPROM.put () -metoden, og for å lese bruker du EEPROM.get ().
I oppsett () -prosedyren skriver vi først flytpunkt nr. F. Deretter beveger vi oss etter antall minneceller som flytetypen opptar, og skriver en char-streng med en kapasitet på 20 celler.
I loop () -prosedyren vil vi lese alle minnecellene og prøve å dekryptere dem først som "float" -type, og deretter som "char" -type, og sende resultatet til serieporten.
Du kan se at verdien i cellene 0 til 3 ble riktig definert som et flytende nummer, og startet fra den fjerde - som en streng.
De resulterende verdiene ovf (overflow) og nan (ikke et tall) indikerer at tallet ikke kan konverteres riktig til et flytende nummer. Hvis du vet nøyaktig hvilken type data som minneceller okkuperer, vil du ikke ha noen problemer.
Trinn 5
En veldig praktisk funksjon er å referere til minneceller som elementer i et EEPROM-array. I denne skissen, i oppsettet () -prosedyren, vil vi først skrive dataene i de første 4 byte, og i loop () -prosedyren, hvert minutt vil vi lese data fra alle celler og sende dem til serieporten.