Programme de contrôle de led pour un projet

Salut tout le monde, je débute avec mon premier arduino un projet, et je rencontre quelques problèmes dans sa réalisation, peut être que certains d'entre vous en ont déjà fait l'experience. Pourtant, ca a l'air facile, enfin quand on y passe un moment.Mais je n'y arrive pas encore, il y a un soucis quelque part.

Je vous explique mon projet, qui prends pour le moment sa forme sur une breadboard. Après, je le réaliserais pour un projet domotique avec un voltage plus elevé.

Donc, grosso modo, ça se présente sous la forme d'un chenillard : c'est à dire, 3 leds qui ont chacun une fonction qui remplace l'autre, pour retourner à l'issue de la boucle à la première fonction.

Ca se présente comme ca la led1 s'allume pendant un temps la led1 s'éteint

Puis la led2 s'allume et 'grésille' pendant un temps (allume et éteint aléatoirement) la led 2 s'éteint

Puis la led 3 s'allume un temps La led3 s'éteint et la boucle reprends.

Voici le code :

int bleu2 = 2; int bleu4 = 4; int bleu6 = 6; int compteur = 0; int randDelai; int randEtat;

//gresillement aléatoire// int attente() { randDelai = random(20, 150); return (randDelai); }

int etat() { randEtat = random(5, 50); return (randEtat); } //

//SETUP// void setup() {

pinMode (2, OUTPUT); pinMode (4, OUTPUT); pinMode (6, OUTPUT);

} ////////////

//LOOP// void loop() { //led1// digitalWrite (2, HIGH); delay(1000); digitalWrite (2, LOW);

//led2//

for (int compteur = 0 ; compteur = 10 ;compte ++) { digitalWrite(4, etat()); // allumer la LED orange avec la valeur retournée par la fonction etat() delay(attente());

}

//led3//

digitalWrite (6, HIGH); delay(1000); digitalWrite (6, LOW);

} //digitalWrite (4, HIGH); //delay(500); //digitalWrite (4, LOW); //delay(500)

Si quelqu'un visualise le problème.. MErci d'avance

Bonjour,

Mets ton code entre balises

Si tu veux faire varier l'intensité de la led il faut utiliser analogWrite et non digitalWrite. De plus il faut utiliser une pin qui gère le pwm, ce qui n'est pas le cas de la pin 4

Bonjour

Pour visualiser le problème il faudrait déjà avoir quelque part une description de ce qui ne marche pas. Parce que là, à part "il y a un soucis quelque part" y a pas grand chose à se mettre sous la dent.

NB : le code que tu as mis comporte deux erreurs ici (avec les bonnes balises) :

for (int compteur = 0 ; compteur = 10  ;compte ++)

Je te laisse trouver lesquelles :smiling_imp:

Merci pour vos réponses.

Alors, voici le code entre balise (je débute aussi sur le forum). J'ai tenu compte de vos remarques et j'ai fait quelques modifications.

Le problème rencontré est se passe a la led2 : Le programme est bloqué sur la LED 2, la fonction temps de fonctionne pas. Elle grésille indéfiniment, mais ne passe pas a la led3

C'est la fonction 'for' que j'utilise qui n'est pas correcte ?

int bleu3 = 1;
int bleu5 = 2;
int bleu6= 6;
int compteur = 0;
int randDelai;
int randEtat;


//gresillement aléatoire//
int attente() {
        randDelai = random(20, 150);
        return (randDelai);
}


int etat() {
        randEtat = random(5, 50);
        return (randEtat);
}
//

//SETUP//
void setup() 
{

pinMode (3, OUTPUT);
pinMode (5, OUTPUT);
pinMode (6, OUTPUT);



}
////////////


//LOOP//
void loop()
{
  //led1//
digitalWrite (3, HIGH);
delay(1000);
digitalWrite (3, LOW);



//led2//

for (int compteur = 0 ; compteur = 5  ; compteur ++)
{
analogWrite(5, etat());   // allumer la LED orange avec la valeur retournée par la fonction etat()
  delay(attente());          


}


//led3//

digitalWrite (6, HIGH);
delay(1000);
digitalWrite (6, LOW);


}

Comme te l’a dit bricoleau, il y a deux erreur dans ta ligne for.
Tu en as corrigé une

Le deuxième argument doit être un test et tu fais une affectation
Je suppose que tu veux faire

for (int compteur = 0 ; compteur < 5  ; compteur ++)

En modifiant la fonction for comme tu l’indiques, ca ne fonctionne pas comme je veux.

Je reprends l’idée du programme

la led1 s’allume pendant un temps
la led1 s’éteint

Puis la led2 s’allume et ‘grésille’ pendant un temps (allume et éteint aléatoirement)
la led 2 s’éteint

Puis la led 3 s’allume un temps
La led3 s’éteint et la boucle reprends.

Avec la modification de ‘for’ comme tu le décris, la led2 reste allumée, grésille beaucoup moins.
Il faudrait une fonction de temps bloquante pour la led2, tout en gardant le grésillement.
C’est ca que je n’arrive pas a faire

Il faut que tu revoies ton algorithme de grésillement etatt() et attente() et aussi que tu augmentes le compteur

Salut,

Merci encore pour vos remarques, après vos suggestions,
et aussi un gros oublie sur la fonction de la LED2 : je n’avais pas ecris d’éteindre la LED2. Enfin si, j’avais essayé, mais je l’avais écris dans les accolades de la fonction de grésillement, du coup… il l’affectait mal !

Je partage donc le code qui fonctionne :

int bleu3 = 1;
int bleu5 = 2;
int bleu6= 6;
int compteur = 0;
int randDelai;
int randEtat;
unsigned long delaiAleatoire;


//gresillement aléatoire//
int attente() {
        randDelai = random(0, 100);
        return (randDelai);
}


int etat() {
        randEtat = random(0, 255);
        return (randEtat);
}
//

//SETUP//
void setup() 
{
 
pinMode (3, OUTPUT);
pinMode (5, OUTPUT);
pinMode (6, OUTPUT);

delaiAleatoire = random(500, 3000);

}
////////////


//LOOP//
void loop()
{
  //led1//
digitalWrite (3, HIGH);
delay(5000);
digitalWrite (3, LOW);



//led2//

for (int compteur = 0 ; compteur < 100  ; compteur ++)
{
analogWrite(5, etat());   // allumer la LED orange avec la valeur retournée par la fonction etat()
  delay(attente());          



}
digitalWrite (5, LOW);

//led3//

digitalWrite (6, HIGH);
delay(2000);
digitalWrite (6, LOW);


}