questions réponses - poussoir - led

Bonjour,

je débute en programmation et sur arduino,

je cherche à faire un projet qui:

6 led clignotants les une après les autres quand rien ne se passe,

j’ai ensuite 2 poussoirs, un avec une question JUSTE et un avec une question FAUX,

lorsque je presse sur la question JUSTE, une led verte s’allume ainsi qu’une des 6 premières (Bonne réponse) cela se maintient un instant. retour au clignotement,

lorsque je presse sur la question FAUX une led rouge s’allume cela se maintient un un instant et retour au clignotement.

mon code fonctionne en partie par contre de temps a autres je dois presser le poussoir un certain temps pour que ça fonctionne…

Un peux d’aide s’il vous plait :smiley:

1push-cligmnotements_28.4.20.ino (1.89 KB)

Bonsoir,

Les chances de réponses seront plus que faibles si vous n'utilisez pas les balises prévues pour afficher un code. C'est trop contraignant d'avoir à télécharger le fichier, changer l'extension pour l'ouvrir avec un traitement de texte sur la tablette ou le portable, et jongler avec les fenêtres pour faire des copier / coller...

Lisez les posts épinglés pour apprendre comment faire et modifier votre premier post.

Bonjour,
Le principe ici est de mettre le code dans l'éditeur.

int switchState = 0;

void setup() {
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(2, INPUT);
  pinMode(3, INPUT);
}

void loop() {
  switchState = digitalRead(2);
  if (switchState == LOW) { //bouton juste non pressé
    digitalWrite(13, HIGH);
    delay(100);
    digitalWrite(13, LOW);
    delay(100);
    digitalWrite(12, HIGH);
    delay(100);
    digitalWrite(12, LOW);
    delay(100);
    digitalWrite(11, HIGH);
    delay(100);
    digitalWrite(11, LOW);
    delay(100);
    digitalWrite(10, HIGH);
    delay(100);
    digitalWrite(10, LOW);
    delay(100);
    digitalWrite(9, HIGH);
    delay(100);
    digitalWrite(9, LOW);
    delay(100);
    digitalWrite(8, HIGH);
    delay(100);
    digitalWrite(8, LOW);
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);
  }
  else { //bouton juste pressé
    digitalWrite(13, HIGH);
    digitalWrite(12, LOW);
    digitalWrite(11, LOW);
    digitalWrite(10, LOW);
    digitalWrite(9, LOW);
    digitalWrite(8, LOW);
    digitalWrite(7, HIGH);
    digitalWrite(6, LOW);

    delay(2000);
  }
  {
    switchState = digitalRead(3);
    if (switchState == LOW) { //bouton faux non pressé
      digitalWrite(13, HIGH);
      delay(100);
      digitalWrite(13, LOW);
      delay(100);
      digitalWrite(12, HIGH);
      delay(100);
      digitalWrite(12, LOW);
      delay(100);
      digitalWrite(11, HIGH);
      delay(100);
      digitalWrite(11, LOW);
      delay(100);
      digitalWrite(10, HIGH);
      delay(100);
      digitalWrite(10, LOW);
      delay(100);
      digitalWrite(9, HIGH);
      delay(100);
      digitalWrite(9, LOW);
      delay(100);
      digitalWrite(8, HIGH);
      delay(100);
      digitalWrite(8, LOW);
      digitalWrite(7, LOW);
      digitalWrite(6, LOW);
    }
    else { //bouton faux pressé
      digitalWrite(13, LOW);
      digitalWrite(12, LOW);
      digitalWrite(11, LOW);
      digitalWrite(10, LOW);
      digitalWrite(9, LOW);
      digitalWrite(8, LOW);
      digitalWrite(7, LOW);
      digitalWrite(6, HIGH);

      delay(2000);
    }
  }
}

Déjà, faudrait une variable par bouton pour les distinguer.
Il y a aussi une double accolade qui me semble inutile.

Voir aussi les exemples button et debounce dans l'IDE

ce tuto aussi Un simple bouton • Le blog d'Eskimon

L'utilisation de la fonction delay() ne permet d'obtenir une gestion fluide de la détection des boutons poussoirs.

C'est une fonction bloquante. Donc une pause de 2 secondes ou 11 pauses de 100ms successives vont bloquer le programme qui ne pourra malheureusement pas te permettre de détecter un appui sur un bouton.

Il faudra attendre la sortie de ces pauses pour voir ce qu'il se passe sur les entrées. Cela explique pourquoi vous devez attendre que les leds clignotantes achèvent leurs cycles pour enfin détecter la position du poussoir.

Il faudra utiliser la fonction millis() à la place de delay() pour supprimer les blocages et rendre le programme beaucoup plus réactif.

L'utilisation de millis() est expliquée dans les tutos d'Eskimon.