Gegevens Opslaan In Arduino

Inhoudsopgave:

Gegevens Opslaan In Arduino
Gegevens Opslaan In Arduino

Video: Gegevens Opslaan In Arduino

Video: Gegevens Opslaan In Arduino
Video: Ардуино для начинающих. Загрузка скетча на плату. Установка Arduino IDE 2024, Mei
Anonim

Arduino-boards hebben verschillende soorten geheugen. Ten eerste is het statisch RAM (random access memory), dat wordt gebruikt om variabelen op te slaan tijdens de uitvoering van het programma. Ten tweede is het het flashgeheugen dat de schetsen opslaat die je hebt geschreven. En ten derde is het een EEPROM waarmee informatie permanent kan worden opgeslagen. Het eerste type geheugen is vluchtig, het verliest alle informatie na het opnieuw opstarten van de Arduino. De tweede twee soorten geheugen slaan informatie op totdat deze wordt overschreven door een nieuwe, zelfs nadat de stroom is uitgeschakeld. Met het laatste type geheugen - EEPROM - kunnen gegevens naar behoefte worden geschreven, opgeslagen en gelezen. We zullen deze herinnering nu beschouwen.

Gegevens opslaan in EEPROM Arduino
Gegevens opslaan in EEPROM Arduino

Noodzakelijk

  • -Arduino;
  • - computer.

instructies:

Stap 1

EEPROM staat voor Electrically Erasable Programmable Read-Only Memory, d.w.z. elektrisch wisbaar alleen-lezen geheugen. De gegevens in dit geheugen kunnen nog tientallen jaren worden bewaard nadat de stroom is uitgeschakeld. Het aantal herschrijfcycli ligt in de orde van enkele miljoenen keren.

De hoeveelheid EEPROM-geheugen in Arduino is vrij beperkt: voor boards op basis van de ATmega328-microcontroller (bijvoorbeeld Arduino UNO en Nano) is de hoeveelheid geheugen 1 KB, voor ATmega168- en ATmega8-boards - 512 bytes, voor ATmega2560 en ATmega1280 - 4KB.

Stap 2

Om met de EEPROM voor Arduino te kunnen werken is er een speciale bibliotheek geschreven, die standaard in de Arduino IDE zit. De bibliotheek bevat de volgende functies.

lezen (adres) - leest 1 byte van EEPROM; adres - het adres waarvan de gegevens worden gelezen (cel beginnend bij 0);

schrijven (adres, waarde) - schrijft de waardewaarde (1 byte, getal van 0 tot 255) naar het geheugen op het adresadres;

update (adres, waarde) - vervangt de waarde op adres als de oude inhoud verschilt van de nieuwe;

get (adres, gegevens) - leest gegevens van het opgegeven type uit het geheugen op adres;

put (adres, data) - schrijft data van het gespecificeerde type naar het geheugen op adres;

EEPROM [adres] - hiermee kunt u de "EEPROM"-identificatie gebruiken als een array om gegevens naar en uit het geheugen te schrijven.

Om de bibliotheek in de schets te gebruiken, voegen we deze toe aan de #include EEPROM.h-richtlijn.

Stap 3

Laten we twee gehele getallen naar de EEPROM schrijven en ze vervolgens uit de EEPROM lezen en naar de seriële poort uitvoeren.

Er zijn geen problemen met getallen van 0 tot 255, ze nemen slechts 1 byte geheugen in beslag en worden met de functie EEPROM.write () naar de gewenste locatie geschreven.

Als het getal groter is dan 255, moet het met behulp van de operatoren highByte () en lowByte () worden gedeeld door bytes en moet elke byte naar zijn eigen cel worden geschreven. Het maximale aantal is in dit geval 65536 (of 2^16).

Kijk, de seriële poortmonitor in cel 0 geeft gewoon een getal weer dat kleiner is dan 255. In cellen 1 en 2 is een groot getal 789 opgeslagen. In dit geval slaat cel 1 de overloopfactor 3 op en cel 2 slaat het ontbrekende getal 21 op. (dwz 789 = 3 * 256 + 21). Om een groot aantal weer samen te stellen, geparseerd in bytes, is er de woord () functie: int val = woord (hi, low), waarbij hi en low de waarden zijn van de hoge en lage bytes.

In alle andere cellen die we nooit hebben opgeschreven, worden nummers 255 opgeslagen.

Getallen schrijven naar EEPROM Arduino
Getallen schrijven naar EEPROM Arduino

Stap 4

Gebruik de methode EEPROM.put () om getallen en tekenreeksen met drijvende komma te schrijven en gebruik EEPROM.get () om te lezen.

In de setup () procedure schrijven we eerst het floating point getal f. Vervolgens gaan we verder met het aantal geheugencellen dat het type float inneemt, en schrijven we een tekenreeks met een capaciteit van 20 cellen.

In de loop () procedure zullen we alle geheugencellen lezen en proberen ze eerst te decoderen als "float" type, en dan als "char" type, en het resultaat naar de seriële poort te sturen.

U kunt zien dat de waarde in de cellen 0 tot en met 3 correct is gedefinieerd als een getal met drijvende komma, en vanaf de vierde - als een tekenreeks.

De resulterende waarden ovf (overflow) en nan (geen getal) geven aan dat het getal niet correct kan worden omgezet naar een floating point getal. Als je precies weet welk type data welke geheugencellen in beslag nemen, dan heb je geen problemen.

Drijvende-kommagetallen en tekenreeksen schrijven naar EEPROM Arduino
Drijvende-kommagetallen en tekenreeksen schrijven naar EEPROM Arduino

Stap 5

Een erg handige functie is om naar geheugencellen te verwijzen als elementen van een EEPROM-array. In deze schets, in de setup () procedure, zullen we eerst de data in de eerste 4 bytes schrijven, en in de loop () procedure zullen we elke minuut data van alle cellen lezen en deze naar de seriële poort sturen.

Aanbevolen: