Enregistrement de deux variables sur eeprom d'arduino
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Enregistrement de deux variables sur eeprom d'arduino



  1. #1
    invite9cef8d13

    Enregistrement de deux variables sur eeprom d'arduino


    ------

    Bonsoir à tous,

    Je souhaiterais enregistrer deux variables dans la mémoire eeprom d'un arduino (pour la sauvegarder à chaque extinction et la reprendre au démarrage).

    Je n'ai malheureusement pas encore l'arduino pour pouvoir l'essayer, cependant a priori il y aurait des problèmes dans ce code, quelqu'un serait il capable de me donner un coup de pouce et m'expliquer ce qui ne va pas ?

    Voici le code (ce n'est pas le code complet mais seulement la partie qui compte l'enregistrement, les variables sont également "fictive"

    Code:
    #include <EEPROM.h>
    
    int x = 0; // position en cours, ou reprise de la dernière position enregistré au lancement de l'arduino
    int positionpoursauv = 0; //stockage de la position pour sauvegarde
    int x2 = 0; // position en cours, ou reprise de la dernière position enregistré au lancement de l'arduino
    int positionpoursauv2 = 0; //stockage de la position pour sauvegarde
    
    
    void EEPROMWriteInt1(int adress, int value){
        byte two = (value >> 8) & 0xFF;
        byte one = (value & 0xFF);
        EEPROM.write(adress, two);
        EEPROM.write(adress + 1, one);
    }
    
    int EEPROMReadInt1(int address){
        
          int two = EEPROM.read(address);
          int one = EEPROM.read(address + 1);
         
          int x = ((two << 0) & 0xFF) + ((one << 8) & 0xFFFF);
    }
    int EEPROMReadInt2(int address){
         
          int two = EEPROM.read(address);
          int one = EEPROM.read(address + 1);
         
          int x2 = ((two << 0) & 0xFF) + ((one << 8) & 0xFFFF);
    }
    
    void setup() {
      // lecture au démarrage de l'arduino du x de la dernière sauvegarde
      EEPROMReadInt1(0);
      EEPROMReadInt2(2);
    }
    
    void loop() {
      // suite à une action (inter)
      //reprise du nouveau x pour nouvelle sauvegarde
    
      int address;
     
      positionpoursauv = x;
      positionpoursauv2 = x2;
     
      // ecriture de la nouvelle position
      EEPROMWriteInt(address, positionpoursauv);
     
      address+=2;
     
      // ecriture de la nouvelle position
      EEPROMWriteInt(address, positionpoursauv2);
    }
    Si quelqu'un peut me dire ce qu'il en pense ?

    Merci !

    -----

  2. #2
    jiherve

    Re : Enregistrement de deux variables sur eeprom d'arduino

    Bonjour,
    pourquoi deux routines de lecture?
    Comme ce est qui est lu est un octet les masques ne servent à rien.
    dernières choses :
    Il faudra penser à bloquer les interruptions lors des écritures si la procédure arduino ne le fait pas.
    Il manque un drapeau de validité du contenu de l'Eeprom, check sum ou équivalent, qui permettra de savoir si l'opération de sauvegarde a bien eu lieu et de facto si celle de restitution est bien pertinente.
    JR
    Dernière modification par jiherve ; 03/08/2015 à 08h33.
    l'électronique c'est pas du vaudou!

  3. #3
    invite9cef8d13

    Re : Enregistrement de deux variables sur eeprom d'arduino

    Bonjour,

    Merci d'être venu sur cette discussion.
    Je n'ai pas précisé que j'ai besoin de stocker sur deux octets chacune mes deux variables, étant donné qu'elles peuvent être supérieur à 255.
    Pour la validation, c'est en effet une bonne idée. Mais pas forcément prioritaire, l'enregistrement de ces données permet de garder en mémoire la longueur d'une "ligne" et la position du chariot sur cette ligne, d'un jour à l'autre.
    L'opérateur ayant un écran lui fournissant ces données, il lui est possible de contrôler la pertinence de la lecture, et le cas échéant, remettre à zéro et recommencer la "calibration".

    Les deux routines de lectures, est-ce mieux ainsi par exemple?

    Code:
    int EEPROMReadInt(int address){
        
          int two1 = EEPROM.read(address);
          int one1 = EEPROM.read(address + 1);
          int two2 = EEPROM.read(address + 2);
          int one2 = EEPROM.read(address + 3);
            
          int x = ((two1 << 0) & 0xFF) + ((one1 << 8) & 0xFFFF);
          int x2 = ((two2 << 0) & 0xFF) + ((one2 << 8) & 0xFFFF);
    
    }
    Pour les masques, je vais potasser le sujet car je n'ai pas encore bien compris (ce code est inspiré d'un tutoriel, je ne sais pas si j'ai le droit de mettre un lien ?)

    Merci

  4. #4
    jiherve

    Re : Enregistrement de deux variables sur eeprom d'arduino

    Bonsoir,
    Comme l'EEPROM ne contient que des octets alors :
    two1<<0 & 0xFF = two1 le masque ne sert à rien , le décalage non plus.
    one1<<8 $ 0xFFFF = one1,00000000 le masque ne sert à rien puisque les 8 LSB seront forcement à zéro.
    Mais ceci ne vaut que si tu déclares: byte two1,....
    JR
    l'électronique c'est pas du vaudou!

  5. A voir en vidéo sur Futura

Discussions similaires

  1. Arduino, accéléromètre et mémoire EEPROM
    Par invite2a005e36 dans le forum Électronique
    Réponses: 8
    Dernier message: 12/05/2015, 17h39
  2. Les fonctions à deux variables
    Par invite6ab83281 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 16/05/2011, 17h49
  3. Écriture de l'EEPROM interne avec PIC18F: Un octet sur deux de perdu?
    Par invite48613fdf dans le forum Électronique
    Réponses: 9
    Dernier message: 08/09/2010, 23h41
  4. Réponses: 2
    Dernier message: 13/01/2010, 07h31
  5. Réponses: 0
    Dernier message: 21/11/2008, 07h20
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...