Programmation boutons Joystick

Bonjour,

Voila je me lance dans la programmation Arduino et je me suis dis pourquoi ne pas commencer par ce projet:

Je suis peux être un peu trop optimiste car je n'arrive pas a configurer plusieurs boutons poussoirs voila mon code pour le moment:

void setup() {
    pinMode(2, INPUT_PULLUP);  // enable internal pull-up
    Serial.begin(9600);
    pinMode(6, INPUT_PULLUP);  // enable internal pull-up
    Serial.begin(9600);
    pinMode(8, INPUT_PULLUP);  // enable internal pull-up
    Serial.begin(9600);
    
}

int buttonStatus = 0;
void loop() {
  int pinValue = digitalRead (2);
  delay(10); // quick and dirty debounce filterint 
    if (buttonStatus != pinValue) {
    buttonStatus = pinValue;
    Serial.println(buttonStatus);
  }
  digitalRead (6);
  delay(10); // quick and dirty debounce filterint 
    if (buttonStatus != pinValue) {
    buttonStatus = pinValue;
    Serial.println(buttonStatus);
  }
  digitalRead (8);
  delay(10); // quick and dirty debounce filterint 
  if (buttonStatus != pinValue) {
    buttonStatus = pinValue;
    Serial.println(buttonStatus);
  }
}

le problème est que l'entrée 2 fonctionne parfaitement, pas le autres et je ne comprends pas pourquoi

Merci

Bonjour,

Mets ton code entre balises de code. Voir Les bonnes pratiques du Forum Francophone, chapitre balises de code.
C'est bien de mémoriser l'état du bouton dans buttonStatus, mais comme tu as trois boutons, il te faut trois variables buttonStatus.
Je te conseille fortement d'utiliser des noms pour tes entrées, ça rend le code plus lisible et évite les erreurs.

Sujet mal exposé dans le bar, déplacé dans la section principale du forum français.

Bonjour,

digitalRead (6);
delay(10); // quick and dirty debounce filterint
if (buttonStatus != pinValue) {
buttonStatus = pinValue;
Serial.println(buttonStatus);
}

Ce code ne doit pas faire ce que tu attends.
Tu lis l'état du bouton 6, mais ne l'affecte à aucune variable.
Puis tu test si boutonStatus est différent de pinValue.
Les deux étant forcément égaux à cause du code précédent.

Bonjour,

Merci pour ton aide j'ai changé mon code mais toujours rien :frowning: voila le nouveau

int bp1 = 2;
int bp2 = 4;
int bp3 = 6;
int bp4 = 8;
int bp5 = 10;
int bp6 = 12;
int bp7 = 14;
int bp8 = 16;
int bp9 = 18;
int bp10 = 20;

void setup()
{
  // Bouton poussoir 1
  pinMode(bp1, INPUT_PULLUP);
  Serial.begin(9600);
  // Bouton poussoir 2
  pinMode(bp2, INPUT_PULLUP);
  Serial.begin(9600);
  // Bouton poussoir 3
  pinMode(bp3, INPUT_PULLUP);
  Serial.begin(9600);
    // Bouton poussoir 4
  pinMode(bp4, INPUT_PULLUP);
  Serial.begin(9600);
    // Bouton poussoir 5
  pinMode(bp5, INPUT_PULLUP);
  Serial.begin(9600);
    // Bouton poussoir 6
  pinMode(bp6, INPUT_PULLUP);
  Serial.begin(9600);
    // Bouton poussoir 7
  pinMode(bp7, INPUT_PULLUP);
  Serial.begin(9600);
    // Bouton poussoir 8
  pinMode(bp8, INPUT_PULLUP);
  Serial.begin(9600);
    // Bouton poussoir 9
  pinMode(bp9, INPUT_PULLUP);
  Serial.begin(9600);
  // Bouton poussoir 10
  pinMode(bp10, INPUT_PULLUP);
  Serial.begin(9600);  
}

void loop()
{
  // Récuperer valeur de bp1
  int b1 = digitalRead(bp1);


  Serial.print("Bouton 1 : "); Serial.println(b1);

  // Si Appuie BP1
  if (b1 == LOW) {
    Serial.println("Bouton 1 - ON");
    delay(10);
  }

  // Récuperer valeur de bp2
  int b2 = digitalRead(bp2);


  Serial.print("Bouton 2 : "); Serial.println(b2);

  // Si Appuie BP2
  if (b2 == LOW) {
    Serial.println("Bouton 2 - ON");
    delay(10);
  }

  // Récuperer valeur de bp3
  int b3 = digitalRead(bp3);


  Serial.print("Bouton 3 : "); Serial.println(b3);

  // Si Appuie BP3
  if (b3 == LOW) {
    Serial.println("Bouton 3 - ON");
    delay(10);
  }

    // Récuperer valeur de bp4
  int b4 = digitalRead(bp4);


  Serial.print("Bouton 4 : "); Serial.println(b4);

  // Si Appuie BP4
  if (b4 == LOW) {
    Serial.println("Bouton 4 - ON");
    delay(10);
  }
  
    // Récuperer valeur de bp5
  int b5 = digitalRead(bp5);


  Serial.print("Bouton 5 : "); Serial.println(b5);

  // Si Appuie BP5
  if (b5 == LOW) {
    Serial.println("Bouton 5 - ON");
    delay(10);
  }
  
    // Récuperer valeur de bp6
  int b6 = digitalRead(bp6);


  Serial.print("Bouton 6 : "); Serial.println(b6);

  // Si Appuie BP6
  if (b6 == LOW) {
    Serial.println("Bouton 6 - ON");
    delay(10);
  }
  
      // Récuperer valeur de bp7
  int b7 = digitalRead(bp7);


  Serial.print("Bouton 7 : "); Serial.println(b7);

  // Si Appuie BP7
  if (b7 == LOW) {
    Serial.println("Bouton 7 - ON");
    delay(10);
  }
  
     // Récuperer valeur de bp8
  int b8 = digitalRead(bp8);


  Serial.print("Bouton 8 : "); Serial.println(b8);

  // Si Appuie BP8
  if (b8 == LOW) {
    Serial.println("Bouton 8 - ON");
    delay(10);
  }
  
      // Récuperer valeur de bp9
  int b9 = digitalRead(bp9);


  Serial.print("Bouton 9 : "); Serial.println(b9);

  // Si Appuie BP9
  if (b9 == LOW) {
    Serial.println("Bouton 9 - ON");
    delay(10);
  }
  
      // Récuperer valeur de bp10
  int b10 = digitalRead(bp10);


  Serial.print("Bouton 10 : "); Serial.println(b10);

  // Si Appuie BP10
  if (b10 == LOW) {
    Serial.println("Bouton 10 - ON");
    delay(10);
  }
}

Qu'est ce qu'il se passe exactement?

Remarques:

  • un seul Serial.begin(9600); suffit, pas la peine d'en mettre plusieurs.
  • tu aurais intérêt à utiliser un tableau et une boucle plutôt que d'écrire 10 fois la même chose.

Bonjour rikem

Si tu mets en remarque tout les
//Serial.print("Bouton x : "); Serial.println(bx);
qui masquent le fonctionnement de ton programme, tu verrais qu'il fonctionne très bien.

Je plussoie @kamill

Avec des tableaux et des boucles, tu simplifies et l'écriture et la maintenance de ton programme.

Cordialement
jpbbricole

désolé je débute totalement comment programme ton un boucle ?

Merci beaucoup effectivement c'est beaucoup mieux.

Bonjour rikem

Regardes ce lien, c'est un bon début.
Jwe me suis amusé à l'exercice, ton programme passe de 167 lignes à 34 lignes.

Cordialement
jpbbricole

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.