Partage
  • Partager sur Facebook
  • Partager sur Twitter

Faille programme

27 décembre 2018 à 18:07:27

Bonjour, je débute avec Arduino et je sèche sur un petit programme.

L'objectif est de faire clignoter trois leds l'une après l'autre en appuyant sur un bouton et de pouvoir arrêter la séquence en appuyant sur un autre bouton. Le probléme c'est que j'arrive bien a lancer le clignotement des trois leds, mais la boucle ne fonctionne pas (ça s'arrête tout seule)

Mon câblage est fonctionnel, j'ai vérifié et je n'ai pas d'erreur de compilation.

Merci de m'aiguiller dans la bonne direction, j'ai surement fait un mauvais choix de fonction.

// Chenillar  : fait clignoter trois leds une après l'autre

// Définir les sorties
#define RED 7 
#define GREEN 6
#define WHITE 5
int BM = 9; // Bouton Marche
int BA = 8;// Bouton arrêt


void setup() { // iniatilisation programme
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(WHITE, OUTPUT);
  pinMode(BM, INPUT_PULLUP);
  pinMode(BA, INPUT_PULLUP);
}


void chenillard() {// fonction chenillard
  digitalWrite(RED, HIGH);   // Allume la led rouge
  delay(1000);                       // Attend une seconde
  digitalWrite(RED, LOW);    // Eteins la led rouge
  digitalWrite(GREEN, HIGH); // Allume la led verte
  delay(1000);                      // Attend une seconde
  digitalWrite(GREEN, LOW);  // Eteins la led verte
  digitalWrite(WHITE, HIGH); // Allume la led blanche
  delay(1000);                      // Attend une seconde
  digitalWrite(WHITE, LOW);  // Eteins la led blanche 

  }

void extinction () { // Extincsion chenillard
  digitalWrite(RED, LOW); // Eteins led rouge
  digitalWrite(GREEN, LOW); // Eteins led verte
  digitalWrite(WHITE, LOW); // Eteins led blanche
}

void loop() {
  if (digitalRead(BM) == LOW){ // Lance chenillard avec Bouton A
    chenillard();
  }
  if (digitalRead(BA) == LOW){ // Arrête chenillard avec Bouton B
    extinction();
  }
  }
  

Merci de vos conseils

  • Partager sur Facebook
  • Partager sur Twitter
27 décembre 2018 à 21:30:40

Bonsoir,

en ligne 40, le programme demande à ce que le bouton BM soit maintenu appuyé sinon le chenillard n'est pas relancé

  • Partager sur Facebook
  • Partager sur Twitter
27 décembre 2018 à 22:20:56

Merci, il faut donc que je trouve comment lancer la boucle avec une impulsion....
  • Partager sur Facebook
  • Partager sur Twitter
27 décembre 2018 à 22:52:07

Quand le BP est appuyé, tu places un bit à 1. Dans la boucle principale, tu testes le bit, si = 1, alors clignotement. Dans cette même boucle tu testes le BP2 qui mettra le bit à 0.

Je ne sais pas si j'ai été clair.

  • Partager sur Facebook
  • Partager sur Twitter
Le 25 juillet 2016, j'ai essayé une Ford Mustang.
28 décembre 2018 à 16:48:01

Oui et non, je vais creuser un peu
  • Partager sur Facebook
  • Partager sur Twitter
28 décembre 2018 à 18:23:51

totche a écrit:

Oui et non, je vais creuser un peu


Tu ne comprends pas quoi?
  • Partager sur Facebook
  • Partager sur Twitter
Le 25 juillet 2016, j'ai essayé une Ford Mustang.
28 décembre 2018 à 18:25:46

Comme le disait Gérard68, il faut ajouter une nouvelle variable par exemple marcheChenillard

Dans la boucle on pourrait mettre

en ligne 41  : marcheChenillard = TRUE
en ligne 44 :  marcheChenillard = FALSE

ensuite on ajoutera un test sur l'état de marcheChenillard pour lancer chenillard() ou extinction()

  • Partager sur Facebook
  • Partager sur Twitter
28 décembre 2018 à 18:52:32

Ok,

clgbzh a écrit:

Comme le disait Gérard68, il faut ajouter une nouvelle variable par exemple marcheChenillard

Dans la boucle on pourrait mettre

en ligne 41  : marcheChenillard = TRUE
en ligne 44 :  marcheChenillard = FALSE

ensuite on ajoutera un test sur l'état de marcheChenillard pour lancer chenillard() ou extinction()

Ok, je comprends le principe, mais avec deux boutons, il faut donc deux variables, n'est-ce pas ?



  • Partager sur Facebook
  • Partager sur Twitter
29 décembre 2018 à 12:58:11

Non surtout pas, il faut une seule et unique variable d'état qui est dépendante de l'appui des 2 boutons.

Par ailleurs, il faut remarquer que loop() est suspendue pendant l'exécution du chenillard (ici 3s), autrement dit il faut appuyer sur le bouton BA pendant au moins 3s pour pouvoir être lu par le programme et donc déclencher l'arrêt.

  • Partager sur Facebook
  • Partager sur Twitter

Faille programme

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown