/** * Exemple d'utilisation de structure avec EEPROM.put(). * Variante avec versionnage et détection de première utilisation. */ #include /** Le nombre magique et le numéro de version actuelle */ static const unsigned long STRUCT_MAGIC = 123456789; static const byte STRUCT_VERSION = 2; /** La structure qui contient les données */ struct MaStructure { unsigned long magic; byte struct_version; int valeur_1; // Depuis la struct_version = 0 float valeur_2; // Depuis la struct_version = 1 char valeur_3[16]; // Depuis la struct_version = 2 }; /** L'instance de la structure, globale, car utilisé dans plusieurs endroits du programme */ MaStructure ms; void setup() { Serial.begin(9600); // Charge le contenu de la mémoire chargeEEPROM(); // Affiche les données dans la structure Serial.print("Valeur 1 = "); Serial.println(ms.valeur_1); Serial.print("Valeur 2 = "); Serial.println(ms.valeur_2); Serial.print("Valeur 3 = "); Serial.println(ms.valeur_3); } void loop() { } /** Sauvegarde en mémoire EEPROM le contenu actuel de la structure */ void sauvegardeEEPROM() { // Met à jour le nombre magic et le numéro de version avant l'écriture ms.magic = STRUCT_MAGIC; ms.struct_version = STRUCT_VERSION; EEPROM.put(0, ms); } /** Charge le contenu de la mémoire EEPROM dans la structure */ void chargeEEPROM() { // Lit la mémoire EEPROM EEPROM.get(0, ms); // Détection d'une mémoire non initialisée byte erreur = ms.magic != STRUCT_MAGIC; // Valeurs par défaut struct_version == 0 if (erreur) { // Valeurs par défaut pour les variables de la version 0 ms.valeur_1 = 42; } // Valeurs par défaut struct_version == 1 if (ms.struct_version < 1 || erreur) { // Valeurs par défaut pour les variables de la version 1 ms.valeur_2 = 13.37; } // Valeurs par défaut pour struct_version == 2 if (ms.struct_version < 2 || erreur) { // Valeurs par défaut pour les variables de la version 2 strcpy(ms.valeur_3, "Hello World!"); } // Sauvegarde les nouvelles données