allumage arduino

bonjour,

Je voudrait que mon arduino s'eteigne pendant 6heures dans la journeé et se ralume automatiquement et reprenne le loop.
y a t'il possibiliter de le faire ?
merci

Il faut en savoir un peu plus ... Projet mobile ou fixe ? Si c'est fixe tu peux te servir d'un programmateur et d'une alim externe

bonjour
alors c un projet fix mais je ne veut pas de programateur externe car lors du redemarage, cela fait en fonction les relais 1/10 de sec et il ne le faut pas.
je ve que mon programe dorme pendant 4heure et relance le loop

Salut,

Peut-être en utilisant une RTC disposant d'alarmes, par exemple le PCF8583. Celui-ci générerait une interruption qui réveillera l'Arduino. Idée à creuser...

++

Ah donc bin si y'a pas de contrainte sur l'alimentation, tu peux utiliser la fonction millis() :

long Temps;
int Pause;

void setup(){
Temps=millis();
Pause=6;
...
 }

void loop(){
...
while(millis()<(Temps+Pause*60*60*1000)){
delay(100);
}

}

Idéalement il faudrait une horloge RTC car au bout de 50 jours millis() retourne à zero ce qui peut poser des problèmes dans le code, mais dans pas mal de cas ça suffit !

alors mon montage est deja fait et dispose d'une horloge ds1307

Avec ton code a chaque loop cela bloque 6h alors que j'ai des loop touts les minute

Je comprends pas la ... Tu voulais pas qu'elle bloque pendant 6h ??

djbouns:
alors mon montage est deja fait et dispose d'une horloge ds1307

Le hic c'est que le DS1307 ne sait pas générer d'alarme :sweat_smile:

Bonsoir,

Si je veut que mon arduino s’éteigne pendant 6h et redémarre.
mais le reste de la journée il fait des loop.
avec ton code, a chaque loop il va faire une pose de 6h non ?
enfaîte je veut que entre 1h du matin et 7h mon arduino s'arrette et redemarre.

:frowning:

Bonjour,

Personne n'a de solution ?

Merci

Salut,

Pour arrêter ton Arduino, il faut regarder du côté de la mise en veille de l'ATmega (voir datasheet). Je n'ai rien vu dans Arduino à ce sujet, donc il faudra mettre les mains dans le cambouis...
Pour le réveil, tu peux utiliser une RTC genre PCF8583 capable de générer des alarmes comme je te l'ai suggéré ci-dessus. Quand la RTC générera une alerte, elle provoquera une interruption sur l'ATmega qui le réveillera.

++

Bonjour,

La meilleur solution serait d'avoir un circuit RTC (PCF8583 par exemple) avec alarme.
Ou à défaut un montage quartz RTC + diviseur de fréquence pour générer une impulsion au moment adéquat.

Le tout avec un code utilisant les fonctions de mise en sommeil / réveil de la libc-avr :
http://www.nongnu.org/avr-libc/user-manual/group__avr__sleep.html

Exemple : Arduino Playground - ArduinoSleepCode

Une autre solution serait d'utiliser un timer pour réveiller l'arduino.
Une librairie existe sur ce sujet :
http://code.google.com/p/narcoleptic/

djbouns:
Bonsoir,

Si je veut que mon arduino s’éteigne pendant 6h et redémarre.
mais le reste de la journée il fait des loop.
avec ton code, a chaque loop il va faire une pose de 6h non ?
enfaîte je veut que entre 1h du matin et 7h mon arduino s'arrette et redemarre.

Dans ce cas pourquoi ne pas simplement lancer la pause quand il est 1h du mat ?

Bonjour et merci pour toutes vos réponses.

Alors pour tout vous dire .. je ne suis pas un expert et certain message ont été pour moi du "martien".
j'ai poser cette question car j'ai un problème sur mon installation.
j'ai fabriquer un boitier pour gestion d'un aquarium.
j'ai un code fonctionnel même si on ma dit a plusieurs reprise qu'il n’était pas optimiser ... mais faute d'avoir réussi a faire tourné correctement un code optimisé, je me contente de celui ci." si au passage quelqu’un s'avait le faire, je ne suis pas contre ... :slight_smile: "
Mon problème c'est que, sans s'avoir pourquoi ni quand, je me retrouve avec soit un Ecran bleu sans indication, soit plein de caractère incohérent.
cela parvient des fois en 3h comme en 3 jours ... :confused: mais cela ne gêne en rien le bon fonctionnement de tout mes appareils ...
je suis obliger de reteindre tout et tout repart normalement.
je voulait donc qu'a intervalle régulier il redémarre même ci je pence qu'il serait préférable de trouver la cause mais mes connaissance ne me le permet pas :frowning:

je vous met mon code si quelqu’un trouvait la faille.
ou une autre solution pour palier a se problème.

Merci d'avance a tous

#include "Time.h"
#include "LiquidCrystal.h"
#include "WProgram.h"
#include "Wire.h"
#include "DS1307.h"

/*
 sorti /entre Arduino
 Analog Pin 0 = Température Sensor
 Analog Pin 4 = SDA pour ds1307
 Analog Pin 5 = SCL pour ds1307
 Digital Pin 2 = LCD
 Digital Pin 3 = LCD
 Digital Pin 4 = LCD
 Digital Pin 5 = LCD
 Digital Pin 6 = power led
 Digital Pin 7 = ventilateur
 Digital pin 9 = rouge 
 Digital pin 10 = blanc
 Digital Pin 11 = LCD
 Digital Pin 12 = LCD
 Digital Pin 8 = bleu uv
 */

//Configuration des Pin de cablage**********************

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int sensorPin = 0;
int power_led = 6;
int bleu_uv = 8;
int rouge = 10;
int blanc = 9;
int ventilateur = 7;
int time;
float temp;
int timerPWM = 0;
int valeurPWM=0;
float GAMMA_CORRECTION = 2.2;
float PWMStep = 0;
int SeuilMini = 15;

//Configuration des heures allumage/extinction ( format HHMM )**********************

int bleu_uv_on_time = 1930;  
int bleu_uv_off_time = 2359; 
int ventilateur_on_temp = 27;  
int ventilateur_off_temp = 26;

int minut;
int heure;
int seconde;
int date;
int mois;
int annee;
int temps_perso;

//Configuration de l'heure ( pour modifier l'heure de votre Arduino, enlevez les /* et */ puis une foi le programe envoyé, remettez les )**********************

void setup() {
   /*
  RTC.stop();
  RTC.set(DS1307_SEC,30);           //réglage secondes
  RTC.set(DS1307_MIN,37);              //réglage minutes
  RTC.set(DS1307_HR,8);               //réglage heures
  RTC.set(DS1307_DOW,6);               //réglage jour de la semaine
  RTC.set(DS1307_DATE,15);             //réglage date
  RTC.set(DS1307_MTH,9);               //réglage mois
  RTC.set(DS1307_YR,12);                 //réglage année
  RTC.start();
  */
  
 //Configuration des entrées/sorties********************** 
  
  pinMode(ventilateur, OUTPUT);  // digital pin ventilateur 1 
  pinMode(bleu_uv, OUTPUT);  // digital pin pour bleu uv
  pinMode(blanc, OUTPUT);  // digital pin pour blanc
  pinMode(rouge, OUTPUT);  // digital pin pour rouge
  pinMode(power_led, OUTPUT);  // digital pin pour power led

lcd.begin(16, 2);
Serial.begin(9600);  

}

void loop(){

  
  //Récupération de l'heure du DS1307**********************************************************************************************

  heure = RTC.get(DS1307_HR,true);  
  minut = RTC.get(DS1307_MIN,false);
  seconde = RTC.get(DS1307_SEC,false);
  date = RTC.get(DS1307_DATE,false);
  mois = RTC.get(DS1307_MTH,false);
  annee = RTC.get(DS1307_YR,false);
  temps_perso = (heure * 100) + minut;  
  
    //Affichage heure******************************************************************************************
  lcd.setCursor(0,0);
  if (heure < 10)
  {
    lcd.print("0");
  }
  lcd.print(RTC.get(DS1307_HR,true));
  lcd.print("H");
  if (minut < 10)
  {
    lcd.print("0");
  }
  lcd.print(RTC.get(DS1307_MIN,false));
  lcd.print(" ");
  delay (100);

  //Récupération de la température du LM35 ***************************************************************************************

  temp = analogRead(sensorPin);  
  temp = (temp * 0.538);
 
  //Affichage température*****************************************************************************

  lcd.setCursor(10,0);
  lcd.print(temp);
  lcd.print((char)223);

  //****************ventilateur
   if(temp > ventilateur_on_temp){
    digitalWrite(ventilateur, HIGH);
      }  
  if(temp < ventilateur_off_temp){    
    digitalWrite(ventilateur, LOW);
  }
  
     //****Affichage ventilateur ********

  lcd.setCursor(0,1);
  if(digitalRead(ventilateur) == HIGH)
  {
    lcd.println("ventilateur ON      ");
   int millis (5000);
  }
  else
  {
    lcd.println("ventilateur OFF     ");
int millis (5000);
  }
  
    //*****Controle des sorties eclairage *********
  
   //**on-off******* bleu uv *************
  if(bleu_uv_on_time > temps_perso  || bleu_uv_off_time <= temps_perso){
    digitalWrite(bleu_uv, LOW);
   }
  else{
    
    digitalWrite(bleu_uv, HIGH);
   }
   
    //***on-off***** rouge ***
  
if (heure ==  8)  { 
    PWMStep = 255 / 59;
    timerPWM = minut-60;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (rouge, valeurPWM);
  lcd.setCursor(0,1);
    lcd.print(" + + ROUGE + +   ");
    delay(2000);
  }
  
 else if ((heure == 20) && (minut >30)) { // entre 20:00 et 20:59:59 
    PWMStep = 255 / 29;
    timerPWM = 30-minut;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (rouge, valeurPWM);
lcd.setCursor(0,1);
    lcd.print(" - - ROUGE - -  ");
    delay(2000);
 
  }  
  
  else if ((heure >= 9 ) && (heure < 21)) {
    analogWrite(rouge, 255);
   lcd.setCursor(0,1);
    lcd.print("ROUGE     on    ");
    delay(2000);
  }
else if (heure <= 21) {
    analogWrite(rouge, 0);
  }
   
 //***on-off***** blanc ***
  
 if ((heure ==  8) && (minut >30)) { 
    PWMStep = 255 / 29;
    timerPWM = minut-30;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (blanc, valeurPWM);
lcd.setCursor(0,1);
    lcd.print(" + + BLANC + +   ");
    delay(2000);
  
  }
  
 else if (heure == 20) { // entre 20:00 et 20:59:59 
    PWMStep = 255 / 60;
    timerPWM = 60-minut;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (blanc, valeurPWM); 
lcd.setCursor(0,1);
    lcd.print(" - - BLANC - -  ");
    delay(2000);
  }  
  
  else if ((heure >= 9 ) && (heure < 21)) {
    analogWrite(blanc, 255);
    lcd.setCursor(0,1);
    lcd.print("BLANC     on    ");
    delay(2000);
  }
else if (heure <= 21) {
    analogWrite(blanc, 0);
  }

//***on-off***** power led ***

  if (heure ==  9)  { 
    PWMStep = 255 / 59;
    timerPWM = minut-60;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (power_led, valeurPWM);
    if( valeurPWM < SeuilMini ) valeurPWM = 0;
lcd.setCursor(0,1);
    lcd.print(" + POWER led +   ");
    delay(2000);

  }
else if (heure == 20) { // entre 20:00 et 20:59:59 
    PWMStep = 255 / 60;
    timerPWM = 60-minut;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (power_led, valeurPWM);
  if( valeurPWM < SeuilMini ) valeurPWM = 0;
lcd.setCursor(0,1);
    lcd.print(" - POWER led -   ");
    delay(2000);

  }
else if ((heure >= 10 ) && (heure < 21)) {
    analogWrite(power_led, 255);
lcd.setCursor(0,1);
    lcd.print("POWER led   on     ");
    delay(2000);

  }
else if (heure <= 21) {
    analogWrite(power_led, 0);
  }
 }

Ah oui ok, enfin on va se comprendre !!

Alors même si je comprends ton point de vue, c'est quand même une solution vraiment à l'arrache que de vouloir faire un reset, surtout que ton problème n'est pas insolvable, loin de la ! Quelques petits point "à la va vite" :

  heure = RTC.get(DS1307_HR,true);  
  minut = RTC.get(DS1307_MIN,false);
  seconde = RTC.get(DS1307_SEC,false);
  date = RTC.get(DS1307_DATE,false);
  mois = RTC.get(DS1307_MTH,false);
  annee = RTC.get(DS1307_YR,false);
  temps_perso = (heure * 100) + minut;  
  
    //Affichage heure******************************************************************************************
  lcd.setCursor(0,0);
  if (heure < 10)
  {
    lcd.print("0");
  }
  lcd.print(RTC.get(DS1307_HR,true));
  lcd.print("H");
  if (minut < 10)
  {
    lcd.print("0");
  }
  lcd.print(RTC.get(DS1307_MIN,false));
  lcd.print(" ");

  delay (100);

Pourquoi récupérer la date pour ensuite la redemander ?

Ensuite je sais pas si c'est la que ça bug mais il y a des trous dans ta programmation horaire : que se passe-t-il entre minuit et 8h30/9h ? Il vaut mieux par sécurité toujours prévoir un état de ton système.

Après quand une action a lieu, l'heure n'est affichée que 100 millisecondes, ça doit flashé !

Sinon ton bug est peut-être lié au fait que des fois essaye d'afficher plus de caractères que le LCD peut, par exemple " + POWER led + " = 17 caractères ! Utilise la fonction lcd.clear()

Bonsoir,

Ta question n'est surement pas bête ...

voila plus de 2 mois que je travaille sur se code et + de 3 mois sur le hardware.
j'ai piocher dans des dizaine de code que j'ai trouver + des ajout/suppression qui mon été conseiller sur les forums.
il y a environ 2 semaine que j'ai réussi a mettre bout a bout des codes qui font toute les action que je désir.

ressentant dans certaine réponse sur les forum un certain "mépris" pour un débutant posant des questions évidentes pour certain, je n'est pas voulu insister ni demander que l'on me refasse mon code.

Je suis déjà très content d’être arriver a se niveau de réalisation mais il est vrai que les 10% restant me dépasse et je suis incapable de pouvoir les résoudre seuls.
Alors je cherche, recherche, lis et re lis, afin de comprendre par moi même, mais je sèche ...

Je vient de comprendre ta question et oui effectivement il n'y a aucun intérès.
en se qui concerne le delay, je n'est pas de flash sur l'heure.

Je vais donc surpimer:
heure = RTC.get(DS1307_HR,true);
minut = RTC.get(DS1307_MIN,false);
seconde = RTC.get(DS1307_SEC,false);
date = RTC.get(DS1307_DATE,false);
mois = RTC.get(DS1307_MTH,false);
annee = RTC.get(DS1307_YR,false);
temps_perso = (heure * 100) + minut;

et compter le nombre de caractère pour éteindre 16.

voila mon code avec les modification

#include "Time.h"
#include "LiquidCrystal.h"
#include "WProgram.h"
#include "Wire.h"
#include "DS1307.h"

/*
 sorti /entre Arduino
 Analog Pin 0 = Température Sensor
 Analog Pin 4 = SDA pour ds1307
 Analog Pin 5 = SCL pour ds1307
 Digital Pin 2 = LCD
 Digital Pin 3 = LCD
 Digital Pin 4 = LCD
 Digital Pin 5 = LCD
 Digital Pin 6 = power led
 Digital Pin 7 = ventilateur
 Digital pin 9 = rouge 
 Digital pin 10 = blanc
 Digital Pin 11 = LCD
 Digital Pin 12 = LCD
 Digital Pin 8 = bleu uv
 */

//Configuration des Pin de cablage**********************

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int sensorPin = 0;
int power_led = 6;
int bleu_uv = 8;
int rouge = 10;
int blanc = 9;
int ventilateur = 7;
int time;
float temp;
int timerPWM = 0;
int valeurPWM=0;
float PWMStep = 0;
int SeuilMini = 18;

//Configuration des heures allumage/extinction ( format HHMM )**********************

int bleu_uv_on_time = 2030;  
int bleu_uv_off_time = 2359; 
int ventilateur_on_temp = 27;  
int ventilateur_off_temp = 26;

int minut;
int heure;
int temps_perso;

//Configuration de l'heure ( pour modifier l'heure de votre Arduino, enlevez les /* et */ puis une foi le programe envoyé, remettez les )**********************

void setup() {
   /*
  RTC.stop();
  RTC.set(DS1307_SEC,30);           //réglage secondes
  RTC.set(DS1307_MIN,37);              //réglage minutes
  RTC.set(DS1307_HR,8);               //réglage heures
  RTC.set(DS1307_DOW,6);               //réglage jour de la semaine
  RTC.set(DS1307_DATE,15);             //réglage date
  RTC.set(DS1307_MTH,9);               //réglage mois
  RTC.set(DS1307_YR,12);                 //réglage année
  RTC.start();
  */
  
 //Configuration des entrées/sorties********************** 
  
  pinMode(ventilateur, OUTPUT);  // digital pin ventilateur 1 
  pinMode(bleu_uv, OUTPUT);  // digital pin pour bleu uv
  pinMode(blanc, OUTPUT);  // digital pin pour blanc
  pinMode(rouge, OUTPUT);  // digital pin pour rouge
  pinMode(power_led, OUTPUT);  // digital pin pour power led

lcd.begin(16, 2);
Serial.begin(9600);  

}

void loop(){

  
  //Récupération de l'heure du DS1307**********************************************************************************************

  heure = RTC.get(DS1307_HR,true);  
  minut = RTC.get(DS1307_MIN,false);
  temps_perso = (heure * 100) + minut;  
  
    //Affichage heure******************************************************************************************
  lcd.setCursor(0,0);
  if (heure < 10)
  {
    lcd.print("0");
  }
  lcd.print(heure);
  lcd.print("H");
  if (minut < 10)
  {
    lcd.print("0");
  }
  lcd.print(minut);
  lcd.print(" ");
  delay (100);

  //Récupération de la température du LM35 ***************************************************************************************

  temp = analogRead(sensorPin);  
  temp = (temp * 0.538);
 
  //Affichage température*****************************************************************************

  lcd.setCursor(10,0);
  lcd.print(temp);
  lcd.print((char)223);

  //****************ventilateur
   if(temp > ventilateur_on_temp){
    digitalWrite(ventilateur, HIGH);
      }  
  if(temp < ventilateur_off_temp){    
    digitalWrite(ventilateur, LOW);
  }
  
     //****Affichage ventilateur ********

  lcd.setCursor(0,1);
  if(digitalRead(ventilateur) == HIGH)
  {
    lcd.println("ventilateur ON  ");
   int millis (5000);
  }
  else
  {
    lcd.println("ventilateur OFF ");
int millis (5000);
  }
  
    //*****Controle des sorties eclairage *********
  
   //**on-off******* bleu uv *************
  if(bleu_uv_on_time > temps_perso  || bleu_uv_off_time <= temps_perso){
    digitalWrite(bleu_uv, LOW);
   }
  else{
    
    digitalWrite(bleu_uv, HIGH);
   }
   
    //***on-off***** rouge ***
  
if (heure ==  8)  { 
    PWMStep = 255 / 59;
    timerPWM = minut-60;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (rouge, valeurPWM);
  lcd.setCursor(0,1);
    lcd.print(" + + ROUGE + +  ");
    delay(2000);
  }
  
 else if ((heure == 20) && (minut >30)) { 
    PWMStep = 255 / 29;
    timerPWM = 30-minut;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (rouge, valeurPWM);
lcd.setCursor(0,1);
    lcd.print(" - - ROUGE - -  ");
    delay(2000);
 
  }  
  
  else if ((heure >= 9 ) && (heure < 21)) {
    analogWrite(rouge, 255);
   lcd.setCursor(0,1);
    lcd.print("ROUGE     on    ");
    delay(2000);
  }
else if (heure <= 21) {
    analogWrite(rouge, 0);
  }
   
 //***on-off***** blanc ***
  
 if ((heure ==  8) && (minut >30)) { 
    PWMStep = 255 / 29;
    timerPWM = minut-30;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (blanc, valeurPWM);
lcd.setCursor(0,1);
    lcd.print(" + + BLANC + +  ");
    delay(2000);
  
  }
  
 else if (heure == 20) { 
    PWMStep = 255 / 60;
    timerPWM = 60-minut;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (blanc, valeurPWM); 
lcd.setCursor(0,1);
    lcd.print(" - - BLANC - -  ");
    delay(2000);
  }  
  
  else if ((heure >= 9 ) && (heure < 21)) {
    analogWrite(blanc, 255);
    lcd.setCursor(0,1);
    lcd.print("BLANC     on    ");
    delay(2000);
  }
else if (heure <= 21) {
    analogWrite(blanc, 0);
  }

//***on-off***** power led ***

  if (heure ==  9)  { 
    PWMStep = 255 / 59;
    timerPWM = minut-60;
    if( valeurPWM < SeuilMini ) valeurPWM = 0;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (power_led, valeurPWM);
    
lcd.setCursor(0,1);
    lcd.print(" + POWER led +  ");
    delay(2000);

  }
else if (heure == 20) { // entre 20:00 et 20:59:59 
    PWMStep = 255 / 60;
    timerPWM = 60-minut;
    valeurPWM = (int)(timerPWM * PWMStep);
    if( valeurPWM < SeuilMini ) valeurPWM = 0;
    analogWrite (power_led, valeurPWM);
lcd.setCursor(0,1);
    lcd.print(" - POWER led -  ");
    delay(2000);

  }
else if ((heure >= 10 ) && (heure < 21)) {
    analogWrite(power_led, 255);
lcd.setCursor(0,1);
    lcd.print("POWER led   on  ");
    delay(2000);

  }
else if (heure <= 21) {
    analogWrite(power_led, 0);
  }
 }

De plus, je suis sur version 0022 car je n'est jamais trouver de code qui marchait sur 1.01.
on ma dit que c’était mieux pour la librairie ds1307new.
cela participe peut être a mes problème non ?

et voici, j'ai r'ajouter entre 0h et 8/9h

c'est mieux comme sa ? :~

#include "Time.h"
#include "LiquidCrystal.h"
#include "WProgram.h"
#include "Wire.h"
#include "DS1307.h"

/*
 sorti /entre Arduino
 Analog Pin 0 = Température Sensor
 Analog Pin 4 = SDA pour ds1307
 Analog Pin 5 = SCL pour ds1307
 Digital Pin 2 = LCD
 Digital Pin 3 = LCD
 Digital Pin 4 = LCD
 Digital Pin 5 = LCD
 Digital Pin 6 = power led
 Digital Pin 7 = ventilateur
 Digital pin 9 = rouge 
 Digital pin 10 = blanc
 Digital Pin 11 = LCD
 Digital Pin 12 = LCD
 Digital Pin 8 = bleu uv
 */

//Configuration des Pin de cablage**********************

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int sensorPin = 0;
int power_led = 6;
int bleu_uv = 8;
int rouge = 10;
int blanc = 9;
int ventilateur = 7;
int time;
float temp;
int timerPWM = 0;
int valeurPWM=0;
float PWMStep = 0;
int SeuilMini = 18;

//Configuration des heures allumage/extinction ( format HHMM )**********************

int bleu_uv_on_time = 2030;  
int bleu_uv_off_time = 2359; 
int ventilateur_on_temp = 27;  
int ventilateur_off_temp = 26;

int minut;
int heure;
int temps_perso;

//Configuration de l'heure ( pour modifier l'heure de votre Arduino, enlevez les /* et */ puis une foi le programe envoyé, remettez les )**********************

void setup() {
   /*
  RTC.stop();
  RTC.set(DS1307_SEC,30);           //réglage secondes
  RTC.set(DS1307_MIN,37);              //réglage minutes
  RTC.set(DS1307_HR,8);               //réglage heures
  RTC.set(DS1307_DOW,6);               //réglage jour de la semaine
  RTC.set(DS1307_DATE,15);             //réglage date
  RTC.set(DS1307_MTH,9);               //réglage mois
  RTC.set(DS1307_YR,12);                 //réglage année
  RTC.start();
  */
  
 //Configuration des entrées/sorties********************** 
  
  pinMode(ventilateur, OUTPUT);  // digital pin ventilateur 1 
  pinMode(bleu_uv, OUTPUT);  // digital pin pour bleu uv
  pinMode(blanc, OUTPUT);  // digital pin pour blanc
  pinMode(rouge, OUTPUT);  // digital pin pour rouge
  pinMode(power_led, OUTPUT);  // digital pin pour power led

lcd.begin(16, 2);
Serial.begin(9600);  

}

void loop(){

  
  //Récupération de l'heure du DS1307**********************************************************************************************

  heure = RTC.get(DS1307_HR,true);  
  minut = RTC.get(DS1307_MIN,false);
  temps_perso = (heure * 100) + minut;  
  
    //Affichage heure******************************************************************************************
  lcd.setCursor(0,0);
  if (heure < 10)
  {
    lcd.print("0");
  }
  lcd.print(heure);
  lcd.print("H");
  if (minut < 10)
  {
    lcd.print("0");
  }
  lcd.print(minut);
  lcd.print(" ");
  delay (100);

  //Récupération de la température du LM35 ***************************************************************************************

 int reading = analogRead(sensorPin);  
  float voltage = reading * 5.51 / 1024;
  int temp = voltage * 100 ;
 
  //Affichage température*****************************************************************************

  lcd.setCursor(12,0);
  lcd.print(temp);
  lcd.print((char)223);

  //****************ventilateur
   if(temp > ventilateur_on_temp){
    digitalWrite(ventilateur, HIGH);
      }  
  if(temp < ventilateur_off_temp){    
    digitalWrite(ventilateur, LOW);
  }
  
     //****Affichage ventilateur ********

  lcd.setCursor(0,1);
  if(digitalRead(ventilateur) == HIGH)
  {
    lcd.println("ventilateur ON  ");
   int millis (5000);
  }
  else
  {
    lcd.println("ventilateur OFF ");
int millis (5000);
  }
  
    //*****Controle des sorties eclairage *********
  
   //**on-off******* bleu uv *************
  if(bleu_uv_on_time > temps_perso  || bleu_uv_off_time <= temps_perso){
    digitalWrite(bleu_uv, LOW);
   }
  else{
    
    digitalWrite(bleu_uv, HIGH);
   }
   
    //***on-off***** rouge ***
  
if (heure ==  8)  { 
    PWMStep = 255 / 59;
    timerPWM = minut-60;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (rouge, valeurPWM);
  lcd.setCursor(0,1);
    lcd.print(" + + ROUGE + +  ");
    delay(2000);
  }
  
 else if ((heure == 20) && (minut >30)) { 
    PWMStep = 255 / 29;
    timerPWM = 30-minut;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (rouge, valeurPWM);
lcd.setCursor(0,1);
    lcd.print(" - - ROUGE - -  ");
    delay(2000);
 
  }  
  
  else if ((heure >= 9 ) && (heure < 21)) {
    analogWrite(rouge, 255);
   lcd.setCursor(0,1);
    lcd.print("ROUGE     on    ");
    delay(2000);
  }
else if ((heure >= 21) && (heure < 8 )){
    analogWrite(rouge, 0);
  }
   
 //***on-off***** blanc ***
  
 if ((heure ==  8) && (minut >30)) { 
    PWMStep = 255 / 29;
    timerPWM = minut-30;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (blanc, valeurPWM);
lcd.setCursor(0,1);
    lcd.print(" + + BLANC + +  ");
    delay(2000);
  
  }
  
 else if (heure == 20) { 
    PWMStep = 255 / 60;
    timerPWM = 60-minut;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (blanc, valeurPWM); 
lcd.setCursor(0,1);
    lcd.print(" - - BLANC - -  ");
    delay(2000);
  }  
  
  else if ((heure >= 9 ) && (heure < 21)) {
    analogWrite(blanc, 255);
    lcd.setCursor(0,1);
    lcd.print("BLANC     on    ");
    delay(2000);
  }
else if ((heure >= 21) && (heure < 8 )){
    analogWrite(blanc, 0);
  }

//***on-off***** power led ***

  if (heure ==  9)  { 
    PWMStep = 255 / 59;
    timerPWM = minut-60;
    if( valeurPWM < SeuilMini ) valeurPWM = 0;
    valeurPWM = (int)(timerPWM * PWMStep);
    analogWrite (power_led, valeurPWM);
    
lcd.setCursor(0,1);
    lcd.print(" + POWER led +  ");
    delay(2000);

  }
else if (heure == 20) { // entre 20:00 et 20:59:59 
    PWMStep = 255 / 60;
    timerPWM = 60-minut;
    valeurPWM = (int)(timerPWM * PWMStep);
    if( valeurPWM < SeuilMini ) valeurPWM = 0;
    analogWrite (power_led, valeurPWM);
lcd.setCursor(0,1);
    lcd.print(" - POWER led -  ");
    delay(2000);

  }
else if ((heure >= 10 ) && (heure < 21)) {
    analogWrite(power_led, 255);
lcd.setCursor(0,1);
    lcd.print("POWER led   on  ");
    delay(2000);

  }
else if ((heure >= 21) && (heure < 9 )){
    analogWrite(power_led, 0);
  }
 }