Aide pour un clavier pc

ok j ai retirer
mapX = xPosition - 512; sa veut dire qu' il va 1023-512 = 511 et 512 -512 = 0 , il y a plus de négatif
je vais voir d autre code pour essayer de changer sa , la je comprend pas grand chose et je vois pas trop comment m en servir , mais c était surtout savoir si je suis sur la bonne piste

#include<Keyboard.h>

const int bj1 = 2; 
const int X1 = A0; 
const int Y1 = A1; 
int x, y;
void setup() 
{
  pinMode(bj1, INPUT); 
  digitalWrite(bj1, HIGH); 
  Keyboard.begin();
}
void loop() 
{
  x = analogRead(X1);
  if (x == 1023) // check whether the value of x = 1023
  {
    Keyboard.press(218);// haut
  }
  else
  {
    Keyboard.release(218);
  }
  x = analogRead(X1); 
  if (x == 0)
  {
    Keyboard.press(217); // bas
  }
  else
  {
    Keyboard.release(217);
  }
  y = analogRead(Y1);

    if (y == 1023)
    {
      Keyboard.press(216); // droite
    }
    else
    {
     Keyboard.release(216);
    }
  y = analogRead(Y1);

    if (y == 0)
    {
      Keyboard.press(215); // gauche
  }
  else
  {
    Keyboard.release(215); 
  }
  int z = digitalRead(bj1);
    if (z == 0) 
    {
      Serial.println("Enter:");
      Keyboard.println(); //enter 
   }
  delay(500);
}

j ai trouver sa qui est mieux , mais le joystick défile en haut en continue
j ai changer de joystick sa me le fait plus
je vais essayer sans les else et avec break les codes sont pas pour le déplacement

xPosition est compris entre 0 et 1023 donc mapX est compris entre 0-512 et 1023-512 soit -512 et 511

#include<Keyboard.h>

const int bj1 = 2; 
const int X1 = A0; 
const int Y1 = A1; 
int x, y;
void setup() 
{
  pinMode(bj1, INPUT); 
  digitalWrite(bj1, HIGH); 
  Keyboard.begin();
}
void loop() 
{
  x = analogRead(X1);
  if (x == 1023)
  {
    Keyboard.press(218);// haut
    break
  }
  x = analogRead(X1); 
  if (x == 0)
  {
    Keyboard.press(217); // bas
    break
  }
  y = analogRead(Y1);
    if (y == 1023)
    {
      Keyboard.press(216); // droite
      break
    }
  y = analogRead(Y1);
    if (y == 0)
    {
      Keyboard.press(215); // gauche
      break
  }
  int z = digitalRead(bj1);
    if (z == 0) 
    {
      Serial.println("Enter:");
      Keyboard.println(); //enter 
   }
  delay(500);
}

mais les break font des erreur dans le code

On ne met pas de break dans les else. Le bloc est délimité par les accolades.
On en place dans les case pour indiquer la fin du bloc d'instructions sinon l'exécution continue dans le case qui suit.
https://www.arduino.cc/reference/en/language/structure/control-structure/switchcase/
https://www.arduino.cc/reference/en/language/structure/control-structure/if/
https://www.arduino.cc/reference/en/language/structure/control-structure/else/

ok , merci , du coup je vais laisser comme c était avant , je pensait réduire la taille avec les break
tu n aurait pas un lien vers une page des code pour le clavier par hasard ?

https://www.arduino.cc/en/Reference/KeyboardModifiers

Je n'ai jamais joué avec cette librairie.
Mais il y a d'autres personnes qui l'ont déjà fait.
D'ailleurs, il doit y avoir des fils de discussion sur ce sujet dans le forum.

#include<Keyboard.h>

const int bj1 = 2; 
const int X1 = A0; 
const int Y1 = A1; 
int x, y;
void setup() 
{
  pinMode(bj1, INPUT); 
  digitalWrite(bj1, HIGH); 
  Keyboard.begin();
}
void loop() 
{
  x = analogRead(X1);
  if (x == 1023)
  {
    Keyboard.press(218);// haut
  }
  else
  {
    Keyboard.release(218);
  }
  x = analogRead(X1); 
  if (x == 0)
  {
    Keyboard.press(217); // bas
  }
  else
  {
    Keyboard.release(217);
  }
  y = analogRead(Y1);

    if (y == 1023)
    {
      Keyboard.press(215); // droite
    }
    else
    {
     Keyboard.release(215);
    }
  y = analogRead(Y1);

    if (y == 0)
    {
      Keyboard.press(216); // gauche
  }
  else
  {
    Keyboard.release(216); 
  }
  int z = digitalRead(bj1);
    if (z == 0) 
    {
      Keyboard.print(" "); 
   }
  delay(200);
}

sa marche bien comme sa , le delay pause problème mais je sais pas si je peut le virer

Qu'est-ce qu'il pose comme problème?

Ces 2 lignes peuvent être remplacées par une seule

pinMode(bj1, INPUT_PULLUP);

Dans ce bloc, pas la peine de faire x = analogRead(X1); avant chaque if.
Tu peux l'écrire comme ça

  x = analogRead(X1);
  if (x == 1023)
  {
    Keyboard.press(218);// haut
  }
  else
  {
    Keyboard.release(218);
  }
  if (x == 0)
  {
    Keyboard.press(217); // bas
  }
  else
  {
    Keyboard.release(217);
  }

Je pense aussi que le test strict sur les valeurs max n'est pas judicieux les potentiomètres dans les joysticks ne vont quelque fois pas jusqu'au bout et donc la valeur limite n'est pas toujours atteinte, aussi bien pour 1023 que pour 0.
Il vaudrait mieux tester

  x = analogRead(X1);
  if (x > 900)
  {
    Keyboard.press(218);// haut
  }
  else
  {
    Keyboard.release(218);
  }
  if (x < 100)
  {
    Keyboard.press(217); // bas
  }
  else
  {
    Keyboard.release(217);
  }

D'autre part, je vois mal l'intérêt d'utiliser un joystick analogique pour avoir un fonctionnement tout ou rien. Un joystick à poussoir comme les joysticks des jeux d'arcade te donnerait le même résultat avec une gestion plus simple.

merci , je vais faire les faire les changement que tu me conseil , le pb c est avec le delay de 500 sa passer mal t appuyer et tu devait attendre un peu avant que sa marche , je l ai passer a 200 sa se sens presque pas mais bon
mais j aime pas les joystick d arcade trop gros , ceux la sont petit avec un pc c est mieux je trouve pour mon projet

#include<Keyboard.h>

const int Bj1 = 2; 
const int JX1 = A0; 
const int JY1 = A1; 
int Jx1, Jy1;
void setup() 
{
  digitalWrite(Bj1,INPUT_PULLUP ); 
  Keyboard.begin();
}
void loop() 
{
  Jx1 = analogRead(JX1);
  if (Jx1 > 900)
  {
    Keyboard.press(218);// haut
  }
  else
  {
    Keyboard.release(218);
  }
  if (Jx1 < 100)
  {
    Keyboard.press(217); // bas
  }
  else
  {
    Keyboard.release(217);
  }
  Jy1 = analogRead(JY1);
{
  if (Jy1 > 900)
  {
    Keyboard.press(215); // droite
  }
  else
  {
    Keyboard.release(215);
  }
  if (Jy1 < 100)
  {
    Keyboard.press(216); // gauche
   }
  else
  {
    Keyboard.release(216); 
  }
  int bj1 = digitalRead(Bj1);
  if (bj1 == 0) 
  {
    Keyboard.print(" "); 
  }
  delay(200);
}
}

voila se que sa donne , sa a l aire aussi plus reactif

Je viens seulement de remarquer ça, le else est actif tout le temps dès que la condition n'est pas remplie. Ce qui fait que lorsque ton joystick est au repos il envoie en permanence les 4 Keyboard.release() puisqu'aucune des conditions n'est vrai.

Essayes ça

#include<Keyboard.h>

const int Bj1 = 2;
const int JX1 = A0;
const int JY1 = A1;
int Jx1, Jy1;
boolean keypressJx1 = false;
boolean keypressJy1 = false;

void setup()
{
  digitalWrite(Bj1, INPUT_PULLUP );
  Keyboard.begin();
}
void loop()
{
  Jx1 = analogRead(JX1);
  if (Jx1 > 900)
  {
    Keyboard.press(218);// haut
    keypressJx1 = true;
  }
  else if (Jx1 < 100)
  {
    Keyboard.press(217); // bas
    keypressJx1 = true;
  }
  else if (keypressJx1 == true)
  {
    Keyboard.release(218);
    keypressJx1 = false;
  }

  Jy1 = analogRead(JY1);
  if (Jy1 > 900)
  {
    Keyboard.press(215); // droite
    keypressJy1 = true;
  }
  else if (Jy1 < 100)
  {
    Keyboard.press(216); // gauche
    keypressJy1 = true;
  }
  else if (keypressJy1 == true)
  {
    Keyboard.release(216);
    keypressJy1 = false;
  }
  int bj1 = digitalRead(Bj1);
  if (bj1 == 0)
  {
    Keyboard.print(" ");
  }
  delay(200);
}

j ai test sa marche pas , il part en arrière en continue
boolean keypressJx1 = false; (boolean Jx1 = false;)
keypressJx1 = true; ( Jx1 = true;) sa serait pas mieux ?
Jx1 = true
Keyboard.press(218)
Jx1 = false
Keyboard.release(218)
ou
Keyboard.press(218) = true
Keyboard.release(218) = false
je vais aller voir comment sa marche , sa a laire pas mal en faite pour soulager la carte

boolean jx1v = ( 900 < Jx1 > 100) =true;
boolean jy1v = ( 900 < Jy1 > 100) =true;
je pense qu un truc comme serait mieux mais faut que je trouve comment le faire
sa ma l aire compliquer car attribuer 2 valeur vrais avec bool pause pb je suppose dans la lecture
de l une ou l autre

Je me suis planté je n'envoyais que le relâchement pour une des deux touches sur chacun des axes.
Celui-là devrait être mieux (j'espère)

#include<Keyboard.h>

const int Bj1 = 2;
const int JX1 = A0;
const int JY1 = A1;
int Jx1, Jy1;
boolean keypressJx1Up = false;
boolean keypressJx1Down = false;
boolean keypressJy1Right = false;
boolean keypressJy1Left = false;

void setup()
{
  digitalWrite(Bj1, INPUT_PULLUP );
  Keyboard.begin();
}
void loop()
{
  // gestion axe haut bas
  Jx1 = analogRead(JX1);
  if (Jx1 > 900) {
    Keyboard.press(218);// haut
    keypressJx1Up = true; // mémorise que l'on a envoyé haut appuyée
  } else if (keypressJx1Up) { // si on a envoyé haut mais que l'on a relaché
    Keyboard.release(218); // signale relachement touche haut
    keypressJx1Up = false; // marque le relachement de la touche
  }

  if (Jx1 < 100) {
    Keyboard.press(217); // bas
    keypressJx1Down = true; // mémorise que l'on a envoyé bas appuyée
  } else if (keypressJx1Down) { // si on a envoyé bas mais que l'on a relaché
    Keyboard.release(217); // signale relachement touche bas
    keypressJx1Down = false; // marque le relachement de la touche
  }

  // gestion axe gauche droite
  Jy1 = analogRead(JY1);
  if (Jy1 > 900) {
    Keyboard.press(215); // droite
    keypressJy1Right = true; // mémorise que l'on a envoyé droite appuyée
  }
  else if (keypressJy1Right) { // si on a envoyé droite mais que l'on a relaché
    Keyboard.release(215); // signale relachement touche droite
    keypressJy1Right = false; // marque le relachement de la touche
  }

  if (Jy1 < 100) {
    Keyboard.press(216); // gauche
    keypressJy1Left = true;// mémorise que l'on a envoyé gauche appuyée
  } else if (keypressJy1Left == true) { // si on a envoyé droite mais que l'on a relaché
    Keyboard.release(216); // signale relachement touche gauche
    keypressJy1Left = false; // marque le relachement de la touche
  }

  int bj1 = digitalRead(Bj1);
  if (bj1 == 0)
  {
    Keyboard.print(" ");
  }
  delay(200);
}

Comme on enverra le relâchement qu'une fois, la boucle devrait s'exécuter plus rapidement et le clavier sera plus réactif. Enfin cela dépend aussi du delay() à la fin.

j ai test sa marche , j ai dut retélécharger un vierge car il partait en arrière et le mettre après
je ne ai pas dit que tu te tromper juste constater que sa faisait une erreur
du coup je peut virer le delay avec sa ?

Alors je ne sais pas, le plus simple c'est d'essayer.
Je pense quand même qu'il ne faut peut-être pas le supprimer complètement car la boucle va s'exécuter à toute vitesse et si tu tiens le joystick en haut par exemple ça va envoyer en permanence le code 218. Si tu laisses un delay() le code sera envoyé un peu moins souvent.
Il faudra peut-être tâtonner un peu pour trouver la durée du delay() qui va bien.

#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel leds(12, 2, NEO_GRB + NEO_KHZ800);
int bi1 = 3;
int modebi1 = 0;

void setup() {
  pinMode(bi1, INPUT_PULLUP);
  leds.begin()
  leds.setBrightness(50);
  leds.show ()
}
void loop() {
  if(digitalRead(bi1)){
    interupteurlumiere();
    delay(300);
  }
}
void interupteurlumiere(){
  modebi1 = (modebi1) +1;
}
switch(modebi1){
  case 1 :
  leds.fill(leds.Color(10,0,10),0,12);
  leds.show();
  break;
  case 2 
  leds.clear ();
  modebi1 = (modebi1) -2;
  break;
}

j ai voulut faire un interrupteur avec un bouton pressoir pour
allumer un anneau leds