Aide avant achat

Bonjour,

plutôt rassurant que tu observes un rafraichissement rapide de l'heure, juste la preuve que ton programme ne se bloque pas, ne vas pas se perdre dans une boucle sans fin ou pire ne passe pas son temps à attendre la fin d'un delay :)

la vitesse de com n'y est donc pour rien, il faut juste garder en tête que ton programme est exécuté en permanence, j'entends par là que ton "arduino" exécute par conception ton programme de la façon suivante :

  • exécution du code contenu dans void setup() une seule et unique fois à la mise sous tension (ou plutôt à la mise en service)
  • exécution du code contenu dans void loop() du début à la fin, une fois arrivé à la fin il recommence au début et ainsi de suite et cela sans fin, la durée de cette boucle est juste l'image du temps nécessaire à exécuter ton code....

donc dans ton cas, il déroule ton "loop()" durant lequel il affiche l'heure, passe un certain temps à exécuter ton prg puis ré-affiche l'heure rapidement puisque ton programme ne met pas beaucoup de temps à s’exécuter...

Si tu veut limiter ce rafraichissement sans ralentir ton programme, tu pourrais essayer de n'afficher l'heure qu'au changement de seconde (et donc qu'une fois par seconde), une solution pour le faire serait de : - initialiser dans le setup une variable mem_ second a zero

puis dans le loop : - lire l'heure dans ton module DS1307 - comparer les secondes lues dans le DS1307 avec mem_second - si second est différent de mem_second, ça veut dire que les secondes ont changées alors : * sauver dans mem_second la valeur courante de second * afficher l'heure

Fait attention si tu veux te lancer dans cette modif, je te conseille avant toute chose de bien comprendre ce que fait la routine printDate() et bien séparer les deux rôles qu'elle joue (lecture du DS1307 et affichage de l'heure)...

à toi si ça te dit ! ;)

Re :smiling_imp:

Donc j’essais avec l’autre solution donné:

#include "Wire.h"

#define DS1307_ADDRESS 0x68

byte zero = 0x00; //workaround for issue #527
  // déclarations faites en tête pour être globales
  int second;
  int minute;
  int hour;
  int weekDay;
  int monthDay;
  int month;
  int year;
   
  
//heure co2  
const int heure_debut1 = 9;
const int minute_debut1 = 00;

const int heure_fin1 = 18;
const int minute_fin1 = 00;

const int horaire_debut1 = heure_debut1 * 60 + minute_debut1;
const int horaire_fin1 = heure_fin1 * 60 + minute_fin1;

//heure led1 6500K
const int heure_debut2 = 9;
const int minute_debut2 = 45;

const int heure_fin2 = 19;
const int minute_fin2 = 00;

const int horaire_debut2 = heure_debut2 * 60 + minute_debut2;
const int horaire_fin2 = heure_fin2 * 60 + minute_fin2;

//heure led2 4300K
const int heure_debut3 = 8;
const int minute_debut3 = 30;

const int heure_fin3 = 20;
const int minute_fin3 = 30;

const int horaire_debut3 = heure_debut3 * 60 + minute_debut3;
const int horaire_fin3 = heure_fin3 * 60 + minute_fin3;

//heure led3 bleu
const int heure_debut4 = 7;
const int minute_debut4 = 30;

const int heure_fin4 = 22;
const int minute_fin4 = 30;

const int horaire_debut4 = heure_debut4 * 60 + minute_debut4;
const int horaire_fin4 = heure_fin4 * 60 + minute_fin4;

//heure ventilateur V1
const int heure_debut5 = 8;
const int minute_debut5 = 30;

const int heure_fin5 = 21;
const int minute_fin5 = 00;

const int horaire_debut5 = heure_debut5 * 60 + minute_debut5;
const int horaire_fin5 = heure_fin5 * 60 + minute_fin5;

//heure ventilateur V2
const int heure_debut6 = 7;
const int minute_debut6 = 00;

const int heure_fin6 = 23;
const int minute_fin6 = 00;

const int horaire_debut6 = heure_debut6 * 60 + minute_debut6;
const int horaire_fin6 = heure_fin6 * 60 + minute_fin6;
  
  // etat des sorties
  int horaire = hour * 60 + minute;
  int etat_30 = 0;
  int etat_31 = 0;
  int etat_32 = 0;
  int etat_33 = 0;
  int etat_34 = 0;
  int etat_35 = 0;
  int etat_36 = 0;
  int etat_37 = 0;
         
 

//-------------------------------------    
void setup()
{

  Wire.begin();
  Serial.begin(9600);
  //setDateTime(); //ligne a décommenter pour mise à l'heure
  pinMode(30, OUTPUT); //diffusion co2
  pinMode(31, OUTPUT); //led 6500K
  pinMode(32, OUTPUT); //led 4300K
  pinMode(33, OUTPUT); //led bleu
  pinMode(34, OUTPUT); //ventilateur 1
  pinMode(35, OUTPUT); //ventilateur 2
  pinMode(36, OUTPUT);
  pinMode(37, OUTPUT);
    
}
//-------------------------------------
void loop()
{
  // lancement de la lecture de l'heure
  printDate();

    
  // diffusion co2

  if ((horaire_debut1 <= horaire) && (horaire < horaire_fin1))
{
    if (etat_30 == 0)
    {  
       //Allumer30();
       etat_30 = 1;
    }
  }
  else
  {
    if (etat_30 != 0)
    {
       //Eteindre30();
       etat_30 = 0;
    }
  
  //led 6500K
 if ((horaire_debut2 <= horaire) && (horaire < horaire_fin2))
  {
    if (etat_31 == 0)
    {
       //Allumer31();
       etat_31 = 1;
    }
  }
  else
  {
    if (etat_31 != 0)
    {
       //Eteindre31();
       etat_31 = 0;
    }
  
  //led 4300K
 if ((horaire_debut3 <= horaire) && (horaire < horaire_fin3))
  {
    if (etat_32 == 0)
    {
       //Allumer32();
       etat_32 = 1;
    }
  }
  else
  {
    if (etat_32 != 0)
    {
       //Eteindre32();
       etat_32 = 0;
    }
  
  //led bleu
 if ((horaire_debut4 <= horaire) && (horaire < horaire_fin4))
  {
    if (etat_33 == 0)
    {
       //Allumer33();
       etat_33 = 1;
    }
  }
  else
  {
    if (etat_33 != 0)
    {
       //Eteindre33();
       etat_33 = 0;
    }
  
  //ventilateur 1  
 if ((horaire_debut5 <= horaire) && (horaire < horaire_fin5))
  {
    if (etat_34 == 0)
    {
       //Allumer34();
       etat_34 = 1;
    }
  }
  else
  {
    if (etat_34 != 0)
    {
       //Eteindre34();
       etat_34 = 0;
    }
  
  //ventilateur 2
 if ((horaire_debut6 <= horaire) && (horaire < horaire_fin6))
  {
    if (etat_35 == 0)
    {
       //Allumer35();
       etat_35 = 1;
    }
  }
  else
  {
    if (etat_35 != 0)
    {
       //Eteindre35();
       etat_35 = 0;
    }
}



//-------------------------------------

void setDateTime()
{
  // modifié en supprimant les déclarations car faites en tête pour être globales
  byte second =      00; //0-59
  byte minute =      22; //0-59
  byte hour =        22; //0-23
  byte weekDay =     3; //1-7
  byte monthDay =    17; //1-31
  byte month =       12; //1-12
  byte year  =       14; //0-99
  
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero); //stop Oscillator
  Wire.write(decToBcd(second));
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));
  Wire.write(decToBcd(weekDay));
  Wire.write(decToBcd(monthDay));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));
  Wire.write(zero); //start
  Wire.endTransmission();
}
//-------------------------------------
byte decToBcd(byte val)
{
// Convert normal decimal numbers to binary coded decimal
  return ( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val)  {
// Convert binary coded decimal to normal decimal numbers
  return ( (val/16*10) + (val%16) );
}
//-------------------------------------
void printDate()
{
  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero);
  Wire.endTransmission();
  Wire.requestFrom(DS1307_ADDRESS, 7);

  // modifié en supprimant les déclarations car faites en tête pour être globales
  second = bcdToDec(Wire.read());
  minute = bcdToDec(Wire.read());
  hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
  weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
  monthDay = bcdToDec(Wire.read());
  month = bcdToDec(Wire.read());
  year = bcdToDec(Wire.read());

  //print the date EG   3/1/11 23:59:59
  Serial.print(month);
  Serial.print("/");
  Serial.print(monthDay);
  Serial.print("/");
  Serial.print(year);
  Serial.print(" ");
  Serial.print(hour);
  Serial.print(":");
  Serial.print(minute);
  Serial.print(":");
  Serial.println(second);
}

Ca ne compil pas :

This report would have more information with
“Show verbose output during compilation”
enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: “Arduino Mega (ATmega1280)”
final2.ino: In function ‘void loop()’:
final2:223: error: a function-definition is not allowed here before ‘{’ token
final2:247: error: a function-definition is not allowed here before ‘{’ token
final2:252: error: a function-definition is not allowed here before ‘{’ token
final2:258: error: a function-definition is not allowed here before ‘{’ token
final2:286: error: expected }' at end of input final2:286: error: expected }’ at end of input
final2:286: error: expected }' at end of input final2:286: error: expected }’ at end of input
final2:286: error: expected }' at end of input final2:286: error: expected }’ at end of input

Ca me dit erreur sur la ligne:
void setDateTime()
{

De plus je l’ai pas modifié :s

Yep!

L'erreur est dans le loop(). Il te manque plein de parenthèses... Tu ouvres des if sans les fermer correctement. Il en manque pas mal !

@+

Zoroastre.

Merci, en effet j’avais oublié une } sous chaque if.

Et comme j’ai fais du copié, collé, elles manquaient à toutes. :slight_smile:

Maintenant ca compil :):):slight_smile:

#include "Wire.h"

#define DS1307_ADDRESS 0x68

byte zero = 0x00; //workaround for issue #527
  // déclarations faites en tête pour être globales
  int second;
  int minute;
  int hour;
  int weekDay;
  int monthDay;
  int month;
  int year;
  int horaire = hour * 60 + minute;
  
  
//heure co2  
const int heure_debut1 = 9;
const int minute_debut1 = 00;

const int heure_fin1 = 18;
const int minute_fin1 = 00;

const int horaire_debut1 = heure_debut1 * 60 + minute_debut1;
const int horaire_fin1 = heure_fin1 * 60 + minute_fin1;

//heure led1 6500K
const int heure_debut2 = 9;
const int minute_debut2 = 45;

const int heure_fin2 = 19;
const int minute_fin2 = 00;

const int horaire_debut2 = heure_debut2 * 60 + minute_debut2;
const int horaire_fin2 = heure_fin2 * 60 + minute_fin2;

//heure led2 4300K
const int heure_debut3 = 8;
const int minute_debut3 = 30;

const int heure_fin3 = 20;
const int minute_fin3 = 30;

const int horaire_debut3 = heure_debut3 * 60 + minute_debut3;
const int horaire_fin3 = heure_fin3 * 60 + minute_fin3;

//heure led3 bleu
const int heure_debut4 = 7;
const int minute_debut4 = 30;

const int heure_fin4 = 22;
const int minute_fin4 = 30;

const int horaire_debut4 = heure_debut4 * 60 + minute_debut4;
const int horaire_fin4 = heure_fin4 * 60 + minute_fin4;

//heure ventilateur V1
const int heure_debut5 = 8;
const int minute_debut5 = 30;

const int heure_fin5 = 21;
const int minute_fin5 = 00;

const int horaire_debut5 = heure_debut5 * 60 + minute_debut5;
const int horaire_fin5 = heure_fin5 * 60 + minute_fin5;

//heure ventilateur V2
const int heure_debut6 = 7;
const int minute_debut6 = 00;

const int heure_fin6 = 23;
const int minute_fin6 = 00;

const int horaire_debut6 = heure_debut6 * 60 + minute_debut6;
const int horaire_fin6 = heure_fin6 * 60 + minute_fin6;
  
  // etat des sorties
  
  int etat_30 = 0;
  int etat_31 = 0;
  int etat_32 = 0;
  int etat_33 = 0;
  int etat_34 = 0;
  int etat_35 = 0;
  int etat_36 = 0;
  int etat_37 = 0;
         
 

//-------------------------------------    
void setup()
{

  Wire.begin();
  Serial.begin(9600);
  //setDateTime(); //ligne a décommenter pour mise à l'heure
  pinMode(30, OUTPUT); //diffusion co2
  pinMode(31, OUTPUT); //led 6500K
  pinMode(32, OUTPUT); //led 4300K
  pinMode(33, OUTPUT); //led bleu
  pinMode(34, OUTPUT); //ventilateur 1
  pinMode(35, OUTPUT); //ventilateur 2
  pinMode(36, OUTPUT);
  pinMode(37, OUTPUT);
    
}
//-------------------------------------
void loop()
{
  // lancement de la lecture de l'heure
  printDate();

    
  // diffusion co2

  if ((horaire_debut1 <= horaire) && (horaire < horaire_fin1))
{
    if (etat_30 == 0)
    {  
       //Allumer30();
       etat_30 = 1;
    }
  }
  else
  {
    if (etat_30 != 0)
    {
       //Eteindre30();
       etat_30 = 0;
    }
  }
  //led 6500K
 if ((horaire_debut2 <= horaire) && (horaire < horaire_fin2))
  {
    if (etat_31 == 0)
    {
       //Allumer31();
       etat_31 = 1;
    }
  }
  else
  {
    if (etat_31 != 0)
    {
       //Eteindre31();
       etat_31 = 0;
    }
  }
  //led 4300K
 if ((horaire_debut3 <= horaire) && (horaire < horaire_fin3))
  {
    if (etat_32 == 0)
    {
       //Allumer32();
       etat_32 = 1;
    }
  }
  else
  {
    if (etat_32 != 0)
    {
       //Eteindre32();
       etat_32 = 0;
    }
  }
  //led bleu
 if ((horaire_debut4 <= horaire) && (horaire < horaire_fin4))
  {
    if (etat_33 == 0)
    {
       //Allumer33();
       etat_33 = 1;
    }
  }
  else
  {
    if (etat_33 != 0)
    {
       //Eteindre33();
       etat_33 = 0;
    }
  }
  //ventilateur 1  
 if ((horaire_debut5 <= horaire) && (horaire < horaire_fin5))
  {
    if (etat_34 == 0)
    {
       //Allumer34();
       etat_34 = 1;
    }
  }
  else
  {
    if (etat_34 != 0)
    {
       //Eteindre34();
       etat_34 = 0;
    }
  }
  //ventilateur 2
 if ((horaire_debut6 <= horaire) && (horaire < horaire_fin6))
  {
    if (etat_35 == 0)
    {
       //Allumer35();
       etat_35 = 1;
    }
  }
  else
  {
    if (etat_35 != 0)
    {
       //Eteindre35();
       etat_35 = 0;
    }
  }
}



//-------------------------------------

void setDateTime()
{
  // modifié en supprimant les déclarations car faites en tête pour être globales
  byte second =      00; //0-59
  byte minute =      22; //0-59
  byte hour =        22; //0-23
  byte weekDay =     3; //1-7
  byte monthDay =    17; //1-31
  byte month =       12; //1-12
  byte year  =       14; //0-99
  
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero); //stop Oscillator
  Wire.write(decToBcd(second));
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));
  Wire.write(decToBcd(weekDay));
  Wire.write(decToBcd(monthDay));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));
  Wire.write(zero); //start
  Wire.endTransmission();
}
//-------------------------------------
byte decToBcd(byte val)
{
// Convert normal decimal numbers to binary coded decimal
  return ( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val)  {
// Convert binary coded decimal to normal decimal numbers
  return ( (val/16*10) + (val%16) );
}
//-------------------------------------
void printDate()
{
  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero);
  Wire.endTransmission();
  Wire.requestFrom(DS1307_ADDRESS, 7);

  // modifié en supprimant les déclarations car faites en tête pour être globales
  second = bcdToDec(Wire.read());
  minute = bcdToDec(Wire.read());
  hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
  weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
  monthDay = bcdToDec(Wire.read());
  month = bcdToDec(Wire.read());
  year = bcdToDec(Wire.read());

  //print the date EG   3/1/11 23:59:59
  Serial.print(month);
  Serial.print("/");
  Serial.print(monthDay);
  Serial.print("/");
  Serial.print(year);
  Serial.print(" ");
  Serial.print(hour);
  Serial.print(":");
  Serial.print(minute);
  Serial.print(":");
  Serial.println(second);
}

Donc, des news :smiley:

J’ai cablé le tout, et roullement de tambour:::::::::::: ca ne marche pas :’(

#include "Wire.h"

#define DS1307_ADDRESS 0x68

byte zero = 0x00; //workaround for issue #527
  // déclarations faites en tête pour être globales
  int second;
  int minute;
  int hour;
  int weekDay;
  int monthDay;
  int month;
  int year;
  int horaire = hour * 60 + minute;
  
  
//heure co2  
const int heure_debut1 = 9;
const int minute_debut1 = 00;

const int heure_fin1 = 18;
const int minute_fin1 = 00;

const int horaire_debut1 = heure_debut1 * 60 + minute_debut1;
const int horaire_fin1 = heure_fin1 * 60 + minute_fin1;

//heure led1 6500K
const int heure_debut2 = 9;
const int minute_debut2 = 45;

const int heure_fin2 = 19;
const int minute_fin2 = 00;

const int horaire_debut2 = heure_debut2 * 60 + minute_debut2;
const int horaire_fin2 = heure_fin2 * 60 + minute_fin2;

//heure led2 4300K
const int heure_debut3 = 8;
const int minute_debut3 = 30;

const int heure_fin3 = 20;
const int minute_fin3 = 30;

const int horaire_debut3 = heure_debut3 * 60 + minute_debut3;
const int horaire_fin3 = heure_fin3 * 60 + minute_fin3;

//heure led3 bleu
const int heure_debut4 = 7;
const int minute_debut4 = 30;

const int heure_fin4 = 22;
const int minute_fin4 = 30;

const int horaire_debut4 = heure_debut4 * 60 + minute_debut4;
const int horaire_fin4 = heure_fin4 * 60 + minute_fin4;

//heure ventilateur V1
const int heure_debut5 = 8;
const int minute_debut5 = 30;

const int heure_fin5 = 21;
const int minute_fin5 = 00;

const int horaire_debut5 = heure_debut5 * 60 + minute_debut5;
const int horaire_fin5 = heure_fin5 * 60 + minute_fin5;

//heure ventilateur V2
const int heure_debut6 = 7;
const int minute_debut6 = 00;

const int heure_fin6 = 23;
const int minute_fin6 = 00;

const int horaire_debut6 = heure_debut6 * 60 + minute_debut6;
const int horaire_fin6 = heure_fin6 * 60 + minute_fin6;
  
  // etat des sorties
  
  int etat_30 = 0;
  int etat_31 = 0;
  int etat_32 = 0;
  int etat_33 = 0;
  int etat_34 = 0;
  int etat_35 = 0;
  int etat_36 = 0;
  int etat_37 = 0;
         
 

//-------------------------------------    
void setup()
{

  Wire.begin();
  Serial.begin(9600);
  //setDateTime(); //ligne a décommenter pour mise à l'heure
  pinMode(30, OUTPUT); //diffusion co2
  pinMode(31, OUTPUT); //led 6500K
  pinMode(32, OUTPUT); //led 4300K
  pinMode(33, OUTPUT); //led bleu
  pinMode(34, OUTPUT); //ventilateur 1
  pinMode(35, OUTPUT); //ventilateur 2
  pinMode(36, OUTPUT);
  pinMode(37, OUTPUT);
    
}
//-------------------------------------
void loop()
{
  // lancement de la lecture de l'heure
  printDate();

    
  // diffusion co2

  if ((horaire_debut1 <= horaire) && (horaire < horaire_fin1))
{
    if (etat_30 == 0)
    {  
       //Allumer30();
       etat_30 = 1;
    }
  }
  else
  {
    if (etat_30 != 0)
    {
       //Eteindre30();
       etat_30 = 0;
    }
  }
  //led 6500K
 if ((horaire_debut2 <= horaire) && (horaire < horaire_fin2))
  {
    if (etat_31 == 0)
    {
       //Allumer31();
       etat_31 = 1;
    }
  }
  else
  {
    if (etat_31 != 0)
    {
       //Eteindre31();
       etat_31 = 0;
    }
  }
  //led 4300K
 if ((horaire_debut3 <= horaire) && (horaire < horaire_fin3))
  {
    if (etat_32 == 0)
    {
       //Allumer32();
       etat_32 = 1;
    }
  }
  else
  {
    if (etat_32 != 0)
    {
       //Eteindre32();
       etat_32 = 0;
    }
  }
  //led bleu
 if ((horaire_debut4 <= horaire) && (horaire < horaire_fin4))
  {
    if (etat_33 == 0)
    {
       //Allumer33();
       etat_33 = 1;
    }
  }
  else
  {
    if (etat_33 != 0)
    {
       //Eteindre33();
       etat_33 = 0;
    }
  }
  //ventilateur 1  
 if ((horaire_debut5 <= horaire) && (horaire < horaire_fin5))
  {
    if (etat_34 == 0)
    {
       //Allumer34();
       etat_34 = 1;
    }
  }
  else
  {
    if (etat_34 != 0)
    {
       //Eteindre34();
       etat_34 = 0;
    }
  }
  //ventilateur 2
 if ((horaire_debut6 <= horaire) && (horaire < horaire_fin6))
  {
    if (etat_35 == 0)
    {
       //Allumer35();
       etat_35 = 1;
    }
  }
  else
  {
    if (etat_35 != 0)
    {
       //Eteindre35();
       etat_35 = 0;
    }
  }
}



//-------------------------------------

void setDateTime()
{
  // modifié en supprimant les déclarations car faites en tête pour être globales
  byte second =      00; //0-59
  byte minute =      22; //0-59
  byte hour =        22; //0-23
  byte weekDay =     3; //1-7
  byte monthDay =    17; //1-31
  byte month =       12; //1-12
  byte year  =       14; //0-99
  
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero); //stop Oscillator
  Wire.write(decToBcd(second));
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));
  Wire.write(decToBcd(weekDay));
  Wire.write(decToBcd(monthDay));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));
  Wire.write(zero); //start
  Wire.endTransmission();
}
//-------------------------------------
byte decToBcd(byte val)
{
// Convert normal decimal numbers to binary coded decimal
  return ( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val)  {
// Convert binary coded decimal to normal decimal numbers
  return ( (val/16*10) + (val%16) );
}
//-------------------------------------
void printDate()
{
  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero);
  Wire.endTransmission();
  Wire.requestFrom(DS1307_ADDRESS, 7);

  // modifié en supprimant les déclarations car faites en tête pour être globales
  second = bcdToDec(Wire.read());
  minute = bcdToDec(Wire.read());
  hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
  weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
  monthDay = bcdToDec(Wire.read());
  month = bcdToDec(Wire.read());
  year = bcdToDec(Wire.read());

  //print the date EG   3/1/11 23:59:59
  Serial.print(month);
  Serial.print("/");
  Serial.print(monthDay);
  Serial.print("/");
  Serial.print(year);
  Serial.print(" ");
  Serial.print(hour);
  Serial.print(":");
  Serial.print(minute);
  Serial.print(":");
  Serial.println(second);
}

Quelle que soit l’heure, toutes les sorties de mon modules relais sont actives…

Encore besoin de vos lumières svp.

pas tout vérifié, mais manque à coup sur, un détail d'importance...

tu déclares bien tes sorties physiques en sortie par ex : pinMode(30, OUTPUT); //diffusion co2

tu déclares bien les variables de sortie : int etat_30 = 0; les mets à jour : if (etat_30 == 0) { //Allumer30(); etat_30 = 1; }

mais tu ne met jamais tes sorties physiques à jour par rapport à ces variables..

il te manque donc en fin de programme (dans ton loop) la mise à jour de l'ensemble de tes sorties, par ex :

// mise à jour des sorties digitalWrite(30,etat30); digitalWrite(31,etat31); ..........

Je l'ai ajouté , ca compil pas:

This report would have more information with "Show verbose output during compilation" enabled in File > Preferences. Arduino: 1.0.6 (Windows 7), Board: "Arduino Mega 2560 or Mega ADK" finalv2.ino: In function 'void loop()': finalv2:223: error: 'etat30' was not declared in this scope finalv2:224: error: 'etat31' was not declared in this scope finalv2:225: error: 'etat32' was not declared in this scope finalv2:226: error: 'etat33' was not declared in this scope finalv2:227: error: 'etat34' was not declared in this scope finalv2:228: error: 'etat35' was not declared in this scope

Oupss, ai été une fois de plus trop vite et t'ai induit d'erreur... :(

désolé de te faire travailler, mais pour le coup, tu devrais pouvoir trouver d'où provient l'erreur simplement en relisant mon post ! ;) ;)

juste pour rappel :

digitalWrite(x,y);

affecte l'état de y (qui peut être 0, 1 (ou autre valeur qui si différente de 0 seras considérée comme 1) ou une variable) à la sortie réelle n° x, et tes messages d'erreurs te disent que etat30 (entre autres) n'existe pas ou n'est pas déclaré dans le programme...

Soit les variables echo(x) n'ont pas été déclarée du tout Soit elle ont été déclarées mais elles ne sont accessibles (on dit souvent "visibles") de l'endroit où tu veut t'en servir.

Dans tous les cours ou tuto sur le C ou C++ il y a un chapitre sur la "visibilité des variables", c'est une notion importante à maîtriser, je pense que c'est le moment de faire une révision.

PS

This report would have more information with "Show verbose output during compilation" enabled in File > Preferences.

A partir de l'IDE active le mode bavard ("verbose") et tu auras plus de détails sur les erreurs, cela facilitera la leur résolution.

J'ai déclaré l'état de mes variables au début: int etat_30 = 0; etc.....

C'est quoi le début ? Les messages d'erreurs sont très clairs: a partir de l'endroit où l'erreur est signalée le compilateur ne peut pas remonter a la déclaration.

Bon j'ai essaye plusieurs truc est toujours pareil.

Quand je fait le monitoring, il y a que l'heure qui défile! On ne voit aucun état changer (0 ou 1).

68tjs, excuse mon ignorance mais je comprends pas ce que tu me dis :)

Ma motivation baisse sur le coup T_T.

poste voir ton code dans l'état, histoire de mieux voir où tu en est, seras plus facile pour t'aiguiller,

C'est ce je pensais avoir compris et c'est pour cela que je t'ai renvoyé sur le site d'openclassroom. La visibilité des variables est une notion essentielle en programmation.

Au hasard si tu as déclaré tes variables dans la fonction setup() elles n'auront une existence QUE dans le setup().. Il faut les déclarer soit tout en tête de programme et en dehors de toute fonction : elles seront "GLOBALES" et accessibles à partir de n'importe quelle fonction, soit dans une fonction et elles seront limitées à cette fonction précise sauf si de cette fonction tu appelle une autre fonction en lui passant ces variables en paramètres.

Tu n'as rien compris c'est normal je ne suis pas professeur. Par contre tu ne pourra pas échapper à suivre des cours ou tuto sur le C, C++ . Sinon c'est comme si tu plongeais sans avoir apris a nager.

Bonjour,

Voici un petit bout de code qui devrait fonctionner sous réserve que tu valorises la variable time à la première ligne de la méthode loop avec le nombre de secondes depuis minuit (h3600 + m60 + s).

J’ai ajouté des sorties sur le port série pour contrôler la valeur de la variable time et l’état des différents relais. Il y a un délai de 5s à la fin de la méthode loop pour que le rafraichissement ne soit pas trop fréquent.

Enfin, je rejoins 68tjs, si tu veux t’en sortir avec la programmation de ton arduino, il faut que tu comprennes ce que tu écris dans ton code. Un tuto en ligne ou un bouquin de programmation en C pour en acquérir les bases t’aiderait beaucoup et surtout t’évitera de te décourager.

// définition des ports pour commander les différents relais
#define CO2      30
#define LED6500  31
#define LED4300  32
#define BLUELED  33
#define VENTI1   34
#define VENTI2   35

// variable contenant le nombre de secondes écoulées depuis minuit (h*3600 + m*60 + s)
long time = 0;

// état des différents relais
boolean stateCo2 = LOW;
boolean stateLed6500 = LOW;
boolean stateLed4300 = LOW;
boolean stateBlueLed = LOW;
boolean stateVenti1 = LOW;
boolean stateVenti2 = LOW;

void setup() {
  // initialisation de la liaison série
  Serial.begin(9600);
  Serial.println("Début du setup");
  // définition des ports pilotant les relais en tant que sortie
  pinMode(CO2, OUTPUT);
  pinMode(LED6500, OUTPUT);
  pinMode(LED4300, OUTPUT);
  pinMode(BLUELED, OUTPUT);
  pinMode(VENTI1, OUTPUT);
  pinMode(VENTI2, OUTPUT);
  Serial.println("Fin du setup");
}

void loop() {
//  time = nombre de secondes depuis minuit

  // Envoi de la variable time sur le port série pour contrôle
  Serial.print("time : ");
  Serial.println(time);

  // Gestion du CO2
  if(time >= 32400 && time < 64800) {
    stateCo2 = HIGH;
  } else {
    stateCo2 = LOW;
  }
  digitalWrite(CO2, stateCo2);

  // Gestion de la LED 6500K
  if(time >= 35100 && time < 68400) {
    stateLed6500 = HIGH;
  } else {
    stateLed6500 = LOW;
  }
  digitalWrite(LED6500, stateLed6500);

  // Gestion de la LED 4300K
  if(time >= 30600 && time < 73800) {
    stateLed4300 = HIGH;
  } else {
    stateLed4300 = LOW;
  }
  digitalWrite(LED4300, stateLed4300);

  // Gestion de la LED bleue
  if(time >= 32400 && time < 64800) {
    stateBlueLed = HIGH;
  } else {
    stateBlueLed = LOW;
  }
  digitalWrite(BLUELED, stateBlueLed);

  // Gestion du ventilateur 1
  if(time >= 32400 && time < 64800) {
    stateVenti1 = HIGH;
  } else {
    stateVenti1 = LOW;
  }
  digitalWrite(VENTI1, stateVenti1);

  // Gestion du ventilateur 2
  if(time >= 32400 && time < 64800) {
    stateVenti2 = HIGH;
  } else {
    stateVenti2 = LOW;
  }
  digitalWrite(VENTI2, stateVenti2);

  // Envoi de l'état des différents relais pour contrôle
  Serial.print("CO2 : ");
  Serial.println(stateCo2);
  Serial.print("LED6500K : ");
  Serial.println(stateLed6500);
  Serial.print("LED4300K : ");
  Serial.println(stateLed4300);
  Serial.print("LED bleue : ");
  Serial.println(stateBlueLed);
  Serial.print("Ventilateur 1 : ");
  Serial.println(stateVenti1);
  Serial.print("Ventilateur 2 : ");
  Serial.println(stateVenti2);
  // délai de 5s pour ne pas avoir un rafraichissement trop rapide des données sur le port série
  delay(5000);
}

Merci de votre soutien. :)

Bigben99, j'ai essayé ton programme et il manque une info.

En ajoutant les seconde dans time (ex 73800Sec). l'arduino n'incrémente pas +1sec toutes les seconde. Donc il n'y a pas d'évolution.

Pourtant il récupère bien l'info du ds1307.

hum... la méthode loop se répète des qu'elle a fini de s'exécuter donc time sera valorisé avec le nouveau nombre de seconde à chaque itération. Il n'y a pas besoin de l'incrémenter.

Le programme ne prend pas en compte les secondes apparemment, car une fois la valeur time de rentrée, les sorties sont bien a 1 ou 0 suivant le time mais reste comme cela.

Elles ne changent pas d'état après.

Elles ne changent d'état qu'au passage des heures prévues donc normalement, c'est : - Co2 9h à 18h - LED 6500K 9h45 à 19h - LED 4300K 8h30 à 20h30 - LED bleue 9h à 18h - Ventilateur 1 9h à 18h - Ventilateur 2 9h à 18h

Donc entre 9h45 et 18h, les relais sont tous à 1, entre 20h30 et 8h30, ils sont tous à 0. Sur les autres plages horaires, ils sont à 1 ou à 0.

Peux-tu nous poster une copie du terminal sur 20 secondes ?

Début du setup
Fin du setup
12/30/14 12:48:59
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:0
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:1
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:2
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:3
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:4
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:5
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:6
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:7
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:8
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:9
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:10
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:12
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:13
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:14
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:15
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:16
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:17
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:18
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:19
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:20
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:21
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:22
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:23
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:24
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0
12/30/14 12:49:25
CO2 : 0
LED6500K : 0
LED4300K : 0
LED bleue : 0
Ventilateur 1 : 0
Ventilateur 2 : 0

D'ailleurs, il faut que je mette les valeurs a 0 pour que les relais soit a 1 et le contraire pour les relais a 1 :)