Programmation d'une Eeprom 24lc512

Bonjour, j'ai perdu le fil dans un autre Topic alors j'en recrée un ici.

Je travaille actuellement sur un projet de récolte de données à envoyer par sms( via arduino avec un module SIM900).

mon programme mesure et quantifie une consommation de courant qui doit être enregistrée au fur et à mesure ( les données doivent être écrasée à chaque nouvel enregistrement pour gagner de la place). Une fois la consommation atteinte, on stocke la valeur finale. On répète l'ensemble du procédé jusqu'à avoir 5 données enregistrées que l'on envoie dans un sms grâce à un module sim900. une fois le sms envoyé, on efface les 5 valeurs enregistrée et on recommence tout depuis le début. tout le programme de mesure et interprétation est déjà fait, il n'y à plus qu'a ajouter l'enregistrement et la lecture de données. par un souci de temps j'aimerai utilisé l'eeprom 24lc512 que j'ai sous la main ( je verrai ensuite si je dois le remplacer ou non). est ce qu'il existe des programmes fait pour ce composant qui me permettrait de stocker et lire des valeurs??? merci à vous
Je vous mets ci dessous le programme que j'ai fais commenté. Un grand merci d'avance

#include <Servo.h>// Bibliotheque pour le servo-inverseur
  #define DEBUG //Bibliotheque du mode debogage
  #include <SoftwareSerial.h>//bibliotheque pour le module SIM900
  SoftwareSerial SIM900(2,3);// PIN Rx et Tx du module GSM
    
  int switchState = 0; // On integre une valeur d'etat du bouton poussoir.
  int Ncycle=0; //On cree une adresse dans l'EEPROM pour stocker le nombre de cycle.
  int cycle=0; //On cree une valeur de nombre de cycle.
  int angle; // valeur de l'angle du servo 
  
  const int c=0;// valeur 0 pour comparer l'inversion
  const int sensorPin = A0;  // On informe sur le point de connexion du capteur de courant.
  
 float consommation=0;//On cree une adresse dans l'EEPROM pour stocker la valeur de consommation.
 float it=0; //On inegre une valeur de consommation de courant.

 const float baselineCurrent= 50; // On donne une valeur d'amperage a comparer (ici 500mA).
 
 
  boolean b=false; //On integre un etat tout ou rien pour l'inversion de courant.
  Servo myServo; //Variable sevo pour l'inverseur
  
  void setup(){
  
  Serial.begin(9600);// On  ouvre le port serie. 
  
  pinMode(4,INPUT); //  On definit le bouton poussoir de reset.
  pinMode(5,OUTPUT); // On definit la sortie digitale pour la LED.
  
  myServo.attach(9);} // On definit la pin d'attache de la commande du doubleswitch.
 

void loop(){
  
   float sensorVal= analogRead(sensorPin); // Lecture de la tension emise par le capteur de courant.
   float voltage = (sensorVal*5.0)/1023.0; //Convertion de la lecture du capteur.
   float current = (voltage-2.545)*959.692898; //Convertion de la lecture en courant.
   static char etat = 0; //On integre la valeur d'etat statique.

   switch(etat){

    case(0): // etat initial.

     switchState = digitalRead(2);// on dit ou effectuer la lecture du niveau du bouton poussoir.
     digitalWrite(3,LOW); // on éteint la LED.
     myServo.write(angle);// on ecrit la valeur de l'angle du servo
     
     if (b==c){ // si b=0.
       angle=angle-10;// on decompte l'angle de 10 
       delay(100);} // delay de 0,1sec
     
     if (b==!c){ // si b=1.
       angle=angle+10;// on incremente l'angle de 10
       delay(100);}//delay de 0.1sec
       
     if (angle>=179){//si l'angle est superieur à 179
       angle=179;} // l'angle ne depasse pas 179
       
     if(angle<=0){// si l'angle est inferieur à 0
       angle=0;} // l'angle ne depasse pas 0
       
     if ((current>=baselineCurrent)&&(it<2000.0)&&((angle==0)||(angle==179))) // Si le courant est superieur a la valaur minimale.
       etat = 1;//On passe a l'etat 1
     
     break;
    
    case(1)://Premier etat.
    
     it = it + current; // Calcul de la consommation de courant.
     
     
     Serial.print ("Signal: ");// Ecriture dans le moniteur serie.
     Serial.print (voltage) ;// Ecriture dans le moniteur serie.
     Serial.print ("Current: ");// Ecriture dans le moniteur serie.
     Serial.print (current); // Ecriture dans le moniteur serie.
     Serial.print ("it: "); // Ecriture dans le moniteur serie.
     Serial.println (it); // Ecriture dans le moniteur serie.
     
     delay(1000);// On temporise pour etaler les mesures a  chaque seconde.
      
     if (it >=2000.0)//Si la consommation est suffisante (le chlore est prêt).
       etat=2;//On passe à l'etat 2.
       
       break;
       
      case(2)://Second etat.
      
      digitalWrite(5,HIGH); // on allume la LED pour indiquer que la solution est prete.
      switchState = digitalRead(4);// on  effectue la lecture de l'etat du bouton poussoir.
      
      if (switchState==HIGH) // si le BP est enclenché.
        etat=3;//On passe à l'etat 3.
      
      if (switchState==LOW) // si le BP n'est pas enclenché.
        etat=2;//on reste à l'etat 2.
      
      break;
      
      case(3)://Troisieme etat.
      
      digitalWrite(5,LOW);//On eteint la led de signalement.
      it=0;//On efface la valeur de consommation.
      b=!b; //On inverse la valeur de b pour inverser le sens du courant.
      
      
      cycle=cycle+1; // on ajoute un cycle au nombre déjà effectue.
      
      
      Serial.print ("cycle: ");// Ecriture dans le moniteur serie.
      Serial.println (Ncycle); // Ecriture dans le moniteur serie.

      if (cycle<5)// Si le nombre de cycle est inférieur à 5.
        etat=0;//On retourne à l'etape initale
        
      else if (cycle=5)// Si le nombre de cycle est inférieur à 5.
        etat=4;// On passe a l'etape 4.
          
      break;
        
      case(4)://Quatrieme etape.
         
     SIM900.begin(2400);// ouverture du port SIM900
     Serial.println("configuration par defaut");// Ecriture dans le moniteur serie.
     SIM900.println("ATZ"); // Pour remettre les configuration par defaut
     GetSIM900();// on envoi la commande au module SIM900
  
     Serial.println("affichage du numero des erreurs");// Ecriture dans le moniteur serie.
     SIM900.println("AT+CMEE=1"); // Pour afficher le numero de l'erreur
     GetSIM900();// on envoi la commande au module SIM900

     Serial.println("Code PIN");// Ecriture dans le moniteur serie.
     SIM900.println("AT+CPIN=1234"); // Code PIN
     GetSIM900();// on envoi la commande au module SIM900

     delay(20000); // Connexion au réseau

     #ifdef DEBUG
     Serial.println("Operateur");// Ecriture dans le moniteur serie.
     SIM900.println("AT+COPS?"); // Opérateur
     GetSIM900();// on envoi la commande au module SIM900
     delay(15000);

      //SET center number server needed for free provider
     Serial.println("envoi de la commande: AT+CSCA=\"+32475161616\"");// Ecriture dans le moniteur serie.
     SIM900.print("AT+CSCA=\"+32475161616\"\r");
     GetSIM900();// on envoi la commande au module SIM900
     delay(15000); // Connexion au réseau

     Serial.println("Etat de la connexion au reseau :");// Ecriture dans le moniteur serie.
     Serial.println("La connexion est etablie si +CREG: 0,1");
     SIM900.println("AT+CREG?"); // Connexion au réseau
     GetSIM900();// on envoi la commande au module SIM900
  
     #endif

     Serial.println("Activation du mode SMS");// Ecriture dans le moniteur serie.
     SIM900.println("AT+CMGF=1"); // Activation du mode SMS
     GetSIM900();// on envoi la commande au module SIM900

     Serial.println("Envoi du numero de telephone");// Ecriture dans le moniteur serie.
     SIM900.println("AT+CMGS=\"+32471469547\""); // Envoi du numéro de téléphone
     GetSIM900();// on envoi la commande au module SIM900

     Serial.println("Corps du message");// Ecriture dans le moniteur serie.
     SIM900.println("j'ai reussi a programmer le module gsm"); // Corps du message
     Serial.println("CTR+Z");// Ecriture dans le moniteur serie.
     SIM900.write(0x1A); // CTR+Z
     GetSIM900();// on envoi la commande au module SIM900

  cycle=0; // On efface le nombre de cycle
  etat=5;// On passe a l'etape 5.
        
  }
}
 void GetSIM900()
{
  delay(2000);
  
  if((SIM900.available()))
  {
    Serial.print("\n");
    delay(3000);
    while(SIM900.available())
    {
      Serial.print((char)SIM900.read()); // On vide la mémoire tampon du SIM900
    }
    Serial.print("\n");
  }
}

Des choses par là:Arduino Playground - InterfacingWithHardware

J'ai trouvé ceci:
http://playground.arduino.cc/Code/I2CEEPROM24LC512

mais je ne trouve pas la bibliothéque #include "eeprom24LC512.h" qu'on me demande d'inclure, comment faire??

Le .h est juste en haut de la page

Donc je dois créer un nouvel onglet nomé "eeprom24LC512.h" et dans cet onget je doit mettre :
#ifndef EEPROM24LC512_h
#define EEPROM24LC512_h

#define EE24LC512MAXBYTES 64000

#endif

c'est bien cela, pcq quand je fais cela j'ai une erreur de compilation:

core.a(main.cpp.o): In function main': C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/main.cpp:11: undefined reference to setup'
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/main.cpp:14: undefined reference to `loop'

En compilant quel code?

En fait je ne sais pas commentest ce qu'on met le .h dans le programme. Comment structurer ce programme....

Faudrait peut être commencer par là alors : http://arduino.cc/en/Guide/Libraries

Oui d'accord il dit au départ qu'il faut 3 fichier pour programmer mais je ne sais pas ou on peut les télécharger. j'ai fais le tour de la page et je ne trouve pas.

Dans le lien que l'on t'a donné précédemment il y a le contenu des 3 fichiers.
Le nom des fichiers est en gras, grosse police.
Tu fais un copié-collé du code dans un éditeur quelconque.
Tu le sauves sous le nom indiqué.
Et tu mets le tout dans un répertoire sketchbook/libraries/eeprom24LC512

Quel genre d'éditeur, du traitement de texte? genre word?
Je sais que je suis pénible mais je n'ai jamais fait cette manip auparavant

Attend j'ai trouvé, j'ai créé tout les fichier et les mis toutles 3 dans le même dossier, donc maintenant plus besoin d'importer de bibliothèque si?

Le dossier en question doit porter le même nom que le fichier principal de la librairie (eeprom24LC512 en l’occurrence).
Il faut le mettre dans le répertoire libraries comme expliqué avant.
Il pourra ainsi être automatiquement appelé par la suite.

Ok merci c'est fait et les trois onglets apparaissent bien dans le programme donc ça doit être bon.

Oui et non.
Si les onglets apparaissent c'est que tu a copié les fichiers dans le répertoire de ton projet. Cette librairie ne sera visible que de ce projet.
Si tu veux que la librairies soit visible de n'importe lequel de tes projets, il faut qu'elle soit placée dans le répertoire libraries au même niveau que tes répertoires projet.

Et leurs déclarations ne se fait plus entre " " mais entre < >

Maintenant j'ai une autre question. Voila je dois pouvoir lire et enregistrer plusieurs données dans différentes adresses mais ce que je ne sais pas comment procédé il y a différents paramètres (DEVICEADDRESS,theMemoryAddress) donc moi j'ai à enregistrer:
=>5 données sous forme de float ( si besoin je peux les transformer en valeur int)
=> une données sous forme int
=> une valeur tout ou rien.
Je dois pouvoir gérer ces données constamment ( je travaille dessus environs toutes les minutes)

Comment est ce que je dois créer les différentes adresses et sous quel format dois-je les mettre??
Un grand merci

je n'avait besoin d'elles que dans un autre projet, j'ai donc simplement copier-coller les fichier d'un dossier de programme à un autre (je ne trouve pas le dossier librairie en fait mais c'est déjà bon comme ça je pense)

Bonjour, voila j'ai compris certains point,nottament que DEVICEADRESS représente l'adresse propre du composant ( 0x50 si j'ai bien compris)
Par contre ce que le tuto n'explique pas c'est si il estpossible d'écrire plusieurs informations dans la mémoire (j'en ai 7 différentes) et de pouvoir intéragir avec celle-ci. Ou alors faut il prévoir 7 mémoires différentes??

Bonjour,

Petrus6248:
Bonjour, voila j'ai compris certains point,nottament que DEVICEADRESS représente l'adresse propre du composant ( 0x50 si j'ai bien compris)
Par contre ce que le tuto n'explique pas c'est si il estpossible d'écrire plusieurs informations dans la mémoire (j'en ai 7 différentes) et de pouvoir intéragir avec celle-ci. Ou alors faut il prévoir 7 mémoires différentes??

Il suffit de les écrire les uns après les autres l'incrémentation de l'adresse se fait automatiquement.
Idem pour la lecture.
@+