Pojet LED Interrupteur temporisation

Bonjour à toutes et à tous.

Ceci et mon premier post sur Arduino, et aussi mon premier projet (après avoir finit le fameux starterkit…)

Celui-ci consiste à allumer une LED via un interrupteur, cette dernière devrait s’allumer un temps donné ce mettre en phase de repos, et redémarrer le cycle. Bien sur sans utiliser la fonction delay, mais millis().

Je ne vous cache pas que je galère méchamment avec le code. Je n’ai pad d’erreur apparente mais celui-ci ne fonctionne pas :

const int broche_BP = 6;
const int broche_LED = 8;

int etat_BP = 0; // etat du bouton poussoir
int prevEtat_BP;

unsigned long previousTime = 0; //enregistre le dernier etat d'une led changé

long interval_cycle_a = 10000;  // cycle numero LED 1
long interval_cycle_b = 20000;  // cycle numero LED 2
long repos = 10000;             // temps de repos entre deux cycle d'allumage de la LED

void setup() {

  Serial.begin(9600);
  pinMode(broche_BP, INPUT);
  pinMode(broche_LED, OUTPUT);
}

void loop() {


  unsigned long TempsActuel = millis(); // temps depuis lequel le programme est lancé
  etat_BP = digitalRead(broche_BP);

  if (etat_BP == HIGH) {  
    digitalWrite(8, HIGH);   // Si le Bouton Poussoir et On la LED est allumé

    previousTime = TempsActuel;   // Enregistrement de la valeur de la premiere mise sous tension de la LED
  }
  
  else {
    digitalWrite(8, LOW);     
  }
  
  if (etat_BP == HIGH && TempsActuel <= previousTime + interval_cycle_a) {
    digitalWrite(8, HIGH);                //La LED et ON temps que l'intervalle du cycle a n'est pas depassé    
  }
  
  else  (TempsActuel >= previousTime + interval_cycle_a);
  digitalWrite(8, LOW);                   //Le temps de l'intervalle du cycle a est depassé la LED ce met en OFF

 
  
  if (TempsActuel                         //Après il faudrait que le temps de repos s'écoule avant que le cycle a ne se relance et que la bouche infini ce mette en place.


}

Le but final est d’avoir un éclairage pour plante avec plusieurs cycle 15H/18H/20H par jour, avec un bouton qui correspond à chaque cycle. La j’en suis vraiment à la version simplifié du projet avec un bouton et un cycle, mais bon je galère déjà pas mal pour le code, je commence à sécher… Si un maker expérimenté passe par la, n’hésitez pas !

Bonne journée à tous, au plaisir de vous lire.

Bon en changeant légèrement mon code, il se passe enfin quelque chose au niveau de la LED. C’est pas encore l’objectif voulu mais on s’y rapproche…

Sur OFF la LED reste allumé 10 sec et s’éteint ( ca aurait été mieux sur ON aha) et sur ON elle reste allumé tout le tems. Vous serez d’accord que c’est pas du tout l’objectif, mais au moins il y a bien une temporisation quelque part…

J’essaye de résoudre tout ça et je reviens ici !

Le code V2 :

const int broche_BP = 6;
const int broche_LED = 8;

int etat_BP = 0; // etat du bouton poussoir
int prevEtat_BP;

unsigned long previousTime = 0; //enregistre le dernier etat d'une led changé

long interval_cycle_a = 10000;  // cycle numero LED 1
long interval_cycle_b = 20000;  // cycle numero LED 2
long repos = 10000;             // temps de repos entre deux cycle d'allumage de la LED

void setup() {

  Serial.begin(9600);
  pinMode(broche_BP, INPUT);
  pinMode(broche_LED, OUTPUT);
}

void loop() {


  unsigned long TempsActuel = millis(); // temps depuis lequel le programme est lancé
  etat_BP = digitalRead(broche_BP);

  if (etat_BP == HIGH) {  
    digitalWrite(8, HIGH);   // Si le Bouton Poussoir et On la LED est allumé

    previousTime = TempsActuel;   // Enregistrement de la valeur de la premiere mise sous tension de la LED
  }
  
  else {
    digitalWrite(8, LOW);     
  }
  
  if (TempsActuel <= previousTime + interval_cycle_a) {
    digitalWrite(8, HIGH);                //La LED et ON temps que l'intervalle du cycle a n'est pas depassé    
  }
  
  if  (TempsActuel >= previousTime + interval_cycle_a);
  digitalWrite(8, LOW);                   //Le temps de l'intervalle du cycle a est depassé la LED ce met en OFF


}

Bonjour,

Je n'ai pas regardé ton programme en détail, mais ici il y a un ; en trop
if (TempsActuel >= previousTime + interval_cycle_a);

Effectivement, merci !