eeprom-log.ino
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);
}