Emuler touche clavier pour PS5

bonsoir,
j'ai réalisé une boite à boutons raccordée à une PS5 pour simuler des touches clavier.
Je fais du sim racing sur asssetto corsa competizione.
voici mon codage

#include <Keypad.h>
#include <Joystick.h>
#include <HID_Buttons.h>
#include <Usb.h>
#include <controllerEnums.h>
#include <PS5Trigger.h>
#include <PS5USB.h>
#include <PSBuzz.h>
#include <Keyboard.h>
#include <Key.h>

const
byte lignes[4] = {11, 10, 9, 8};
const byte colonnes[3] = {7, 6, 5};
char keypad[4][3] =
{
  {('S'), ('key_left_ctrl_A'), ('key_left_shift_A')},
  {('L'), ('key_left_ctrl_T'), ('key_left_shift_T')},
  {('key_left_alt_R'), ('key_left_ctrl_B'), ('key_left_shift_B')},
  {('key_left_shif_L'), ('key_left_ctrl_E'), ('key_left_shift_E')},
};

int tempsact;
int tempsdep;

void setup() {
  // put your setup code here, to run once:
  for (int i = 0; i <= 3; i++)
  {
    pinMode(lignes[i], OUTPUT);
    digitalWrite(lignes[i], HIGH);
  }
  for (int i = 0; i <= 2; i++)
  {
    pinMode(colonnes[i], INPUT_PULLUP);
  }
  Keyboard.begin(9600);
#define key_left_ctrl     0x80;
#define key_left_shift    0x81;
#define key_left_alt     0x82;

  tempsdep = millis();

}

void loop() {
  // put your main code here, to run repeatedly:
  tempsact = millis();
  for (int i = 0; i <= 3; i++)
  {
    digitalWrite(lignes[i], LOW);
    for (int n = 0; n <= 2; n++)
    {
      if (digitalRead(colonnes[n]) == LOW)
      {
        if (tempsact - tempsdep >= 500)
        {
          Keyboard.press(keypad[i][n]);
          tempsdep = tempsact;
        }
      }
    }
    digitalWrite(lignes[i], HIGH);
  }
}

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

bonjour,
je suis bien dans le groupe francophone!!

Bonjour @rotchy

Oui tu es dans forum francophone ....
....depuis que @UKHeliBob a déplacé ton message, publié initialement dans le sous forum anglophone 'Programming Questions' :grinning:
image

Bonjour
Ah ok désolé

Bonne soirée

salut!

mais en fait, ton truc marche bien? tu n'as pas de question à poser au forum?
Si c'est le cas, ça ressemble plus à un projet fini, et plutot intéressant en vrai.
Tu aurais le courage de faire 1 ou 2 photos et de plutot présenter ça comme un projet fini?

Bonjour,
Non ça ne fonctionne pas, il y quelque chose de faux dans ce programme!!
mais je n'arrive pas a avoir d'aide!!
Rien ne se passe sur la console.
merci de bien voir m'aider stp..

on est là pour ça (en tout cas on essaie!) et tu as posté ton code dans les règles de l'art.

Maintenant, il faut nous nourrir avec plus d'infos sur ton problème:

  • fournit un schéma du circuit electrique, meme dessiné à la main mais qui montre bien les connections entre la carte et les boutons, ainsi que l'alimentation de la carte elle même (et si c'est une pile 9V, tu vas entendre des noms d'oiseaux :smile:)
  • explique au mieux ce que tu observes par rapport à ce que tu attends, au besoin fait des copier/coller des messages d'erreurs.

par exemple: "rien ne se passe dans la console" c'est déjà quelque chose mais tu pourrais très bien avoir juste oublié d'ouvrir le serial monitor, il faut nous en dire plus!

est-ce que tu as déjà:

  • testé la meme carte avec un autre programme (au hasard blink);
  • essayé de mettre du texte pour débugger dans ton code (un petit "hello wolrd" au début par exemple) afin de confirmer si la carte est répondante (à défaut de faire fonctionner l'intégralité de ton code).

Allez viens, on dit avec un peu d'investigation, je suis sur qu'on peut amener ton projet au bout!

Merci beaucoup pour ce retour,


voici mon schéma.
il n'y a pas de message d'erreur
quand j'appuis sur C1-R1 simule touche S "starter"
sur C1-R2 touche L "éclairage phare"
sur C1-R3 touche ALT+R "essuis glace"
sur C1-R4 touche SHIFT+L "warning"
sur C2-R1 touche CTRL+A "ABS -"
sur C2-R2 touche CTRL+T "antipatinage 1 -"
sur C2-R3 touche CTRL+B "antipatinage 2 -"
sur C2-R4 touche CTRL+E "cartographie moteur -"
sur C3-R1 touche SHIFT+A "ABS +"
sur C3-R2 touche SHIFT+T "antipatinage 1 +"
sur C3-R3 touche SHIFT+B "antipatinage 2 +"
sur C3-R4 touche SHIFT+E "cartographie moteur +"

voila voila....
est-ce que tu as besoin de + de détails.

je me demande si il n'y a pas de problèmes dans les bibliothèques.

bon c'est pas mal déjà. Par prudence (et même si ton schéma semble suffisant), tu pourrais rajouter les entrées de la carte et son alimentation (USB branchée sur le PC et/ou la PS5 elle même, tu prévois une batterie externe pour faire du sans-fil, ce genre de chose).

tu as peut etre raison pour les bibliothèques, mais si c'est le cas ça peut être dur à dérouiller:

  • tout ce qui concerne le hardware coté arduino et bouton, ne t'en fait pas trop ça peut se refaire à la main (je pense au debounce sur les boutons par exemple) donc même si un bibliothèque est pas fonctionnelle, tu peux compenser.
  • tout ce qui concerne la communication en direction de la PS5: bah là je sais déjà que j'y connais absolument rien. Ca veut dire il faut que ça marche, sinon ça risque d'être compliqué à remplacer.

Je reprends ton code et ton montage. Je te propose d'y aller par petites touches, c'est à dire commencer par la carte et vérifier le fonctionnement de ton montage.
Tes instanciations m'ont l'air correctes, je remarque en revanche que tu connectes un jeu de résistance sur des entrées qui sont en configurées en pull-up. Je commence à approcher de mes limites en électronique, mais j'en déduis que ça fait 2 résistances sur une ligne.
Commençons en laissant les entrées en mode input "normal" mais il faudra que le circuit avec les boutons soit alimentés en +3,3 ou +5V par la carte.
On va faire une boucle de code qui lit uniquement les valeurs analogiques disponibles sur les entrées, ça te laisse jouer avec les boutons et voir la valeur qui en ressort sur la console:

const int lignes[4] = {11, 10, 9, 8}; // note que j'utilise le int plutot que le byte
const int colonnes[3] = {7, 6, 5};

Setup(){
  for (int i = 0; i <4; i++)
  {
    pinMode(lignes[i], OUTPUT);
   digitalWrite(lignes[i], HIGH);
     }
  for (int i = 0; i <3; i++)
  {
    pinMode(colonnes[i], INPUT);
  }
Serial.begin(115200);
delay(1500). // juste pour laisser le temps au serial de s'initialiser. Peut etre inutile sur ta carte.
}

Loop(){
for (int i=0;i<3;i++){
Serial.print("colonne n°");
Serial.print(i);
Serial.print(" lecture: ");
Serial.println(analogRead(colonne[i]);
}
}

si ce genre de code arrive à t'afficher sur la console les valeurs correspondantes, ça sera win pour cette étape (et point important, ça confirme la bonne réalisation de ton circuit, donc on peut se concentrer sur autre chose).
La suite logique serait de poursuivre ton projet en attribuant les valeurs lues aux touches du keyboard, et enfin (et ça se fera sans doute sans mon aide): arriver à traiter l'envoi de ces infos de la carte jusqu'à la PS5.

Tiens nous au courant, et bon courage!

Merci pour ton retour.
Mais j'ai une erreur avec le Loop.

connecter en USB

et tu en feras d'autres, mais ça devrait que te rapprocher de la réussite!

Salut
personne d'autre pour m'aider??

Salut Rotchy,
Je suis sur le même projet que toi et je suis beaucoup moins avancé que toi dans la programmation arduino.
Mais j'ai suivi une autre piste, il me semble.
Je viens tout juste de me commander un arduino Leonardo ATmega32u4 (résultat de recherches internet) pour emuler un clavier. Avec la micro Pro, ce sont les seules cartes qui permettent de la faire (facilement)
Je cherche à emuler un clavier car le clavier fonctionne très bien quand il est branché en USB à la PS5.
Je devrais faire les tests ce weekend pour vérifier que les commandes basiques fonctionnent via Arduino Leonardo. Ensuite je me ferai un boitier perso en impression 3d.
on peut rester en contact pour échanger à ce sujet si tu veux.
(je crois qu'on s'est déjà croisé sur la piste :wink: )

Salut,
Oui avec plaisir.
J'ai stoppé le projet car je n'arrive pas a avoir d'aide !
Mais si l'on peut d'aider se serait cool
Benoit.

1 Like

tu ne décris pas vraiment ton erreur uniquement que tu as une erreur que tu ne mentionnes pas.
Je suppose donc comme tu ne la mentionne pas, que ce ne doit pas être bloquant ?

Salut,
J’avoue que je débute dans la programmation arduino et que je ne comprends pas tes lignes de codes. Mais
As-tu regardé la vidéo que j’ai posté? Qu’en penses-tu?
Avais-tu essayé avec un seul bouton - une commande ? Ça fonctionnait?

J’ai commandé une leonardo. A suivre très bientôt…

Si celle là je ne l'ai pas regardé 20 fois 凉

Benoit.

1 Like

je relis et je vois que tu as essayé avec une leonardo également. peut-être faut-il essayer avec une micro Pro, tu penses que ça changerait quelque chose ?