eeprom-log.ino

LilyPad Arduino · Fichier : eeprom-log.ino · Langage : Arduino · Usage : Conserver des relevés dans l'EEPROM après une coupure de courant

L'EEPROM du microcontrôleur garde ses données sans alimentation (100 000 écritures mini). EEPROM.put n'écrit que ce qui change, préservant la mémoire ; l'indice de reprise est relu au démarrage.

Matériel requis

Une LilyPad Arduino (ATmega168V/328V, 8 MHz, 3,3 V) avec ses pastilles à coudre, programmée par câble FTDI (breakout) et alimentée par 3,7 V (LiPo) ou 5 V sur V-REG. Aucun (une source de tension sur A0 pour le test : potentiomètre ou LDR).

Branchement

Rien de spécial ; relier A0 à un diviseur ou un capteur analogique.

Fonctionnement

Chaque enregistrement fait 16 octets théoriques (2 utilisés ici) ; l'entête à l'adresse 0 mémorise le nombre de mesures pour repartir après un redémarrage. Dans l'Arduino IDE, choisissez « LilyPad Arduino » et le port FTDI, puis Téléverser. Le fil conductif crée des résistances de quelques ohms : gardez les courtes distances et isolez les croisements.

Pour aller plus loin

Étiquetez les écritures (nombre de mesures, date) et lisez le journal sur demande via la liaison série.

eeprom-log.ino

// Journalise une valeur analogique dans l'EEPROM (4 Ko ou 1 Ko).
#include <EEPROM.h>

const int ENTREE = 16;      // taille d'un enregistrement (octets)
const int MAX = EEPROM.length() / ENTREE;
int compteur = 0;

void setup() {
  Serial.begin(9600);
  // Relit le dernier indice ecrit (0xFFFF = vierge)
  EEPROM.get(0, compteur);
  if (compteur == 0xFFFF || compteur > MAX) compteur = 0;
  Serial.print(F("Reprise a l'entree "));
  Serial.println(compteur);
}

void loop() {
  int valeur = analogRead(A0);
  int idx = compteur % MAX;
  EEPROM.put(2 + idx * ENTREE, valeur); // 2 octets par entree
  EEPROM.put(0, ++compteur);            // memoire du rang
  Serial.print(idx); Serial.print(F(" -> ")); Serial.println(valeur);
  delay(2000);
}

← Retour à la fiche