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");
}
}