arduino et horloge rtc pour programateur horraire

bonjour a tous

voila je bloque sur un bout de code

j'ai une arduino uno et une horloge rtc clasique ds1307

je récupère l'heure de la rtc sans probleme mais je bloque sur mon code

j'ai fait un bout de code pour géré une sortie en fonction de l'heure mais je me suis apercu que si je prenais une plage qui passait par minuit ben sa ne fonctionnai pas

voila mon code

#include <SPI.h>
#include <LiquidCrystal.h>
#include <Wire.h>
#include <Arduino.h>
#include <DS1307.h>


int lampe = 10;

//DECLARATION HEURE
int minute;
int heure; 
int seconde;
int date;
int mois;
int annee; 
int temps_perso; // temp perso = heure X 100 + minutes, exemple 23h22 donnera la valeur 2322 en temp perso


int lampe_on = 2200; //allume la lampe a 22h00
int lampe_off = 2300;

void setup()
{

pinMode(lampe, OUTPUT);

}

void loop()
{
  
//RECUPERER LHEURE DU DS1307
heure = RTC.get(DS1307_HR,true);  
minute = 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) + minute;

//COMPARE POUR LA LAMPE
if(temps_perso > lampe_on && temps_perso < lampe_off){
digitalWrite(lampe,HIGH);//
}
else
{
digitalWrite(lampe, LOW);//
}
}

bon jai virer du code pour le lcd et tout mais bon voila le principe

dans l'exemple je programme la sortie a l'état HIGH a 22H00 et OFF a 23H00

cette exmple fonctionne sans probleme mais si je programme par exmple ON a 22h00 et off a 01H00 du matin ben ma sortie reste a l'etat bas

je pense que mon histoire de temp perso ( heure X 100 + minute ) n'est pas adapter pour passer minuit mais je ne vois pas comment fair surtout que je voudrai garder le reglage de l'heure simple avant le void setup

si quelle qu'un a un bout de code qui va bien pour fair de la prog horraire sa serrai cool

merci a vous

Bonjour,
Si tu allumes le jour J à une heure H1 et si tu éteins le jour J+1 à une heure H2, il te faut intégrer dans ta variable en plus de l'heure le jour.
Pourquoi un pas utiliser une notion style jourJulien ?
@+

Tu peux faire tout simplement

if(temps_perso == lampe_on){
digitalWrite(lampe,HIGH);//
}
if(temps_perso == lampe_off){
digitalWrite(lampe, LOW);//
}

Evidemment si tu mets l'arduino sous tension au milieu de la plage horaire il n'allumera pas la lampe. Voir si c'est gênant pour toi.

Avec un peu de réflexion on trouve une solution satisfaisante. Il faut gérer les 2 cas possibles:

  • lampe_on inférieur à lampe_off
  • lampe_on supérieur à lampe_off
//COMPARE POUR LA LAMPE
if(lampe_on < lampe_off){
	if(temps_perso > lampe_on && temps_perso < lampe_off){
		digitalWrite(lampe,HIGH);//
	}
	else
	{
		digitalWrite(lampe, LOW);//
	}
} else {
	if(temps_perso > lampe_on || temps_perso < lampe_off){
		digitalWrite(lampe,HIGH);//
	}
	else
	{
		digitalWrite(lampe, LOW);//
	}
	
}
1 Like