EEPROM

bonjour a tous,

Tout d 'abord meilleurs vœux a tous pour cette nouvelle année.

je suis sur un projet de digicode ou l(on peut enregistrer un nouveau code sans passer par la case programmation sur PC.
en gros au démarrage du digicode on a la possibilité de rentrer un nouveau code si un appui touche est détecter pendant le setup. Cela marche car j arrive a entrer dans ma fonction " enregistrement du nouveau code".La n 'est pas le problème.
le souci est que je ne sais pas trop quelle méthode utiliser pour écrire ce code dans l’EEPROM.
dois-je utiliser EEPROM.write ou plutôt EEPROM.put en créant un structure type" struct codebon[4]"
ensuite une fois le code enregistré dans l 'EEPROM comment le comparer avec les 4 chiffres taper par l’utilisateur sur le clavier pour voir si c’est le bon code ou non.

merci d’avance pour les éventuelles pistes que vous me donnerez .
:slight_smile:

meilleurs vœux aussi!

les 2 options sont possibles, mais le plus simple est de stocker (et relire) avec une structure.

pour comparer avec ce que tape l'utilisateur, il suffit aussi de stocker de la même manière l'entrée utilisateur dans une structure de même nature et ensuite vous pouvez utiliser la fonction memcmp() pour comparer les 2 structures

if (!memcmp(&entreeUtilisateur, &bonCode, sizeof(bonCode))) {
  // on a trouvé

} else {
  // erreur code
}

essayez ce code par exemple (console série mise à 115200 bauds)

const uint8_t longueurCode = 4;
struct digicode_t {
  uint8_t code[longueurCode];
};

digicode_t bonCode = {'A', 'C', '1', '2'};
digicode_t test1 = {'B', 'D', '3', '5'}; // le code est faux
digicode_t test2 = {'A', 'C', '1', '2'}; // le code est le bon

void setup() {
  Serial.begin(115200);

  if (!memcmp(&bonCode, &test1, sizeof(digicode_t))) Serial.println(F("test1 est OK"));
  else Serial.println(F("test1 est FAUX"));

  if (!memcmp(&bonCode, &test2, sizeof(digicode_t))) Serial.println(F("test2 est OK"));
  else Serial.println(F("test2 est FAUX"));
}

void loop() {}

Si vous avez besoin de voir comment bien gérer un flux asynchrone genre keypad - vous pouvez jeter un oeil à mon petit tuto sur le sujet

merci pour le tuyau JML et ravie que "memcmp" peut exécuter la tache souhaitée.

toute fois une autre question me taraude.....

quel est la syntaxe pour entrer les valeur dans la structure :
je m'explique

const int TailleBonCode = 4;
struct bonCode{
 char codebon[TailleBonCode];
};

voici ma petite structure pour le bon code
ensuite

     char customKey = customKeypad.getKey();
    if(customKey){

et voici la partie ou l on appuis sur un touche du clavier a membrane.
comment formuler la synthaxe pour que mn table

merci pour le tuyau JML et ravie que "memcmp" peut exécuter la tache souhaitée.

toute fois une autre question me taraude.....

quel est la syntaxe pour entrer les valeur dans la structure :
je m'explique

const int TailleBonCode = 4;
struct bonCode{
 char codebon[TailleBonCode];
};

voici ma petite structure pour le bon code
ensuite

    char customKey = customKeypad.getKey();
    if(customKey){

et voici la partie ou l on appuis sur un touche du clavier a membrane.
comment formuler la syntaxe pour que le tableau de ma structure se remplisse avec les touches appuyées.

je sais c'est une question surement stupide mais je n ai trouvé aucun exemple me montrant la méthode.

si jamais vous avez un article a me conseiller je suis preneur.
JML j ai lu votre article , super je m y replongerai pour un autre projet ou surement pour complexifier ce programme ci :slight_smile:

Si vous reprenez mon exemple de code la structure définit à quoi ressemble un code - soit en fait juste un tableau de 4 Octets.

const uint8_t longueurCode = 4;
struct digicode_t {
  uint8_t code[longueurCode];
};

En la définissant sous forme de structure C’est un nouveau type qu’on a créé, le type digicode_t.

Donc pour créer une variable de ce type, comme pour les autres types on écrit type momDeVariable;et donc pour avoir une variable toto de type digicode_t on va écrire digicode_t toto;et ensuite c’est la syntaxe du C ou C++ qui s’applique pour accéder à un élément de la structure: on va écrire par exempletoto.code[0] = ‘A’;pour écrire dans la première case du tableau.

Dans le code du depart je définissais trois variables de type digicode_t et je profitais du fait qu’on peut affecter directement lors de la déclaration de la variable les valeurs des éléments pour les initialiser.

Clair ?

pour votre question, si vous lisez mon tuto vous verrez que je remplis un tableau avec les touches appuyées... c'est un peu le même principe. (ici la structure est un peu superflue puisque c'est un simple tableau de 4 éléments et vous n'avez rien de plus, donc on pourrait juste utiliser un tableau. Mais si vous vouliez autoriser 3 personnes chacune ayant son code perso et son nom dans la structure autorisée pour dire "bonjour Georgette" ou "Bonjour Raymond" en fonction du badge présenté, alors la structure permettait de grouper tout cela.

hello
merci pour vos indications JML ,les explications sur les structures m ont fait gagner un temps considérable de recherche sur le web.
vous avez parfaitement répondu a ma question merci beaucoup.
je vais pouvoir avancer et surtout passer du temps sur vos tutos. :slight_smile: