Stockage sur EEPROM

Bonjour,
Tout d’abord je ne m’y connais pas vraiment en stockage sur l’EEPROM de l’Arduino mega, donc j’aurai besoin d’un peu d’aide …
Mon matériel:
Clavier matriciel 16 touches
LCD 4*20
Et une arduino mega 2560

J’ai créé un programme avec un menu qui grâce au clavier, je peux écrire une heure (format HH et les minutes format MM) ou je veux que ma porte s’ouvre et se referme.
Le menu seul fonctionne,mais j’aimerais pouvoir enregistrer ses données (heures minutes )dans l’EEPROM , afin d’éviter de retaper les heures tous les jours…

j’ai essayé de comprendre ce tuto arduino et de l’utiliser avec les données de mon menu mais en vain …
#include <EEPROM.h>
#include <Arduino.h> // for type definitions

template int EEPROM_writeAnything(int ee, const T& value)
{
const byte* p = (const byte*)(const void*)&value;
unsigned int i;
for (i = 0; i < sizeof(value); i++)
EEPROM.write(ee++, *p++);
return i;
}

template int EEPROM_readAnything(int ee, T& value)
{
byte* p = (byte*)(void*)&value;
unsigned int i;
for (i = 0; i < sizeof(value); i++)
*p++ = EEPROM.read(ee++);
return i;
}

Si je n’ai pas été assez claire , dites le moi , merci :slight_smile:

MonkeyDmina

Voici une petite fonction avec exemple que j’ai utilisé récemment:

#include <EEPROM.h>
// For saving settings in EEPROM
/*
 !WARNING!
 Writing takes 3.3ms.
 Maximum life of the EEPROM is 100000 writings/readings.
 Be careful not to use it too much, it is not replacable!
 */
#define adr_eprom_test 0                 // For the test for 1st time init of the Arduino (First power on)
#define adr_eprom_alarm_min1 2           // Default alarm min is 3.60v
#define adr_eprom_nb_cells_batt1 4       // Automaticaly detected and calculated
#define adr_eprom_alarm_on_off_batt1 6   // 0=FALSE/Disable 1=TRUE/Enable
#define adr_eprom_alarm_interval 8       // Audio warning alarm interval

Init:

// Test for 1st time init of the Arduino (First power on)
  int test = read_eprom(adr_eprom_test);
  if (test != 123)
  {
    write_eprom(adr_eprom_test,123);
    write_eprom(adr_eprom_alarm_min1,alarm_min1);
    write_eprom(adr_eprom_alarm_on_off_batt1,alarm_on_off_batt1);
  }

Les fonctions ecture/écriture:

uint16_t GMessage::read_eprom(int address){
  return  (uint16_t) EEPROM.read(address) * 256 + EEPROM.read(address+1) ;
}

void GMessage::write_eprom(int address,uint16_t val){
  EEPROM.write(address, val  / 256);
  EEPROM.write(address+1,val % 256 );
}

A adapter pour tes besoins :wink:

Bonsoir,

Pourquoi s'embêter? les heures, ça va de 0 à 23 et les minutes de 0 à 59. donc une paire "heures-minutes" tient sur deux octets :

byte heure, minute;

ensuite, pour enregistrer les données :

#define adr_heure 0;  // adresse en eeprom de l'heure (ici 0 pour l'exemple)

EEPROM.write(adr_heure, heure);
EEPROM.write(adr_heure + 1, minute);

et bien sûr :

heure = EEPROM.read(adr_heure);
minute = EEPROM.read(adr_heure + 1);

si ça peut aider...

Merci pour vos réponses, et du coup jë pense que le plus adapté serait ton code Super_Cinci .

Et ton code John_lenfr pourra sûrement le servir pour un autre projet que je déciderai de faire :slight_smile:
Bonne soiré

MonkeyDmina

Oui c'est le même mais déjà adapté à ton cas donc celui de Super_Cinci est mieux prend celui la
:wink:

Il y a juste ‘’ #define ard_heure 0;" le ‘‘0’’ équivaut à quoi? ^^`

C'est écrit en commentaire du code:

// adresse en eeprom de l'heure (ici 0 pour l'exemple)

Ah je viens de capter!
(j'avais vu le commentaire )

Pardon ^^