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 Arduino Duemilanove (ATmega168 ou 328P, 16 MHz, 5 V) avec son câble mini-USB-B ; le port série apparaît après installation du driver FTDI. 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 « Arduino Duemilanove » (ou « Diecimila » pour les très vieilles cartes) et le port FTDI, puis Téléverser. L'ATmega168 n'a que 14 Ko pour le sketch.
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);
}