Comment Stocker Des Données Dans Arduino

Table des matières:

Comment Stocker Des Données Dans Arduino
Comment Stocker Des Données Dans Arduino

Vidéo: Comment Stocker Des Données Dans Arduino

Vidéo: Comment Stocker Des Données Dans Arduino
Vidéo: Projet Data logger avec Arduino – Stockage des données dans la carte SD 3/4 [TUTO] 2024, Peut
Anonim

Les cartes Arduino ont plusieurs types de mémoire. Premièrement, c'est la RAM statique (mémoire à accès aléatoire), qui est utilisée pour stocker les variables pendant l'exécution du programme. Deuxièmement, c'est la mémoire flash qui stocke les croquis que vous avez écrits. Et troisièmement, c'est une EEPROM qui peut être utilisée pour stocker en permanence des informations. Le premier type de mémoire est volatile, il perd toutes les informations après redémarrage de l'Arduino. Les deux deuxièmes types de mémoire stockent des informations jusqu'à ce qu'elles soient écrasées par une nouvelle, même après la mise hors tension. Le dernier type de mémoire - EEPROM - permet d'écrire, de stocker et de lire des données selon les besoins. Nous allons maintenant considérer ce souvenir.

Stockage des données dans l'EEPROM Arduino
Stockage des données dans l'EEPROM Arduino

Nécessaire

  • -Arduino;
  • - ordinateur.

Instructions

Étape 1

EEPROM signifie Electrically Erasable Programmable Read-Only Memory, c'est-à-dire mémoire morte effaçable électriquement. Les données de cette mémoire peuvent être stockées pendant des dizaines d'années après la mise hors tension. Le nombre de cycles de réécriture est de l'ordre de plusieurs millions de fois.

La quantité de mémoire EEPROM dans Arduino est plutôt limitée: pour les cartes basées sur le microcontrôleur ATmega328 (par exemple, Arduino UNO et Nano), la quantité de mémoire est de 1 Ko, pour les cartes ATmega168 et ATmega8 - 512 octets, pour ATmega2560 et ATmega1280 - 4 Ko.

Étape 2

Pour travailler avec l'EEPROM pour Arduino, une bibliothèque spéciale a été écrite, qui est incluse par défaut dans l'IDE Arduino. La bibliothèque contient les fonctionnalités suivantes.

lire (adresse) - lit 1 octet de l'EEPROM; adresse - l'adresse à partir de laquelle les données sont lues (cellule à partir de 0);

écrire (adresse, valeur) - écrit la valeur valeur (1 octet, nombre de 0 à 255) dans la mémoire à l'adresse d'adresse;

mise à jour (adresse, valeur) - remplace la valeur à l'adresse si son ancien contenu diffère du nouveau;

get (adresse, données) - lit les données du type spécifié dans la mémoire à l'adresse;

put (adresse, données) - écrit les données du type spécifié dans la mémoire à l'adresse;

EEPROM [adresse] - vous permet d'utiliser l'identifiant "EEPROM" comme un tableau pour écrire et lire des données dans la mémoire.

Pour utiliser la bibliothèque dans l'esquisse, nous l'incluons avec la directive #include EEPROM.h.

Étape 3

Écrivons deux entiers dans l'EEPROM, puis lisons-les à partir de l'EEPROM et sortons-les sur le port série.

Il n'y a aucun problème avec les nombres de 0 à 255, ils occupent seulement 1 octet de mémoire et sont écrits à l'emplacement souhaité à l'aide de la fonction EEPROM.write ().

Si le nombre est supérieur à 255, alors en utilisant les opérateurs highByte () et lowByte (), il doit être divisé par des octets et chaque octet doit être écrit dans sa propre cellule. Le nombre maximum dans ce cas est 65536 (ou 2 ^ 16).

Regardez, le moniteur de port série dans la cellule 0 affiche simplement un nombre inférieur à 255. Dans les cellules 1 et 2, un grand nombre est stocké 789. Dans ce cas, la cellule 1 stocke le facteur de débordement 3 et la cellule 2 stocke le nombre manquant 21. (c'est-à-dire 789 = 3 * 256 + 21). Pour réassembler un grand nombre, analysé en octets, il existe la fonction word(): int val = mot (hi, low), où hi et low sont les valeurs des octets high et low.

Dans toutes les autres cellules que nous n'avons jamais écrites, les nombres 255 sont stockés.

Écriture d'entiers sur EEPROM Arduino
Écriture d'entiers sur EEPROM Arduino

Étape 4

Pour écrire des nombres à virgule flottante et des chaînes, utilisez la méthode EEPROM.put () et pour lire, utilisez EEPROM.get ().

Dans la procédure setup(), nous écrivons d'abord le nombre à virgule flottante f. Ensuite, nous nous déplaçons du nombre de cellules mémoire occupées par le type float et écrivons une chaîne de caractères d'une capacité de 20 cellules.

Dans la procédure loop(), nous allons lire toutes les cellules de mémoire et essayer de les déchiffrer d'abord en tant que type "float", puis en tant que type "char", et afficher le résultat sur le port série.

Vous pouvez voir que la valeur dans les cellules 0 à 3 a été correctement définie comme un nombre à virgule flottante, et à partir du 4ème - comme une chaîne.

Les valeurs résultantes ovf (débordement) et nan (pas un nombre) indiquent que le nombre ne peut pas être correctement converti en nombre à virgule flottante. Si vous savez exactement quel type de données occupent les cellules de mémoire, vous n'aurez aucun problème.

Écriture de nombres à virgule flottante et de chaînes sur EEPROM Arduino
Écriture de nombres à virgule flottante et de chaînes sur EEPROM Arduino

Étape 5

Une caractéristique très pratique consiste à se référer aux cellules mémoire en tant qu'éléments d'une matrice EEPROM. Dans cette esquisse, dans la procédure setup (), nous allons d'abord écrire les données dans les 4 premiers octets, et dans la procédure loop (), chaque minute, nous lirons les données de toutes les cellules et les sortirons sur le port série.

Conseillé: