Visu des paramètres de ma serre

Présentez vous pour ensuite pouvoir poster des messages sur nos forums

Visu des paramètres de ma serre

Message non lude Paphio20 » Jeu 10 Jan 2013 13:36

Bonjour
je suis nouveau sur votre forum que je consulte depuis que je me suis mis a programmer les modules Arduino mais comme je suis
un peu novice dans la matiere je me suis decidé a m'inscrire sur votre forum.
Je suis en train de programmer un mega 2560 + TFT + ds1820 + controle de chauffage /ventilation / alarme et plage de temperature sur 24 heures car je cultive les orchidees depuis environ 40 ans et je me suis dit qu'avec les modules qui existaient
il y avait surment un beau programmateur et une belle interface sur ecran TFT tactile pour la visu a faire.
Mon soucis a l'heure qu'il est c'est la reception des temperatures via recepteur Aurel 433 mhz .
A la mise en route de ma platine tous les paramètres sont affichés normalement meme le premier envoi de l' emetteur qui donne pour l'instant la temperature de la serre.
Mais aprés ce paramètre reste toujours a une valeur de 0.
je tourne en rond sur ce sujet.
J'espere que quelqu'un pourra me donner une solution.
MERCI ..
Paphio20
 
Messages: 17
Inscription: Mar 8 Jan 2013 14:39

Re: Visu des paramètres de ma serre

Message non lude Sarish » Jeu 10 Jan 2013 15:40

Alors comme tout dépannage il nous faut :
Ide utilisé, version
Le code
et si tu peut le cablage
Sarish
 
Messages: 33
Inscription: Lun 9 Juil 2012 10:22

Re: Visu des paramètres de ma serre

Message non lude Paphio20 » Jeu 10 Jan 2013 18:23

merci pour le message ...
IDE 0022
Le cablage doit être bon car j'ai fait des essais avec les exemples qui sont dans la librairie <Virtualwire.h> .
L'émission et la réception marchent bien .

le code actuel pour l'émission de la temperature est:

Code: Tout sélectionner
#include <VirtualWire.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#define ONE_WIRE_BUS 47
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
char msg[6];
const int LED=13;
void setup()
{
    sensors.begin();
    Serial.begin(9600);
    Serial.println("Tuto VirtualWire");

    vw_setup(2000);      
    vw_set_tx_pin(10);  //mega 2560
    pinMode(LED, OUTPUT);
   
}

void loop()

    Serial.print("TX ... ");
    sensors.requestTemperatures();
    float temperatura = sensors.getTempCByIndex(0);
    dtostrf(temperatura, 6, 2, msg);
    vw_send((uint8_t *)msg, strlen(msg)); 
    digitalWrite(LED,HIGH);
    vw_wait_tx();
    Serial.println("Done !");
    digitalWrite(LED,LOW);
   delay(200);
}


et le code de reception est:
Code: Tout sélectionner
void loop()
{

  int x, y;
  int ves = 0;
  t = rtc.getTime();
 
  if (t.date==0)
  {
    Reglage_Horloge();
  }
  else
  {
    DessineEcran();
    ImprimeDate(); 
  }
 
  t = rtc.getTime();
  myGLCD.setFont(DotMatrix_M);
 
  while (true) 
  { 
    if (oldsec!=t.sec)
    {
      if ((t.sec==0) and (t.min==0) and (t.hour==0))
      {
        EffaceDate();
        ImprimeDate();

      }
      if (t.sec==0)

      myGLCD.setFont(DotMatrix_M);
      myGLCD.setBackColor(0,0,0);
      myGLCD.setColor(255,255,0);
       
      if (t.hour<10)
      {
        myGLCD.setFont(DotMatrix_M);
        myGLCD.printNumI(0, 30, 50);
        myGLCD.printNumI(t.hour, 46,50);
      }
      else
      {
        myGLCD.setFont(DotMatrix_M);
        myGLCD.printNumI(t.hour, 30, 50);
      }
       if (t.min<10)
      {
        myGLCD.setFont(DotMatrix_M);
        myGLCD.printNumI(0, 70, 50);
        myGLCD.printNumI(t.min, 86, 50);
      }
      else
      {
        myGLCD.setFont(DotMatrix_M);
        myGLCD.printNumI(t.min, 70, 50);
      }     
      if (t.sec<10)
      {
        myGLCD.setFont(DotMatrix_M);
        myGLCD.printNumI(0, 110, 50);
        myGLCD.printNumI(t.sec, 126, 50);
      }
      else
      {
        myGLCD.setFont(DotMatrix_M);
       myGLCD.printNumI(t.sec, 110, 50);
      }
      oldsec=t.sec;
      Serial.println(rtc.getTimeStr());

      Gestion_Confort_Economique();
      //------------------------------------------------------------------
     
      //-----------------------------------------------------------------
   
       
     if (T==true)
 {
        TempTemporaire=Tp_Conf;
        Serial.print(TempTemporaire);
        Serial.println();
        OffsetTemporaire=Off_Tp_Conf;
        Serial.print(OffsetTemporaire);
        Serial.println();
        AlarmeTemporaire=Alar_Tp_Conf;
        Serial.print(AlarmeTemporaire);
        Serial.println();
        AlarTempChauff();
        myGLCD.setFont(SmallFont);     
        myGLCD.setColor(255,255,0);
        myGLCD.setBackColor(0, 0, 153);
        myGLCD.print("Conf",240,115);
        myGLCD.printNumF(TempTemporaire,1,240,130);
         myGLCD.setBackColor(0, 0, 0);
        myGLCD.setColor(0,255,0);
        myGLCD.printNumF(S0,1,45,130);
        myGLCD.printNumF(S1,1,45,110);
        myGLCD.printNumF(S2,1,60,195);
        myGLCD.printNumF(S3,1,120,195);
    //    myGLCD.printNumF(S4,1,120,190);
        myGLCD.printNumF(humidity,1,86,110);
        myGLCD.printNumF(temp_c,1,86,130);
         Recepteur();
      }
      else
      {
        TempTemporaire=Tp_Eco;
        Serial.print(TempTemporaire);
        Serial.println();
        OffsetTemporaire=Off_Tp_Eco;
        Serial.print(OffsetTemporaire);
        Serial.println();
        AlarmeTemporaire=Alar_Tp_Eco;
        Serial.print(AlarmeTemporaire);
        Serial.println();
        AlarTempChauff();
        myGLCD.setFont(SmallFont);     
        myGLCD.setColor(255,153,255);
        myGLCD.setBackColor(0, 0, 153);
        myGLCD.print("Eco ",240,115);
        myGLCD.printNumF(TempTemporaire,1,240,130);
        myGLCD.setBackColor(0, 0, 0);
        myGLCD.setColor(0,255,0);
        myGLCD.printNumF(S0,1,45,130);
        myGLCD.printNumF(S1,1,45,110);
        myGLCD.printNumF(S2,1,60,195);
        myGLCD.printNumF(S3,1,120,195);
     //   myGLCD.printNumF(S4,1,120,190);
        myGLCD.printNumF(humidity,1,86,110);
        myGLCD.printNumF(temp_c,1,86,130);
       Recepteur();
     }
         
     if( (long)( millis() - Enregistrement_Temp ) >= 0)
  { 
  Enreg_Historique_Temp_Int();
  Enregistrement_Temp += 60000; //Minuterie (Toutes les 1 minutes)/
  Humidite();

  }

    }   
    if (myTouch.dataAvailable())
    {
      myTouch.read();
      x=myTouch.getX();
      y=myTouch.getY();

      //-------------Bouton de l'écran des Menus -----------------//

      if (((y>=5) && (y<=45))&&((x>=355) && (x<=395)))
      {
        myGLCD.setColor (255, 0, 0);
        myGLCD.drawRoundRect(355,5,395,45);
        Serial.print("Menu general ");
        Serial.println();     
        Menu();
        Serial.println();
        Serial.print("1 = Horloge ");
        Serial.println();
        Serial.print(rtc.getDOWStr());
        Serial.print("*---*");
        Serial.print(rtc.getDateStr());
        Serial.print("*---*");
        Serial.println(rtc.getTimeStr());
        Serial.println();
      }

    }   
    delay(2000);
    t = rtc.getTime();

  }

}


Quand je mets sous tension le programme se fait bien et les paramètres sont bien affichés sur le TFT y compris la valeur de la température qui vient du récepteur.
Mais à la deuxieme boucle ,la valeur de la température qui vient du récepteur a disparue.
Paphio20
 
Messages: 17
Inscription: Mar 8 Jan 2013 14:39

Re: Visu des paramètres de ma serre

Message non lude Sarish » Ven 11 Jan 2013 11:27

Il me manque, ou alors je n'ai pas trouvé ta fonction Recepteur(); le problème doit venir d'elle.
edit : En faite a part cette fonction je ne voit nul part ailleurs une quelconque réception ^^
Sarish
 
Messages: 33
Inscription: Lun 9 Juil 2012 10:22

Re: Visu des paramètres de ma serre

Message non lude Paphio20 » Ven 11 Jan 2013 13:05

Merci d'avoir regarder mon problème mais la fonction recepteur se trouve dans une partie de la boucle while .
ici en rouge--
if (T==true)
{
TempTemporaire=Tp_Conf;
Serial.print(TempTemporaire);
Serial.println();
OffsetTemporaire=Off_Tp_Conf;
Serial.print(OffsetTemporaire);
Serial.println();
AlarmeTemporaire=Alar_Tp_Conf;
Serial.print(AlarmeTemporaire);
Serial.println();
AlarTempChauff();
myGLCD.setFont(SmallFont);
myGLCD.setColor(255,255,0);
myGLCD.setBackColor(0, 0, 153);
myGLCD.print("Conf",240,115);
myGLCD.printNumF(TempTemporaire,1,240,130);
myGLCD.setBackColor(0, 0, 0);
myGLCD.setColor(0,255,0);
myGLCD.printNumF(S0,1,45,130);
myGLCD.printNumF(S1,1,45,110);
myGLCD.printNumF(S2,1,60,195);
myGLCD.printNumF(S3,1,120,195);
// myGLCD.printNumF(S4,1,120,190);
myGLCD.printNumF(humidity,1,86,110);
myGLCD.printNumF(temp_c,1,86,130);
Recepteur();
}
else
{
TempTemporaire=Tp_Eco;
Serial.print(TempTemporaire);
Serial.println();
OffsetTemporaire=Off_Tp_Eco;
Serial.print(OffsetTemporaire);
Serial.println();
AlarmeTemporaire=Alar_Tp_Eco;
Serial.print(AlarmeTemporaire);
Serial.println();
AlarTempChauff();
myGLCD.setFont(SmallFont);
myGLCD.setColor(255,153,255);
myGLCD.setBackColor(0, 0, 153);
myGLCD.print("Eco ",240,115);
myGLCD.printNumF(TempTemporaire,1,240,130);
myGLCD.setBackColor(0, 0, 0);
myGLCD.setColor(0,255,0);
myGLCD.printNumF(S0,1,45,130);
myGLCD.printNumF(S1,1,45,110);
myGLCD.printNumF(S2,1,60,195);
myGLCD.printNumF(S3,1,120,195);
// myGLCD.printNumF(S4,1,120,190);
myGLCD.printNumF(humidity,1,86,110);
myGLCD.printNumF(temp_c,1,86,130);
Recepteur();
}
merci
Paphio20
 
Messages: 17
Inscription: Mar 8 Jan 2013 14:39

Re: Visu des paramètres de ma serre

Message non lude Paphio20 » Ven 11 Jan 2013 13:18

Milles excuses répondu un peu trop vite.
Je mets mon code Recepteur.
Code: Tout sélectionner
void setup()
{
  Serial.begin(9600);
  Serial.println("Tuto VirtualWire"); // Petit message de bienvenue
  vw_setup(2000);   // Initialisation de la librairie VirtualWire à 2400 bauds  (maximum de mon module)
  vw_set_rx_pin(43);   // On indique que l'on veut utiliser la broche 43 mega 2560
  vw_rx_start();      // Activation de la partie réception de la librairie VirtualWire


Code: Tout sélectionner
void Recepteur()
{
    if (vw_wait_rx_max(200)) // Si un message est recu dans les 200ms qui viennent


    digitalWrite(LED,HIGH);
      if (vw_get_message(buf, &buflen)) // On copie le message, qu'il soit corrompu ou non
      {
               Serial.print("RX : ");
                    for (byte i = 0; i < buflen; i++) // Si il n'est pas corrompu on l'affiche via Serial
            Serial.print(buf[i],BYTE);
         Serial.println("");
digitalWrite(LED,LOW);
delay(200);

      }
              }

Merci encore...
Paphio20
 
Messages: 17
Inscription: Mar 8 Jan 2013 14:39

Re: Visu des paramètres de ma serre

Message non lude Sarish » Ven 11 Jan 2013 13:56

Alors, pour ton problème j'ai eu le même a peu près (je recevais 3-4 trame et puis plus rien).

Alors pour commencer
if (vw_wait_rx_max(200))
il doit te manque les { }

Essaie ça :
Code minimaliste qui de mémoire m'avais permis de bien tout réceptionner
Code: Tout sélectionner
void Recepteur()
{
vw_get_message(buf, &buflen);
   for (i = 0; i < buflen; i++)
          {Serial.print(buf[i], HEX);
           Serial.print(' ');}
   Serial.println();
delay_ms(200);
}


En fait aider, juste après avoir manger et en ayant coder du C et du Java toute la matinée c'est pas facile XD.
Sarish
 
Messages: 33
Inscription: Lun 9 Juil 2012 10:22

Re: Visu des paramètres de ma serre

Message non lude Paphio20 » Ven 11 Jan 2013 15:52

Merci Sarish
J'ai bien reçu ton message et remis la fonction recepteur comme tu me la preconisé mais toujours pareil.
J'ai refait un essai avec l'emission :

Code: Tout sélectionner
#include <VirtualWire.h> // inclusion de la librairie VirtualWire
#include <DallasTemperature.h>
#include <OneWire.h>
#define ONE_WIRE_BUS 47 ///////////////////////////////////////////
OneWire oneWire(ONE_WIRE_BUS);//////////////////////////////////////
DallasTemperature sensors(&oneWire);////////////////////////////////
char msg[6];////////////////////////////////////////////////////////
const int LED=13;
void setup() // Fonction setup()
{
    sensors.begin();////////////////////////////////////////////////
    Serial.begin(9600); // Initialisation du port série pour avoir un retour sur le serial monitor
    Serial.println("Tuto VirtualWire"); // Petit message de bienvenue

    vw_setup(2000);      // initialisation de la librairie VirtualWire à 2000 bauds (note: je n'utilise pas la broche PTT)
    vw_set_tx_pin(10);
pinMode(LED, OUTPUT);
   
}

void loop()

    Serial.print("TX ... "); // On signale le début de l'envoi
    sensors.requestTemperatures();//////////////////////////////////////////////////////
    float temperatura = sensors.getTempCByIndex(0);/////////////////////////////////////
    dtostrf(temperatura, 6, 2, msg);////////////////////////////////////////////////////
    vw_send((uint8_t *)msg, strlen(msg)); // On envoi le message
    digitalWrite(LED,HIGH);
    vw_wait_tx(); // On attend la fin de l'envoi
    Serial.println("Done !"); // On signal la fin de l'envoi
    digitalWrite(LED,LOW);
   delay(1000); // Et on attend 1s pour pas flooder
}

et la reception:

Code: Tout sélectionner
#include <VirtualWire.h> // inclusion de la librairie VirtualWire
#include <Wire.h>
uint8_t buf[VW_MAX_MESSAGE_LEN]; // Tableau qui va contenir le message recu (de taille maximum VW_MAX_MESSAGE_LEN)
uint8_t buflen = VW_MAX_MESSAGE_LEN; // Taille maximum de notre tableau
const int LED=13;
void setup() // Fonction setup()
{
    Serial.begin(9600); // Initialisation du port série pour avoir un retour sur le serial monitor
    Serial.println("Temperature -->:"); // Petit message de bienvenue   
    vw_setup(2000);   // initialisation de la librairie VirtualWire à 2000 bauds (note: je n'utilise pas la broche PTT)
    vw_set_rx_pin(43);
    vw_rx_start();  // Activation de la partie réception de la librairie VirtualWire
    pinMode(LED, OUTPUT);
 
}

void message()
{
    if (vw_wait_rx_max(500)) // Si un message est recu dans les 200ms qui viennent

    vw_wait_rx();
    digitalWrite(LED,LOW);
      if (vw_get_message(buf, &buflen)) // On copie le message, qu'il soit corrompu ou non
      {
                digitalWrite(LED,HIGH);
         Serial.print("RX : ");
                    for (byte i = 0; i < buflen; i++) // Si il n'est pas corrompu on l'affiche via Serial
            Serial.print(buf[i],BYTE);
         Serial.println("");

      }
              }
         
void loop() // Fonction loop()
{
  message();
}

et cela marche très bien :evil:
La boucle while dans le loop de mon programme ne lui plait peut-être pas !!!!!
Ne comprend pas......
Aide SVP merci..
Paphio20
 
Messages: 17
Inscription: Mar 8 Jan 2013 14:39

Re: Visu des paramètres de ma serre

Message non lude Paphio20 » Lun 14 Jan 2013 09:52

Bon j'ai un peu travaillé sur le problème de mon projet .

Résultat:
Quand j'enleve < void lecture() et void écriture()> les deux procédures qui me permettent d'écrire et lire dans la mémoire eeprom interne du mega 2560, mon programme tourne normalement et la réception est impeccable.

Une idée peut-être..... Merci
Paphio20
 
Messages: 17
Inscription: Mar 8 Jan 2013 14:39

Re: Visu des paramètres de ma serre

Message non lude SesechXP » Lun 14 Jan 2013 10:10

Salut,

Peux-tu poster les sources complètes, tant côté émetteur que côté récepteur ? Je ne trouve pas les fonctions lecture et écriture :?

++
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35

Re: Visu des paramètres de ma serre

Message non lude Paphio20 » Lun 14 Jan 2013 10:40

Merci de répondre aussi rapidement voila les trois procedures:
Tableaux des variables :

Code: Tout sélectionner
//-------------------------------------------------------------------------
byte Chauff_AM[48] = {           //Periode de chauffage du matin/
  0,0,0,0,//0
  0,0,0,0,//1
  0,1,1,0,//2
  0,0,0,0,//3
  0,0,0,0,//4
  0,0,0,0,//5
  0,0,0,0,//6
  0,0,0,0,//7
  0,0,0,0,//8
  0,0,0,0,//9
  0,0,0,0,//10
  0,0,0,0,//11----
}; 
byte Chauff_PM[48] = {           //Periode de chauffage de l'apres-midi/   
  0,0,0,0,//12
  0,0,0,0,//13
  0,0,0,0,//14
  0,0,1,1,//15
  1,1,1,0,//16
  0,0,0,0,//17
  0,0,0,0,//18
  0,0,0,0,//19
  0,0,0,0,//20
  0,0,0,0,//21
  0,0,0,0,//22
  0,0,0,0,//23
};  byte Chauff_G[48];                //Variable temporaire du chauffage/

struct config_t
{
int ConfTp; ;//Temperature confort programmee/
int EcoTp ;//Temperature economique programmee/
int ConfOff;//Offset confort Temperature/
int ConfAlar;//Alarme confort Temperature/
int EcoOff;//Offset economique Temperature/
int EcoAlar;//Alarme economique Temperature/
}
ParamTemp;


Procédures d'écriture et lecture-->

Code: Tout sélectionner
void SavePlanningChauffageToEEPROM ()
{
  EEPROM.write(0, 123);         
  for (int i=1; i<49; i++)  {
    EEPROM.write(i+(48*0), Chauff_PM[i]);
    EEPROM.write(i+(48*1), Chauff_AM[i]);
  }
}
 //---------------------------------------------------------------
void ReadFromEEPROM()
{
  int k = EEPROM.read(0);

  if (k==123) {
    for (int i=1; i<49; i++)  {
      Chauff_PM[i] = EEPROM.read(i+(48*0));
      Chauff_AM[i] = EEPROM.read(i+(48*1));
    } 
  }
  EEPROM_readAnything(200,ParamTemp);
  Tp_Conf=ParamTemp.ConfTp;
  Tp_Conf/=10;
  Tp_Eco=ParamTemp.EcoTp;
  Tp_Eco/=10;
  Off_Tp_Conf=ParamTemp.ConfOff;
  Off_Tp_Conf/=10;
  Alar_Tp_Conf=ParamTemp.ConfAlar;
  Alar_Tp_Conf/=10;
  Off_Tp_Eco=ParamTemp.EcoOff;
  Off_Tp_Eco/=10;
  Alar_Tp_Eco=ParamTemp.EcoAlar;
  Alar_Tp_Eco/=10;
 
}
void SaveParametreOffsetAlarme()
{
ParamTemp.ConfTp=int(Tp_Conf*10); ;//Temperature confort programmee/
ParamTemp.EcoTp=int (Tp_Eco*10) ;//Temperature economique programmee/
ParamTemp.ConfOff=int(Off_Tp_Conf*10);//Offset Temperature/
ParamTemp.ConfAlar=int(Alar_Tp_Conf*10);//Alarme Temperature/
ParamTemp.EcoOff=int(Off_Tp_Eco*10);//Offset Temperature/
ParamTemp.EcoAlar=int(Alar_Tp_Eco*10);//Alarme Temperature/
EEPROM_writeAnything(200,ParamTemp);
delay(500);
}


Merci...
Paphio20
 
Messages: 17
Inscription: Mar 8 Jan 2013 14:39

Re: Visu des paramètres de ma serre

Message non lude SesechXP » Lun 14 Jan 2013 18:06

Si on se concentre sur les tableaux, quelques soucis :
Code: Tout sélectionner
byte Chauff_AM[48] = {           //Periode de chauffage du matin/
  0,0,0,0,//0
  0,0,0,0,//1
  0,1,1,0,//2
  0,0,0,0,//3
  0,0,0,0,//4
  0,0,0,0,//5
  0,0,0,0,//6
  0,0,0,0,//7
  0,0,0,0,//8
  0,0,0,0,//9
  0,0,0,0,//10
  0,0,0,0,//11----
};

Attention à ne pas mettre de virgule après le dernier élément du tableau.

Ensuite les boucles for sont mauvaises. Par exemple :
Code: Tout sélectionner
  for (int i=1; i<49; i++)  {
    EEPROM.write(i+(48*0), Chauff_PM[i]);
    EEPROM.write(i+(48*1), Chauff_AM[i]);
  }

va écrire les valeurs de Chauff_PM[1] à Chauf_PM[48] en EEPROM. Alors que tu souhaites écrire les valeurs de Chauff_PM[0] à Chauf_PM[47]. Ici, Chauf_PM[48] n'existe pas. Aussi l'écriture en EEPROM commence à l'adresse 1, mais peut-être que c'est volontaire ?

En considérant qu'on écrit en EEPROM à partir de l'adresse 0 :
Code: Tout sélectionner
  for (int i=0; i<48; i++)  {
    EEPROM.write(i+(48*0), Chauff_PM[i]);
    EEPROM.write(i+(48*1), Chauff_AM[i]);
  }


Il y a peut-être autre chose, mais commençons déjà par là ;)
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35

Re: Visu des paramètres de ma serre

Message non lude Paphio20 » Lun 14 Jan 2013 22:32

Merci SesechXP
Tu m'as fait avancé sur mes problèmes de programmation,j'ai revu mon code suivant tes explications et ça marche merci...
je continue mon projet et je pense revenir sur le forum rapidement .
Merci encore.
Paphio20
 
Messages: 17
Inscription: Mar 8 Jan 2013 14:39

Re: Visu des paramètres de ma serre

Message non lude Paphio20 » Mar 15 Jan 2013 00:04

Bon !!! Parlez un peu trop vite mon programme se bloque a l'instruction Wire.begin()dans le setup.
Pour info j'utilise la librairie DS1307 de Henning Karlsen.
Une idée peut-être.....
Merci.
Paphio20
 
Messages: 17
Inscription: Mar 8 Jan 2013 14:39

Re: Visu des paramètres de ma serre

Message non lude SesechXP » Mar 15 Jan 2013 07:47

Il manque les sources correspondantes :roll:
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35

Re: Visu des paramètres de ma serre

Message non lude eco3x » Mar 15 Jan 2013 09:50

Paphio20 a écrit:Bon !!! Parlez un peu trop vite mon programme se bloque a l'instruction Wire.begin()dans le setup.
Pour info j'utilise la librairie DS1307 de Henning Karlsen.
Une idée peut-être.....
Merci.


Bonjour, dans les exemples de cette librairie Ds1307, l'instruction Wire.begin n'est pas utilisée, et ça fonctionne sans.
dans d'autres librairies i2c on peut la trouver.

(attention il faut aussi changer les broches pour l'i2c avec le Mega 20/21 à la place de 4/5)
Arduino Uno Ethernet - Usb2 serial / Mega 2560 / Raspberry Pi
http://maisons.eco3x.fr
eco3x
 
Messages: 44
Inscription: Mer 16 Mai 2012 11:21
Localisation: Haute Saône

Re: Visu des paramètres de ma serre

Message non lude Paphio20 » Mar 15 Jan 2013 11:26

Bonjour

Je me suis mal expliqué:
j'utilise bien les broches 20 et21 du mega.
Je vient de faire un essai avec une eeprom 24lc256 qui utilise la librairie <Wire.h>, pour pouvoir mettre en sauvegarde des données provenant de capteurs éloignés.
Voici un exemple que j'ai trouvé sur internet :
Code: Tout sélectionner
#include <Wire.h>   
 
#define disk1 0x50    //Address of 24LC256 eeprom chip
 
void setup(void)
{
  Serial.begin(9600);
  Wire.begin(); 
 
  unsigned int address = 0;
 
  writeEEPROM(disk1, address, 123);
  Serial.print(readEEPROM(disk1, address), DEC);
}
 
void loop(){}
 
void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data )
{
  Wire.beginTransmission(deviceaddress);
  Wire.send((int)(eeaddress >> 8));   // MSB
  Wire.send((int)(eeaddress & 0xFF)); // LSB
  Wire.send(data);
  Wire.endTransmission();
 
  delay(5);
}
 
byte readEEPROM(int deviceaddress, unsigned int eeaddress )
{
  byte rdata = 0xFF;
 
  Wire.beginTransmission(deviceaddress);
  Wire.send((int)(eeaddress >> 8));   // MSB
  Wire.send((int)(eeaddress & 0xFF)); // LSB
  Wire.endTransmission();
 
  Wire.requestFrom(deviceaddress,1);
 
  if (Wire.available()) rdata = Wire.receive();
 
  return rdata;
}

Et mon programme se bloque a <Wire.begin>...
Pourquoi!!!
Paphio20
 
Messages: 17
Inscription: Mar 8 Jan 2013 14:39

Re: Visu des paramètres de ma serre

Message non lude SesechXP » Mar 15 Jan 2013 11:35

Salut,

Es-tu sûr que c'est Wire.begin() qui bloque ?
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35

Re: Visu des paramètres de ma serre

Message non lude Paphio20 » Mar 15 Jan 2013 12:22

Je viens de remettre mon programme en marche en mode debug et il s'arrête a la procédure ReadFromEEPROM() !!!
je met de départ de mon programme: les variables plus le setup
Code: Tout sélectionner
#include <UTFT.h>
#include <ITDB02_Touch.h>
#include <DS1307.h>
#include <avr/pgmspace.h>
#include <EEPROM.h>
#include "writeAnything.h"
#include <DallasTemperature.h>
#include <OneWire.h>
#include <Wire.h>
#include <SdFat.h>
#include <SdFatUtil.h>
#include <Sd2PinMap.h>
#include <SHT1x.h>
#include <VirtualWire.h> // On inclue la librairie VirtualWire

#undef int
#undef abs
#undef double
#undef float
#undef round

ITDB02_Touch  myTouch(6,5,4,3,2);
UTFT myGLCD(ITDB32WD,38,39,40,41);// CONTROLLER HX8352

uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;

uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t DotMatrix_M[];
extern unsigned int maison[0x400];
extern unsigned int thermometer32_v2[0x400];
extern unsigned int horloge32_v2[0x400];
extern unsigned int graphique32_v2[0x400];
extern unsigned int alarme32_v2[0x400];
//***************************** DS1307 **************************//

DS1307 rtc(20, 21);
Time  t;
int oldsec=0;
//***************************** DS1820 **************************//
#define ONE_WIRE_BUS 47
#define TEMPERATURE_PRECISION 12
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress T1;//Temperature ambiante/
DeviceAddress T2;//Temperature exterieur/
DeviceAddress T3;//Temperature depart chaudiere/
DeviceAddress T4;//Temperature retour chaudiere/
DeviceAddress T5;//Temperature cuve eau/
float S0; //T1 Temperature ambiante/
float S1; //T2 Temperature exterieur/
float S2; //T3 Temperature depart chaudiere/
float S3; //T4 Temperature retour chaudiere/
float S4; //T5 Temperature cuve eau/
float tempmin=100;     //Temperature min
float tempmax=0;       //Temperature max
float TempTemporaire;
float OffsetTemporaire;
float AlarmeTemporaire;
float Tp_Conf=00.0 ;//Temperature confort programmee/
float Tp_Eco=00.0 ;//Temperature economique programmee/
float Off_Tp_Conf = 0.0;//Offset Temperature Confort programmee/
float Alar_Tp_Conf = 0.0;//Alarme Temperature Confort programmee/
float Off_Tp_Eco = 0.0;//Offset Temperature Eco programmee/
float Alar_Tp_Eco = 0.0;//Alarme Temperature Eco programmee/
boolean Tp_Fg_Vent=0;// 1 si refroidissement en marche/
boolean Tp_Fg_Chau=0;// 1 si chauffage en marche/
boolean Tp_Fg_Alar=0;// 1 si alarme en marche/
const int Tp_Chau = 12; //Pin 12 Chauffage
const int Tp_Vent = 11;//Pin 11 Ventilation
const int Tp_Alar = 10;//Pin 10 Alarme
const int TestConfort = 9;//Pin 9 Test Chauffage (Confort orange)
const int TestEconomique = 45;//Pin 8 Test Chauffage (Economique rouge)
boolean T=0;
//-----------------------------------------------------------------
const int LED=13;
//-----------------------------------------------------------------
#define dataPin  7
#define clockPin 8
SHT1x sht1x(dataPin, clockPin);
float temp_c;
float temp_f;
float humidity;
//-----------------------------------------------------------------
#define disk1 0x50    //Address of 24LC256 eeprom chip   
//-----------------------------------------------------------------
const int brocheSDCardSelect=53;
Sd2Card card; // création d'un objet Sd2Card
SdVolume volume; // création d'un objet SdVolume
SdFile root; // création d'un objet SdFile pour le répertoire racine
SdFile file; // création d'un objet SdFile pour le fichier utilisé
char name[] = "LOGGER00.CSV";
char time;
int m=0;
int Pas=0;
#define error(s) error_P(PSTR(s))
//----------------------------------------------------------------
 const int heuRP[]= {11,167,31,187};       // Reglage Heure +
 const int minRP[]= {51,167,71,187};       // Reglage Minute +
 const int secRP[]= {91,167,101,187};      // Reglage Seconde +
 const int heuRM[]= {11,207,31,227};       // Reglage Heure -
 const int minRM[]= {51,207,71,227};       // Reglage Minute -
 const int secRM[]= {91,207,101,227};      // Reglage Seconde -
 const int jouRP[]= {131,167,151,187};     // Reglage Jour +
 const int moiRP[]= {171,167,191,187};     // Reglage mois +
 const int annRP[]= {211,167,231,187};     // Reglage annee +
 const int jouRM[]= {131,207,151,227};     // Reglage Jour -
 const int moiRM[]= {171,207,191,227};     // Reglage mois -
 const int annRM[]= {211,207,231,227};     // Reglage annee -
 const int enrRH[]= {260,169,370,199};       // enregistrement reglage
 const int sorRH[]= {260,209,370,239};     // sortie sans enregistrement
 //-------------------------------------------------------------------------
int a=0;
byte data[48];
int x, y;                 
int ChgHeuChauff = 0;
int P = 0;
int Q = 0;
int P1 = 0;
int Q1 = 0;
boolean AMorPM;   
//-------------------------------------------------------------------------
static unsigned long Enregistrement_Temp;
static unsigned long Minuterie_Chauffage ;//Minuterie chauffage(interval entre 2 lecures)/
static unsigned long Visu_Tp_Ext_Int;//Minuterie visu des Temperatures exterieur et interieur/
static unsigned long Int_Temps_Graph;//Intervalle de temps entre deux mesures sur graphique
int min_cnt ;                    //Nombre de minutes sur 24 heures
//------------------------------------------------------------------------

//-------------------------------------------------------------------------
byte Chauff_AM[48] = {           //Periode de chauffage du matin/
  0,0,0,0,//0
  0,0,0,0,//1
  0,1,1,0,//2
  0,0,0,0,//3
  0,0,0,0,//4
  0,0,0,0,//5
  0,0,0,0,//6
  0,0,0,0,//7
  0,0,0,0,//8
  0,0,0,0,//9
  0,0,0,0,//10
  0,0,0,0//11----
}; 
byte Chauff_PM[48] = {           //Periode de chauffage de l'apres-midi/   
  0,0,0,0,//12
  0,0,0,0,//13
  0,0,0,0,//14
  0,0,1,1,//15
  1,1,1,0,//16
  0,0,0,0,//17
  0,0,0,0,//18
  0,0,0,0,//19
  0,0,0,0,//20
  0,0,0,0,//21
  0,0,0,0,//22
  0,0,0,0//23
};  //White LED array in RAM
byte Chauff_G[48];                //Variable temporaire du chauffage/

struct config_t
{
int ConfTp; ;//Temperature confort programmee/
int EcoTp ;//Temperature economique programmee/
int ConfOff;//Offset confort Temperature/
int ConfAlar;//Alarme confort Temperature/
int EcoOff;//Offset economique Temperature/
int EcoAlar;//Alarme economique Temperature/
}
ParamTemp;

 //------------------------setup------------------------------
void setup()
{
Wire.begin(); 
  Serial.begin(9600);
  Serial.println("Tuto VirtualWire"); // Petit message de bienvenue
  vw_setup(2000);   // Initialisation de la librairie VirtualWire à 2400 bauds  (maximum de mon module)
  vw_set_rx_pin(43);   // On indique que l'on veut utiliser la broche 43 pour reçevoir
  vw_rx_start();      // Activation de la partie réception de la librairie VirtualWire
 //--------------------------------------------------------------

//---------------------------------------------------------------
 
  pinMode(TestEconomique, OUTPUT);
  pinMode(TestConfort, OUTPUT);
  pinMode(Tp_Chau, OUTPUT);
  pinMode(Tp_Vent, OUTPUT);
  pinMode(Tp_Alar, OUTPUT);
 
  pinMode(LED, OUTPUT);
  digitalWrite(LED,LOW);
 
  digitalWrite(Tp_Chau, LOW);
  digitalWrite(Tp_Vent, LOW);
  digitalWrite(Tp_Alar, LOW);
  myGLCD.InitLCD(LANDSCAPE);
  myGLCD.clrScr();
  myTouch.InitTouch(LANDSCAPE);
  myTouch.setPrecision(PREC_HI);
  myGLCD.setFont(SmallFont);
//-------------------------------------------------------------------------------

card.init(SPI_QUARTER_SPEED,brocheSDCardSelect);
volume.init(&card);
root.openRoot(&volume);
  for (uint8_t i = 0; i < 100; i++) {
    name[6] = i/10 + '0';
    name[7] = i%10 + '0';
    if (file.open(&root,name, O_CREAT | O_EXCL | O_WRITE)) break;
  }
  if (!file.isOpen()) error ("file.create");
Serial.print("Logging to: ");
Serial.println(name);
 if (file.writeError || !file.sync()) {
  error("write header failed");
 
}

//-------------------------------------------------------------------------------
rtc.halt (false);
Debuggeur1();
 ReadFromEEPROM;///////////////////////////////  ici /////////////
 Minuterie_Chauffage  = 0;
 Gestion_Confort_Economique();

}

Merci de regarder ......
Paphio20
 
Messages: 17
Inscription: Mar 8 Jan 2013 14:39

Re: Visu des paramètres de ma serre

Message non lude SesechXP » Mer 16 Jan 2013 07:52

Le mieux pour déboguer est d'avoir un programme minimal... Si tu en fais qui ne fait qu'écrire et lire en EEPROM, sans rien d'autre, ça donne quoi ?

Une fois que cette partie fonctionnera tu ajouteras les autres fonctionnalités petit à petit, en les validant une à une.

++
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35

Suivante

Retourner vers Présentez-vous

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités