j'espere poster dans la bonne rubrique... ! voila mon souci, je vais essayer d'etre clair... : j'essaye d'utiliser des structures pour definir des plages horaires par jour et par profil de semaine...
je definis donc les structures suivantes : (j'ai limité à 2 plages par jour, et 2 jours, et 2 profils)
typedef struct Plage //Structure pour plage horaires ( 5 bytes)
{ byte HeurDeb; byte MinDeb; byte HeurFin; byte MinFin; byte Consigne; };
typedef struct Jour //Structure pour Jour (8 plages = 40 bytes)
{
Plage plage1;
Plage plage2;
};
typedef struct Profil //Structure pour Profil (7 jours)
{
Jour lundi;
Jour mardi;
};
je declare ensuite la variable suivante : struct Profil profil_1;
pour initialiser la zone de donnees correspondantes (taille fixe donc)
pas de probleme pour affecter des valeurs a chaque membre de cette stucture...( je pense faire des affectations simples type
profil_1.lundi.plage1.HeurDeb = 17; // 17h
profil_1.lundi.plage1.Consigne = 25; // 25°
par ex... etc...
mon probleme ensuite est d'acceder a l'élément Consigne en fonction du jour et de la plage horaire courante... j'ai donc crée une fonction pour me retourner la valeur de consigne quand le nb de minute donnée par mon horloge locale (hr,mn) donc 60*hr+mn, est compris dans l'intervalle correspondant de la bonne plage horaire soit le code suivant :
byte renvoyer_consigne ()
{
int time=60*hr+mn; // nb de minutes de la journée
int timedeb,timefin;
// en mode auto definit valeur consigne suivant (choix_profil,jour,hr,mn)
if (choix_profil == 1)
{ switch (jour)
{
case 1: // lun
if (profil_1.lundi.plage1.Consigne) { // Consigne non nul donc plage definie
timedeb=profil_1.lundi.plage1.HeurDeb*60 + profil_1.lundi.plage1.MinDeb;
timefin=profil_1.lundi.plage1.HeurFin*60 + profil_1.lundi.plage1.MinFin;
if (timedeb <= time <= timefin) return profil_1.lundi.plage1.Consigne; }
if (profil_1.lundi.plage2.Consigne) { // Consigne non nul donc plage definie
timedeb=profil_1.lundi.plage2.HeurDeb*60 + profil_1.lundi.plage2.MinDeb;
timefin=profil_1.lundi.plage2.HeurFin*60 + profil_1.lundi.plage2.MinFin;
if (timedeb <= time <= timefin) return profil_1.lundi.plage2.Consigne; }
case 2: // mar
if (profil_1.mardi.plage1.Consigne) { // Consigne non nul donc plage definie
timedeb=profil_1.mardi.plage1.HeurDeb*60 + profil_1.mardi.plage1.MinDeb;
timefin=profil_1.mardi.plage1.HeurFin*60 + profil_1.mardi.plage1.MinFin;
if (timedeb <= time <= timefin) return profil_1.mardi.plage1.Consigne; }
if (profil_1.mardi.plage2.Consigne) { // Consigne non nul donc plage definie
timedeb=profil_1.lundi.plage2.HeurDeb*60 + profil_1.lundi.plage2.MinDeb;
timefin=profil_1.lundi.plage2.HeurFin*60 + profil_1.lundi.plage2.MinFin;
if (timedeb <= time <= timefin) return profil_1.lundi.plage2.Consigne; }
}
}
}
je bute comment coder pour eviter de me taper les 7 jours x 8 plages horaires pour chaque profil...!!
je pensais utiliser des pointeurs mais mes essais ne sont pas concluants ... et je ne suis pas un pro des pointeurs... surtout pour acceder a des elements de structures imbriquées...
quelqu'un aurait t-il une methode à me suggerer pour m'eviter une "arduinite" aigue de l'index? et surtout une maniere élégante de resoudre ce souci...
merci à vous !!