Boucle dans une boucle

Bonsoir a tous

j'ai une petite question qui est la suivante

j'ai réaliser un montage rapide avec une LED RGB qui après le déclenchement passe par plusieurs couleurs différentes.

l'avant dernière partie du programme est de la faire clignoter en rouge pendant X temps puis de passer au rouge fixe

 for(compteur = 2;compteur <= 3000;compteur++) { //boucle clignotante a faire pendant 30 minutes
    analogWrite(ROUGE,255); 
  analogWrite(VERT,0);
  analogWrite(BLEU,0);
  digitalWrite (Buzzer, HIGH);
  delay (2000);
  analogWrite(ROUGE,0);
  analogWrite(VERT,0);
  analogWrite(BLEU,0);
  digitalWrite (Buzzer, LOW);
  delay (2000);
}
  analogWrite(ROUGE,255); //rouge fixe 
  analogWrite(VERT,0);
  analogWrite(BLEU,0);
  digitalWrite (Buzzer, HIGH);
  digitalRead (Reset == HIGH);
 }
  }

je l'ai écrit comme ça et la LED clignote bien mais ne passe jamais au rouge fixe, j'ai une erreur mais je ne sait pas vraiment ou

une idée?

Par avance merci a tous et bonne fin de soirée

Le code est incomplet, on ne peut pas juger.
A priori ton code doit bien passer dans le rouge fixe après avoir parcouru la boucle. Mais il faut être patient si on considère la durée de la boucle. Au passage, la durée est de 3h20 pas de 30 minutes.
Maintenant, il faudrait savoir ce qu'il y a après la portion de code que tu nous donnes car on ne sait pas ce que tu fais après avoir allumé le rouge.

Quand on a des programmes réels aussi longs, pour faire les essais, i faut diminuer les temps, par exemple faire la première boucle sur 1 mn en diminuant le nombre de boucles et en diminuant le temps de clignotement.

est censée faire quoi?
Tel que je le vois Reset == HIGH retourne true ou false, on lit donc par exemple la broche true et on ne fait rien du résultat...

Bonsoir

merci pour vos réponse effectivement j'avais mis 3000 en pensant que ça ferait 3 secondes

digitalRead (Reset == HIGH); c'est censé faire attendre le programme d'un appui sur le bouton reset mais je ne me rappelle jamais comment faire. Pour le moment le programme repasse au début.

pour le reste des tempos je les avait mise au minimum

grosso modo le programme est le suivant

-la led bleu en attente de l'appuie sur le BP declenchement

  • apres declenchement on est vert pendant 1H (ca fait combien en durée a mettre?)
  • on passe et reste a l'orange pendant 1h également
  • puis on clignote (avec une tempo de 1000 et 500) pendant 30minutes
    -rouge fixe jusqu'a appuie sur reset
    -retour au bleu

je joint mon code entier

byte compteur;

int ROUGE = 9; int VERT = 10; int BLEU = 11;
int Reset = 3;
int Declenchement = 4;
int Buzzer = 5;

void setup() {
pinMode(ROUGE, OUTPUT); 
pinMode(VERT, OUTPUT); 
pinMode(BLEU, OUTPUT);
pinMode (Reset, INPUT_PULLUP);
pinMode (Declenchement, INPUT_PULLUP); 
pinMode (Buzzer, OUTPUT);
}
void loop() {  
  analogWrite(ROUGE,0);          //Couleur bleu
  analogWrite(VERT,0);
  analogWrite(BLEU,255);
  if (digitalRead(Declenchement) == LOW) {
  analogWrite(ROUGE,0);          //rouge 
  analogWrite(VERT,255);
  analogWrite(BLEU,0);
  digitalWrite (Buzzer, HIGH);   // Declenchement buzzer pendant 2 sec
  delay (2000);                  // temporisation de 2 sec
  digitalWrite (Buzzer, LOW);    // extenction du buzzer 
  delay(2000);                // attente 1H 
  analogWrite(ROUGE,234);        // Couleur orange 
  analogWrite(VERT,94);
  analogWrite(BLEU,0);
  digitalWrite (Buzzer, HIGH);
  delay (2000);
  digitalWrite (Buzzer, LOW);
  delay (2000);
  digitalWrite (Buzzer, HIGH);
  delay (2000);
  digitalWrite (Buzzer, LOW);
  delay(2000);
  for(compteur = 2;compteur <= 10;compteur++) { //boucle clignotante a faire pendant 30 minutes
    analogWrite(ROUGE,255); 
  analogWrite(VERT,0);
  analogWrite(BLEU,0);
  digitalWrite (Buzzer, HIGH);
  delay (1000);
  analogWrite(ROUGE,0);
  analogWrite(VERT,0);
  analogWrite(BLEU,0);
  digitalWrite (Buzzer, LOW);
  delay (1000);
}
  analogWrite(ROUGE,255); //rouge fixe 
  analogWrite(VERT,0);
  analogWrite(BLEU,0);
  digitalWrite (Buzzer, HIGH);
  Reset = digitalRead(Reset);
  }
  while(Reset == LOW); {
 }
  }  

Bonjour,
Il y a toujours un problème ici:
Reset = digitalRead(Reset);
Si tu utilises la même variable pour le numéro de pin et le résultat de la lecture, ça va pas le faire car tu vas écraser le numéro de pin.

Pour éviter ce type d'erreur, il faut déclarer les numéro de pin const
const int Reset = 3;

Si c'est pour bloquer l'exécution, il suffit de faire un

while(true);

non, ce n'est pas sur le rester du micro, c'est un nom ambigu pour le bouton qui est sur la pin 3. il faut mettre:
while(digitalRead(Reset) == HIGH);
pour attendre que l'on appuie sur le bouton,
while(digitalRead(Reset) == LOW);
pour attendre que l'on relâche le bouton.

Conseil aussi: avant de poster un code, il vaut mieux faire un Cnt-T dans l'IDE. Cela rend le code lisible et augmente les chances de réponses.

Bonjour

je ne connaissais pas le ctrl-T mais oui ça le rend lisible.

bon j'ai tout mis correctement et ça fonctionne comme il faut maintenant il faut que j'ajuste les timers et compteur pour faire 1h en delay et 30 minutes en boucle de temps

merci pour votre aide en tout cas

le code corrigé

byte compteur;

int ROUGE = 9; int VERT = 10; int BLEU = 11;
int Reset = 3;
int Declenchement = 4;
int Buzzer = 5;

void setup() {
  pinMode(ROUGE, OUTPUT);
  pinMode(VERT, OUTPUT);
  pinMode(BLEU, OUTPUT);
  pinMode (Reset, INPUT_PULLUP);
  pinMode (Declenchement, INPUT_PULLUP);
  pinMode (Buzzer, OUTPUT);
}
void loop() {
  analogWrite(ROUGE, 0);         //Couleur bleu
  analogWrite(VERT, 0);
  analogWrite(BLEU, 255);
  if (digitalRead(Declenchement) == LOW) {
    analogWrite(ROUGE, 0);         //rouge
    analogWrite(VERT, 255);
    analogWrite(BLEU, 0);
    digitalWrite (Buzzer, HIGH);   // Declenchement buzzer pendant 2 sec
    delay (2000);                  // temporisation de 2 sec
    digitalWrite (Buzzer, LOW);    // extenction du buzzer
    delay(2000);                // attente 1H
    analogWrite(ROUGE, 234);       // Couleur orange
    analogWrite(VERT, 94);
    analogWrite(BLEU, 0);
    digitalWrite (Buzzer, HIGH);
    delay (2000);
    digitalWrite (Buzzer, LOW);
    delay (2000);
    digitalWrite (Buzzer, HIGH);
    delay (2000);
    digitalWrite (Buzzer, LOW);
    delay(2000);
    for (compteur = 2; compteur <= 5; compteur++) { //boucle clignotante a faire pendant 30 minutes
      analogWrite(ROUGE, 255);
      analogWrite(VERT, 0);
      analogWrite(BLEU, 0);
      digitalWrite (Buzzer, HIGH);
      delay (1000);
      analogWrite(ROUGE, 0);
      analogWrite(VERT, 0);
      analogWrite(BLEU, 0);
      digitalWrite (Buzzer, LOW);
      delay (250);
    }
    analogWrite(ROUGE, 255); //rouge fixe
    analogWrite(VERT, 0);
    analogWrite(BLEU, 0);
    digitalWrite (Buzzer, HIGH);
    delay (4000);
    while (digitalRead(Reset) == HIGH);
  }
}

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.