Aide programme arduino (creer gamepad de 12 boutons)

gamepad 12 boutons

a marqué ce sujet comme résolu.

Bonjour, Je cherche une personne qui pourrait me créer un programme sur arduino IDE pour mon boitier de 12 boutons ma carte arduino à cassée au niveaux de la prise micro usb et j’ai racheté une carte pour tous refaire mais il reconnait en clavier et rien ne fonctionne (aucun bouton), j’ai trouvé un programme mais 3 boutons ne fonctionne pas sur les 12. Voici le code que j’ai réussi à trouver (j’ai rajouter des espaces entre les lignes), pouvez-vous m’aider s’il vous plait ? Merci à vous.

#include <Joystick.h>

Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,

  12, 0,                  // Button Count, Hat Switch Count

  false, false, false,     // X and Y, but no Z Axis

  false, false, false,   // No Rx, Ry, or Rz

  false, false,          // No rudder or throttle

  false, false, false);  // No accelerator, brake, or steering

void setup() {
  // Initialize Button Pins
  pinMode(2, INPUT_PULLUP);

  pinMode(3, INPUT_PULLUP);

  pinMode(4, INPUT_PULLUP);

  pinMode(5, INPUT_PULLUP);

  pinMode(6, INPUT_PULLUP);

  pinMode(7, INPUT_PULLUP);

  pinMode(8, INPUT_PULLUP);

  pinMode(9, INPUT_PULLUP);

  pinMode(10, INPUT_PULLUP);

  pinMode(14, INPUT_PULLUP);

  pinMode(15, INPUT_PULLUP);

  pinMode(16, INPUT_PULLUP);

// Initialize Joystick Library

  Joystick.begin();
}

// Constant that maps the phyical pin to the joystick button.

const int pinToButtonMap = 2;

// Last state of the button

int lastButtonState[A2] = {0,0,0,0,0,0,0,0,0,0,0,0,};

void loop() {

  // Read pin values
  for (int index = 0; index < 16; index++)
    {

    int currentButtonState = !digitalRead(index + pinToButtonMap);
    if (currentButtonState != lastButtonState[index])
    {

      Joystick.setButton(index, currentButtonState);
      lastButtonState[index] = currentButtonState;
    }
  }

  delay(50);
}
+0 -0

Salut,

Je t’invite à mettre en forme ton message avec les syntaxes markdown en vigueur sur ce forum, notamment pour ajouter les balises de code.
EDIT : message original édité

De plus

Je cherche une personne qui pourrait me créer un programme

Jerome10

Personne ne le fera à ta place, mais on peut t’aider à le faire.
Peux tu fournir plus de détails sur ce que tu veux faire ? Notamment un schéma de cablage du système et quels boutons sont en panne. Si tu as juste pris un bout de code sur internet, y’a des chances que vous ne les ayez pas branché au même endroit. Tu n’indique pas desquels il s’agit.

+1 -0

Bonjour, merci à toi de ta réponse, désolé oui le mise en forme est incorrect. les boutons branchées sur 14, 15 et 16 qui ne fonctionne pas. Je peux prendre une photo mais je sais pas si ça sera visible. je vais faire un schéma, encore merci.

Voir les commentaires pour, je pense, l’origine du soucis des boutons.

// Last state of the button
int lastButtonState[A2] = {0,0,0,0,0,0,0,0,0,0,0,0,};
// Qu'est-ce que A2 ?
// Note : ce tableau a été initialisé avec 12 valeurs

void loop() {
  // Read pin values
  for (int index = 0; index < 16; index++) // compte de 0 à 15
  {
    // lit donc les valeurs des entrées 2 à 17
    // or les entrées 11, 12, 13 et 17 n'ont pas été configurés
    int currentButtonState = !digitalRead(index + pinToButtonMap);
    if (currentButtonState != lastButtonState[index]) // Accès aux cases 13 à 15 du tableau qui n'existent pas, pointeurs invalides ou non initialisé (selon la valeur de A2)
    {
      Joystick.setButton(index, currentButtonState); // On ne connais pas la classe Joystick_, mais gère-t-elle les valeurs 13 à 15 malgrès lui avoir déclaré 12 boutons ?
      lastButtonState[index] = currentButtonState; // Accès aux cases 13 à 15 du tableau qui n'existent pas, pointeurs invalides ou non initialisé (selon la valeur de A2)
    }
  }

  delay(50);
}

Je te conseillerais plutôt de travailler avec un conteneur associatif tel qu’une std::map afin d’associer l’identifiant d’une entrée à l’état du bouton, plutôt que de faire coïncider des index de tableaux.

Si je laisse de côté le Joystick et que j’écris un code équivalent de l’acquisition des boutons ça devrais donner quelque chose qui ressemble à …

#include <map>

std::map<int, bool> buttons = {
  {2, false},
  {3, false},
  {4, false},
  {5, false},
  {6, false},
  {7, false},
  {8, false},
  {9, false},
  {10, false},
  {14, false},
  {15, false},
  {16, false}
};

void setup(){
  for(const auto & button : buttons){
    pinMode(button.first, INPUT_PULLUP);
  }
}

void loop() {
  for(auto & button : buttons){
    bool currentButtonState = !digitalRead(button.first);
    if (currentButtonState != button.second) {
      // [...]
      button.second = currentButtonState;
    }
  }
}
+0 -0

Bonjour, merci de votre réponse et encore désolé, je viens de tester le programme mais cela me marque une erreur lors du test de vérification :

S:\Documents\Arduino\sketch_jun1a\sketch_jun1a.ino:2:10: fatal error: map: No such file or directory
#include <map>
          ^~~~~
compilation terminated.
exit status 1

Compilation error: map: No such file or directory

J’utilise Arduino IDE pour upload sur ma carte (si ça peut aider)

+0 -0

ah oui, en effet, arduino n’implemente pas le standard c++, j’avais espéré qu’il aie les conteneur mais même pas. Il ne comprend sûrement pas le auto et le for-range non plus.

Soit tu utilises une lib qui implémente la STL pour pouvoir utiliser la std::map, soit tu implementes ta propre map, soit tu associes C-style à l’aide d’une structure Button et tu manipules un array de Button …

en bref, si tu as compris l’origine de ton soucis et le concept de conteneur associatif, tu devrais pouvoir corriger ça avec la conception que tu préfères.
As tu compris le soucis ?

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte