Aide avant achat

Les résultats ne sont pas cohérent avec le code que je t'ai donné.

Normalement, tu devrais avoir dans ton terminal l'heure en secondes depuis minuit et l'ensemble des relais devraient être à 1. Le rafraichissement devrait se faire toutes les 5s.

Peux-tu poster le code complet de ton sketch ?

Voila:

#include "Wire.h"

#define DS1307_ADDRESS 0x68

// 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 = 64799;

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;
  
  
 // é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()
{

  Wire.begin();
  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()
{
  // lancement de la lecture de l'heure
  printDate();

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

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

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

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

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

  // Gestion du ventilateur 2
  if(time >= 25200 && time < 82800) {
    stateVenti2 = LOW;
  } else {
    stateVenti2 = HIGH;
  }
  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(000);
  
}



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

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

Pour le rafraichissement, c’est moi j’ai changé pour toutes les secondes.

essai voir ce code modifié, j’imagine qu’il devrais mieux aller…

les modifs consistent a exploiter les infos h/m/s du DS1307 et calculer la variable time,

à suivre ! :wink:

#include "Wire.h"

#define DS1307_ADDRESS 0x68

// 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)
unsigned long time = 0;

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;
 
  
 // é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()
{

  Wire.begin();
  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()
{
  // lancement de la lecture de l'heure
  printDate();

  time=( (hour * 3600L) + (minute*60) + second );
  Serial.print ("temps ecoulé depuis 0h00 :");
  Serial.println (time);
    
// Gestion du CO2
  if(time >= 32400 && time < 61800) {
    stateCo2 = LOW;
  } else {
    stateCo2 = HIGH;
  }
  digitalWrite(CO2, stateCo2);

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

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

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

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

  // Gestion du ventilateur 2
  if(time >= 25200 && time < 82800) {
    stateVenti2 = LOW;
  } else {
    stateVenti2 = HIGH;
  }
  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(000);
}


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

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

En effet, il a l'air de marcher.

Un grand merci a vous tous pour votre aide et particulièrement a Bigben99 et Legone pour leur temps qu'ils m'ont accordé.

Je vous dirais si tout est ok après un tour de cadran :)

100% fonctionnel, merci encore.

Et bonne année à toutes et à tous.

Yep!

Pourquoi mettre le temps en seconde alors qu'en minute ça suffirait amplement ?? On éviterait l'utilisation de variable long, des integer suffisent... et on simplifie le calcul !

On peut aussi changer le temps de rafraîchissement à la minute

if (_minute != last_minute) { ... }

Perso, voir des chiffres de 68000 ou 73000 dans les conditions me choquent particulièrement.

(...)

@+

Zoroastre.

Le principal, c'est que ca marche maintenant.