Allumage LED suivant heure

Bonsoir à tous,

J'apprends beaucoup sur le forum et je commence à bien avancer sur mon petit automate d'aquarium.

j'ai réussi à afficher différentes températures et mesure de ph sur écran lcd.

A ce stade je souhaiterais pouvoir programmer l'allumage de Leds en fonction d'une certaine plage horaire.
Chose qu'à priori j'ai réussi avec le code

 if ((now.hour() > 10) && ((((now.hour() <=21) && (now.minute() == 52))))) 
   
   {
    digitalWrite(pinLed1,HIGH);
   }
   else
   {
  digitalWrite(pinLed1,LOW);
   }

Par contre je voudrais avoir la possibilité d'éteindre ou d'allumer en manuel avec un bouton poussoir, dans le cas ou les Leds sont éteintes par exemple (en dehors de la plage horaire ci-dessous)
J'ai utilisé le code

boolean etatBouton = digitalRead(pinBouton);
 if (etatBouton==HIGH);
 {
  digitalWrite(pinLed1,HIGH);
 }

 else  (etatBouton==LOW)
 {
  digitalWrite(pinLed1,LOW);
 }

Mais je n'arrive pas à le placer correctement dans mon code. Je pense que je m'embrouille avec les conditions.
Merci d'avance pour vos "éclaircissement"

Bonjour,

Premièrement ton test de l'heure est faux et la led ne sera allumée que pendant la 52eme minute entre 10h et 21h. Si tu ne veux pas te faire des noeuds au cerveau pour les comparaisons de temps convertit tout en minutes.

Deuxièmement pour faire ce que tu veux il te faut deux flags
un flag pour l'état allumé suivant l'heure
un flag pour l'état allumé effectif qui changera d'état lors du changement d'état lors du changement d'état suivant l'heure et lorsqu'on appuie sur le bouton (il faut tester l'appui sur le bouton et non son changement d'état).
Ehsuite tu allumes/éteins la led suivant l'état du 2eme flag.

Merci Kamill,

je pense que j'ai été un peu optimiste pour faire cela. Je vais devoir un peu approfondir mes connaissances:)

Si on analyse bien les choses, c'est quand même relativement simple.
Soit je te laisse chercher, soit si tu veux je peux te proposer un code exemple.

J'ai bien compris la logique mais j'ai encore du mal à organiser les choses.
Si tu as un peu de temps je veux bien un exemple pour bien comprendre le cheminement et l'organisation des conditions.
En tout cas c'est super sympa de m'aider, je suis vraiment pas du domaine c'est pas simple :slight_smile:

Voila une façon de faire. Il y en a d'autres.
Contrairement à ce que j'avais préconisé je n'ai pas converti l'heure en minutes, mais multiplié l'heure par 100 et ajouté les minutes. C'est plus pratique pour écrire les heures limites 10:00 -> 1000 et 21:52 -> 2152

  // traitement de l'heure
  static bool etatLedHeure = false;
  static bool etatLed = false;
  int tempsMn = now.hour() * 100 + now.minute();
  if (tempsMn > 1000 && tempsMn <= 2152)
  {
    if (!etatLedHeure)
      etatLed = etatLedHeure = true; // on a changé détat, on met à jour l'état de la led
  }
  else
  {
    if (etatLedHeure)
      etatLed = etatLedHeure = false; // on a changé détat, on met à jour l'état de la led
  }

  // traitement du bouton
  static bool etatPrecedentBouton = false;
  bool etatBouton = digitalRead(pinBouton);
  if (etatBouton!=etatPrecedentBouton)
  {
    if (etatBouton)
      etatLed = !etatLed;           // inverse l'état de la led à l'appui du bouton
    etatPrecedentBouton = etatBouton;
    delay(20);                    // anti rebond
  }

  // traitement de la led
  digitalWrite(pinLed1, etatLed);

@Kamill
:slight_smile: bien vu la multiplication par 100 :slight_smile:

Merci Kamill

Super l'idée de multiplier par 100 et additionner les minutes, je n'y aurai pas pensé.
Par contre quand tu disais que c'étais assez simple, c'est pas évident quand même, il me manque quelques notions :slight_smile:

J'ai essayé ça marche parfaitement pour le bouton poussoir, par contre l'heure s'éteint bien à 21h52 par exemple mais s'allume apparemment avant 10h (la nuit je ne sais pas quand). Je vais regarder ça de près.

Merci d'avoir pris le temps!