Problème bouton avec chenillard

Bonjour

Je débute sur arduino et pour tester mes connaissances j'ai voulu me créer un petit programme avec deux boutons et une rangée de six led (chenillard).

Le but de mon projet est le suivant :

-Le bouton 1 : S'il est appuyé, cela doit allumer la led 1, puis la led 2, puis éteindre la led 1 et allumer la led 3... jusqu'à finir par la sixième led.

-Le bouton 2 : S'il est appuyé, cela doit allumer la led 1 et la 6, puis les led 2 et 5, puis éteindre les led 1 et 6 et allumer les led 3 et 4.

Si aucun des boutons n'est appuyé, les led doivent toutes rester éteintes.

Problème :

Aucun des boutons n'est appuyé mais les led s'allument quand même en faisant le but du bouton 1, même si elles peuvent s'arrêter de temps en temps et n'importe quand. Si j'appuie sur n'importe lequel des boutons, cela ne change pas le comportement des led.

Voici mon code :

const int L1 = 13;
const int L2 = 12;
const int L3 = 11;
const int L4 = 10;
const int L5 = 9;
const int L6 = 8;
int button1 = 2;
int button2 = 3;
int buttonState1;
int buttonState2;


void setup(){
  pinMode (L1, OUTPUT);
  pinMode (L2, OUTPUT);
  pinMode (L3, OUTPUT);
  pinMode (L4, OUTPUT);
  pinMode (L5, OUTPUT);
  pinMode (L6, OUTPUT);
  pinMode (button1, INPUT);
  pinMode (button2, INPUT);

  digitalWrite (L1, LOW);
  digitalWrite (L2, LOW);
  digitalWrite (L3, LOW);
  digitalWrite (L4, LOW);
  digitalWrite (L5, LOW);
  digitalWrite (L6, LOW);

}

void loop(){
  buttonState1 = digitalRead(button1);
  buttonState2 = digitalRead(button2);
  if (buttonState1 == HIGH)
  {
    digitalWrite (L1, HIGH);
    delay(100);
    digitalWrite (L2, HIGH);
    delay(100);
    digitalWrite (L3, HIGH);
    digitalWrite (L1, LOW);
    delay(100);
    digitalWrite (L4, HIGH);
    digitalWrite (L2, LOW);
    delay(100);
    digitalWrite (L5, HIGH);
    digitalWrite (L3, LOW);
    delay(100);
    digitalWrite (L6, HIGH);
    digitalWrite (L4, LOW);
    delay(100);
    digitalWrite (L5, LOW);
    delay(100);
    digitalWrite (L6, LOW);
  }
  else if (buttonState2 == HIGH)
  {
    digitalWrite (L1, HIGH);
    digitalWrite (L6, HIGH);
    delay(200);
    digitalWrite (L2, HIGH);
    digitalWrite (L5, HIGH);
    delay(200);
    digitalWrite (L1, LOW);
    digitalWrite (L6, LOW);
    digitalWrite (L3, HIGH);
    digitalWrite (L4, HIGH);
    delay(200);
    digitalWrite (L2, LOW);
    digitalWrite (L5, LOW);
    delay(200);
    digitalWrite (L3, LOW);
    digitalWrite (L4, LOW);
    
  }
  else
  {
    digitalWrite (L1, LOW);
    digitalWrite (L2, LOW);
    digitalWrite (L3, LOW);
    digitalWrite (L4, LOW);
    digitalWrite (L5, LOW);
    digitalWrite (L6, LOW);
  }
}

Même si cela n'est pas très optimisé, ce n'est pas le but, je veux juste que ça marche.

Merci pour votre aide !

Bonsoir,
le code a l'air bien, je pense que les bouton ne sont pas bien cablés.

POur simuler l'appui du bouton, il faudrait juste mettre les valeurs suivantes

buttonState1 = HIGH;
  buttonState2 = HIGH;
if (buttonState1 == HIGH)
  {

A+
Yan_duino

Merci beaucoup je vais essayer !

Effectivement c'est le câblage des boutons qui n'est pas bon, j'utilise une breadbord pour mes circuits, aurez-vous des propositions de circuit à me faire ?

Merci d'avance

il faut faire la confi suivante:

pinMode (button1, INPUT_PULLUP);  // pour connecter la reistance interne entre le + 5V et pin2
pinMode (button2, INPUT_PULLUP);

connecter les boutons entre pin 2 et 3 et la masse.

puis

buttonState1 = !digitalRead(button1);  // attention au ! qui est = not  pour inversion logique
  buttonState2 = !digitalRead(button2);
  if (buttonState1 == HIGH)
  {......

sinon voici le lien de référence, très utile

Yan_duino

alors problème résolu?

Yan_duino

Non, le problème n'est pas résolu, cette fois-ci rien ne se passe quoique je fasse.

Voici mon code :

const int L1 = 13;
const int L2 = 12;
const int L3 = 11;
const int L4 = 10;
const int L5 = 9;
const int L6 = 8;
int button1 = 2;
int button2 = 3;
int buttonState1;
int buttonState2;


void setup(){
  pinMode (L1, OUTPUT);
  pinMode (L2, OUTPUT);
  pinMode (L3, OUTPUT);
  pinMode (L4, OUTPUT);
  pinMode (L5, OUTPUT);
  pinMode (L6, OUTPUT);
  pinMode (button1, INPUT);
  pinMode (button2, INPUT);

  digitalWrite (L1, LOW);
  digitalWrite (L2, LOW);
  digitalWrite (L3, LOW);
  digitalWrite (L4, LOW);
  digitalWrite (L5, LOW);
  digitalWrite (L6, LOW);

}

void loop(){
  buttonState1 = LOW;
  buttonState2 = HIGH;
  if (buttonState1 == HIGH)
  {
    digitalWrite (L1, HIGH);
    delay(100);
    digitalWrite (L2, HIGH);
    delay(100);
    digitalWrite (L3, HIGH);
    digitalWrite (L1, LOW);
    delay(100);
    digitalWrite (L4, HIGH);
    digitalWrite (L2, LOW);
    delay(100);
    digitalWrite (L5, HIGH);
    digitalWrite (L3, LOW);
    delay(100);
    digitalWrite (L6, HIGH);
    digitalWrite (L4, LOW);
    delay(100);
    digitalWrite (L5, LOW);
    delay(100);
    digitalWrite (L6, LOW);
  }
  else if (buttonState2 == HIGH)
  {
    digitalWrite (L1, HIGH);
    digitalWrite (L6, HIGH);
    delay(200);
    digitalWrite (L2, HIGH);
    digitalWrite (L5, HIGH);
    delay(200);
    digitalWrite (L1, LOW);
    digitalWrite (L6, LOW);
    digitalWrite (L3, HIGH);
    digitalWrite (L4, HIGH);
    delay(200);
    digitalWrite (L2, LOW);
    digitalWrite (L5, LOW);
    delay(200);
    digitalWrite (L3, LOW);
    digitalWrite (L4, LOW);
    
  }
  else
  {
    digitalWrite (L1, LOW);
    digitalWrite (L2, LOW);
    digitalWrite (L3, LOW);
    digitalWrite (L4, LOW);
    digitalWrite (L5, LOW);
    digitalWrite (L6, LOW);
  }
}

bonjour,
il faudrait peut être lire l'état d'un bouton pour dire si
buttonState1 == HIGH
buttonState2 == HIGH

et tout dépend du cablage aussi

buttonState1 = digitalRead(button1);
if (buttonState1 == HIGH)

ou directement

if (digitalRead(button1) == HIGH){
....
}