Problème keyboard

bonjour
je suis en train de me faire un volant de F1 pour jouer a des jeux sur ordi et pour cella j'ai émulé un clavier pour avoir les bouton que je voulais mais mon problème est que en mettant "Keyboard.press('d')" par exemple et que je reste appuyé sur le bouton ça va considéré que j'appuie plusieurs fois sur le bouton et non pas que je reste appuyé se qui est pas pratique quand je veux faire une action comme accélérer

alors je voudrais savoir si il y aurait une solution

merci d'avance

Il suffit d’envoyer le message qu’une seule fois et attendre le relâchement avant de recommencer

pour simplifier votre gestion des boutons, éventuellement utilisez la librairie de @bricoleau ou alors la librairie OneButton de Matthias Hertel.

ok merci du conseil je vais testé tout de suite et j'ais aussi un autre problème mais peux être qu'il va être réglé avec sa mais je ne peux pas faire 2 action simultanément

Il ne faut pas faire un attente bloquante (les bibliothèques vous aideront car elles se chargent de mémoriser l’état du bouton)

étant un débutant dans le codage je ne sais plus se que je doit faire avec cette bibliothèque est ce que je doit changé tout mon code juste une partie ou même enlevé keyboard.h

je vous envoie donc mon programme espèrent que vous arriverez a m'aidé

  #include <simpleBouton.h>

#include <Keyboard.h>

const int q = 9;
const int d = 8;
const int z = 7;
const int s = 6;
const int x = 5;
const int w = 4;
const int u = 3;
const int i = 2;

void setup()
{
  pinMode(q,INPUT_PULLUP);
  pinMode(d,INPUT_PULLUP);
  pinMode(z,INPUT_PULLUP);
  pinMode(s,INPUT_PULLUP);
  pinMode(x,INPUT_PULLUP);
  pinMode(w,INPUT_PULLUP);
  pinMode(u,INPUT_PULLUP);
  pinMode(i,INPUT_PULLUP);
  
  Serial.begin(9600);
  }

void loop()
{
  Keyboard.begin();
  if (digitalRead(q) == 0)
  {
    Keyboard.press('q');
delay(10);
    Keyboard.releaseAll();

  }


if(digitalRead(d) == 0)
    {
      Keyboard.press('d');
delay(10);
      Keyboard.releaseAll();
 
    }
    
  if(digitalRead(s) == 0)
    {
      Keyboard.press('s');
     delay(10);
      Keyboard.releaseAll();
    
    }
    
  if(digitalRead(z) == 0)
    {
      Keyboard.press('z');
    delay(10);
      Keyboard.releaseAll();
     
    }
  
  if(digitalRead(x) == 0)
    {
      Keyboard.press('x');
    delay(10);
      Keyboard.releaseAll();
    
    }
  
  if(digitalRead(w) == 0)
    {
      Keyboard.press('w');
    delay(10);
      Keyboard.releaseAll();
     
    }

    if(digitalRead(u) == 0)
    {
      Keyboard.press('u');
    delay(10);
      Keyboard.releaseAll();
    
    }
  
  if(digitalRead(i) == 0)
    {
      Keyboard.press('i');
     delay(10);
      Keyboard.releaseAll();
     
    }
    
if(digitalRead(s) == 0)
  if(digitalRead(z) == 0)
    {
      Keyboard.press('s');
      Keyboard.press('z');
      
     delay(10);
      Keyboard.releaseAll();
     
    }

  
if(digitalRead(s) == 0)
  if(digitalRead(x) == 0)
    {
      Keyboard.press('s');
      Keyboard.press('x');
      
     delay(10);
      Keyboard.releaseAll();
     
    }
  
    Keyboard.end();
  }

merci d'avance

Merci d'éditer votre post pour rajouter les balises de de code, c'est difficile de suivre tel quel:

  • sélectionner la partie du texte qui correspond au code
  • appuyez sur l'icône </> dans la barre d'outils pour indiquer que c'est du code

(Assurez vous aussi d'indenter le code correctement dans l'IDE avant de le copier pour le coller ici. Cela se fait en pressant ctrlT sur PC ou cmdT sur un Mac)

j'espère que se sera bon

ps: désolé je suis débutant c'est la premier fois

ps: désolé je suis débutant c'est la première fois

c'est pour cela qu'il faut lire les règles du forum :slight_smile:

vous faites

#include <simpleBouton.h>

mais vous ne l'utilisez pas. donc tant que le bouton est appuyé vous balancez la commande

PS/ vous pourriez trouver des noms plus parlant pour vos pins:

const int q = 9;
const int d = 8;
const int z = 7;
const int s = 6;
const int x = 5;
const int w = 4;
const int u = 3;
const int i = 2;

les lettre que j'ai mis son celle que j'utilise pour jouer donc je comprend directement se que ç'ai en les voyant et justement je ne sais pas se qu'il faut changer après avoir mis #include <simpleBouton.h> c'est pour cela que je demande de l'aide pour mon code

il faut regarder les exemples de SimpleBoutons

essayez cela par exemple en ouvrant le moniteur Série à 115200 bauds

#include <simpleBouton.h>
const char keys[] = {'i', 'u', 'w', 'x', 's', 'z', 'd', 'q'};
const byte nbKeys = sizeof keys / sizeof keys[0];
simpleBouton boutons[] = {2, 3, 4, 5, 6, 7, 8, 9};

void setup() {
  Serial.begin(115200);
}

void loop() {
  for (byte b = 0; b < nbKeys; b++) {
    boutons[b].actualiser();
    if (boutons[b].vientDEtreEnfonce()) { Serial.print(F("appui de "));   Serial.println(keys[b]); }
    if (boutons[b].vientDEtreRelache()) { Serial.print(F("relâche de ")); Serial.println(keys[b]); }
  }
}

(tapé ici donc je n'ai rien testé)

d'accord merci beaucoup je vais testé tout de suite et je te dirais si sa a fonctionné et j'avais regardé les exemple mais je n'y comprenais rien heureusement qu'il y a ce forum

je l'ai testé le code marche mais vu qu'il n'est pas reconnu comme un clavier je ne peut pas m'en servir pour joué se qui est quand même le but

c'est bon merci j'ai réussie en changeant juste 2 3 truc et maintenant sa marche j'ai juste rajouter keyboard.h et sa donne ça

#include <simpleBouton.h>
#include <Keyboard.h>
const char keys[] = {'i', 'u', 'w', 'x', 's', 'z', 'd', 'q'}; 
const byte nbKeys = sizeof keys / sizeof keys[0];
simpleBouton boutons[] = {2, 3, 4, 5, 6, 7, 8, 9};

void setup() {
  
  Serial.begin(115200);
}

void loop() {
  for (byte b = 0; b < nbKeys; b++) {
    Keyboard.begin();
    boutons[b].actualiser();
    if (boutons[b].vientDEtreEnfonce()) { Serial.print(F("appui de "));   Keyboard.press(keys[b]); }
    if (boutons[b].vientDEtreRelache()) { Serial.print(F("relâche de ")); Keyboard.release(keys[b]); }
  }
  Keyboard.end();
}

merci encore

Oui - fallait que je vous laisse bosser un peu :slight_smile:
Vous pouvez bien sûr enlever les Serial.print et begin

au fait il faut mettre le Keyboard.begin(); dans le setup, enlever le Keyboard.end(); et vous pouvez vous passer de press et release en utilisant write()

ça donne donc un programme tout simple:

#include <simpleBouton.h>
#include <Keyboard.h>
const char keys[] = {'i', 'u', 'w', 'x', 's', 'z', 'd', 'q'};
const byte nbKeys = sizeof keys / sizeof keys[0];
simpleBouton boutons[] = {2, 3, 4, 5, 6, 7, 8, 9};

void setup() {
  Keyboard.begin();
}

void loop() {
  for (byte b = 0; b < nbKeys; b++) {
    boutons[b].actualiser();
    if (boutons[b].vientDEtreEnfonce()) Keyboard.write(keys[b]);
  }
}

d'accord alors je vais mettre ça

merci grâce a vous j'ai appris beaucoup dans le domaine du code