PROGRAMME URGENT

Donc, il y a des choses qui ne sont pas dans le bon ordre?

C'est un peu ce que je t'explique depuis un moment :grin:

Je ne vois vraiment pas ce qui peut-être dans le désordre.

Pourtant avec les exemples donnés tu devrais trouver.

Un autre explication :

Imagine le while() comme une boite (de nuit pour l'exemple XD) il y a un portier à l'entrée, il ne laisse passer que les hommes accompagné d'une femme.

Un couple rentre dans la boite.... il se passes des choses (comme ton moteur qui devrait tourner, mais là on censure :grin:).

Le mec content d'avoir fait son affaire sort pour fumer une cigarette..... mais comme il n'est plus accompagné, il ne peut plus rentrer.
Alors, il fait un tour de quartier et embarque une autre copine avec lui.... il peut à nouveau rentrer et youpi tralalala....
Si il ne trouve personne, il continue à marcher en rond autour du paté de maison.

Avec ça, tu peux écrire ton programme, ça se passe de la même façon et le portier, il est à l'entrée, pas à la sortie de la boite de nuit :wink:

C'est vrai que c'est plus clair:
Ca devarit être bon maintenant:

const byte PIN_VITESSE = 3; // Broche de contrôle du moteur par PWM
int compteur = 0;

// Fonction d'initialisation hardware
void setup() {
    pinMode(PIN_VITESSE, OUTPUT); // Mise en sortie de la broche connecté au moteur
}
void loop() {
while(compteur < 1)
analogWrite(PIN_VITESSE, 12); // Génération d'un signal PWM contrôlant la vitesse du moteur a 300t/mins
delay(300000); // le moteur reste allumé 5mins
compteur++; 
}

C'est mieux.

Maintenant ta boite de nuit, il faut lui mettre des portes :

  • les accolades.

C'est marrant dès qu'on parle de s'envoyer en l'air, on comprend mieux..... XD

Les portes ont été rajoutés:

const byte PIN_VITESSE = 3; // Broche de contrôle du moteur par PWM
int compteur = 0;

// Fonction d'initialisation hardware
void setup() {
    pinMode(PIN_VITESSE, OUTPUT); // Mise en sortie de la broche connecté au moteur
}
void loop() {
while(compteur < 1) {
analogWrite(PIN_VITESSE, 12); // Génération d'un signal PWM contrôlant la vitesse du moteur a 300t/mins
delay(300000); // le moteur reste allumé 5mins
compteur++; 
}
}

Ton compteur va fonctionner qu'un fois :grin:

Le reste devrait fonctionner.

Ensuite si tu utilises un while, autant utiliser millis() plutôt que delay(), mais c'est un peu plus compliqué à utiliser XD

En utilisant millis(), le programme ne se fige pas comme avec delay(), mais continue et peut traiter d'autres choses..... mais c'est pour plus tard XD

Il manque encore la partie qui arrête le moteur....

Ton compteur va fonctionner qu'un fois

Le reste devrait fonctionner.

Coment ca, il devrait fonctionner le nombre de fois que j'aurais mis dans while?

Pour l'arrêt du moteur:

const byte PIN_VITESSE = 3; // Broche de contrôle du moteur par PWM
int compteur = 0;

// Fonction d'initialisation hardware
void setup() {
    pinMode(PIN_VITESSE, OUTPUT); // Mise en sortie de la broche connecté au moteur
}
void loop() {
while(compteur < 1) {
analogWrite(PIN_VITESSE, 12); // Génération d'un signal PWM contrôlant la vitesse du moteur a 300t/mins
delay(300000); // le moteur reste allumé 5mins
compteur++; 
if (compteur == 1)
{
analogWrite(PIN_VITESSE, 0)
}
}
}

ou sinon:

const byte PIN_VITESSE = 3; // Broche de contrôle du moteur par PWM
int compteur = 0;

// Fonction d'initialisation hardware
void setup() {
    pinMode(PIN_VITESSE, OUTPUT); // Mise en sortie de la broche connecté au moteur
}
void loop() {
while(compteur < 1) {
analogWrite(PIN_VITESSE, 12); // Génération d'un signal PWM contrôlant la vitesse du moteur a 300t/mins
delay(300000); // le moteur reste allumé 5mins
compteur++; 
if (compteur == 1)
{
analogWrite(PIN_VITESSE, 0)
}
else 
{
while(compteur < 1) {
analogWrite(PIN_VITESSE, 12); // Génération d'un signal PWM contrôlant la vitesse du moteur a 300t/mins
delay(300000); // le moteur reste allumé 5mins
compteur++; 
}
}
}

Mais je pencherais plutôt pour le second code, qui est plus général et qui marchera beaucoup mieux.

edwinre:
Mais je pencherais plutôt pour le second code, qui est plus général et qui marchera beaucoup mieux.

Effectivement, tu maitrises bien le sujet.... :grin:

Ton while étant à 1 la boucle ne passera qu'un fois....

Pourquoi mettre un if tout d'un coup ?

oui mai si jamais je veux mettre un while à 3, il vaut mieux mettre la deuxième proposition, non?

Et comme ça ton moteur ne s'arrêtera plus :grin: mais bon... voilà XD

Edit : j'avais pas vu que tu avais rajouté un deuxième while.... tu as mis un sas à l'entrée de ta boite de nuit ? XD

Donc quelle moyen je dois utiliser pour que mon moteur s'arrête?

tu mets simplement ta pin_vitesse à 0 en dehors du while.

Ce qui donnerai ça:

const byte PIN_VITESSE = 3; // Broche de contrôle du moteur par PWM
int compteur = 0;

// Fonction d'initialisation hardware
void setup() {
    pinMode(PIN_VITESSE, OUTPUT); // Mise en sortie de la broche connecté au moteur
}
void loop() {
while(compteur < 1) {
analogWrite(PIN_VITESSE, 12); // Génération d'un signal PWM contrôlant la vitesse du moteur a 300t/mins
delay(300000); // le moteur reste allumé 5mins
compteur++; 
}
analogWrite(PIN_VITESSE, 0)
}

Ton compteur ne fonctionnera que de la valeur du while.....

C'est à dire?

Le while dit : tant que la valeur est inférieur à ce qui est écrit dans ma configuration, ça rentre dans ma boite.... autrement ça passe tout droit.

Disons que tu mette ton while à 3, à chaque boucle ça rentre dans la boite et ça incrémente ton compteur de 1, à la troisième boucle, ton compteur est à 3, correspondant à la valeur du while.... et ça passe tout droit, sans incrémenter ton compteur, donc ton compteur ne fonctionne que 3 fois si il est dans la boucle du while.

Mets le en dehors et il continuera à fonctionner.

En dehors du void loop() alors?