Utilisation de la bibliothèque PS2X_lib
Parfois la télécommande est capricieuse, il faut l'éteindre et la rallumer, vous assurer que le voyant vert sur l'unité de réception ne clignote plus et rebooter l'arduino. la librairie ne sait pas se reconnecter si elle perd la manette (donc ne commandez pas un avion avec ça... juste des petits truc qui roulent pas loin et pas vite ou des petits servos pour un robot etc)...
Appuiyer sur "Start" pour faire vibrer la manette
|-|-|
| |
|
|
#include <PS2X_lib.h>
PS2X ps2x;
// Connecter de gauche à droite en regardant le connecteur
// ----------------------
// Data --> pin 12
// Command --> pin 11
// NC
// ----------------------
// GND --> GND
// Power --> 3.3V
// Attention --> Pin 10
// ----------------------
// Clock --> pin 13
// NC
// NC
// ----------------------
const byte dataPin = 12;
const byte commandPin = 11;
const byte attentionPin = 10;
const byte clockPin = 13;
void setup() {
Serial.begin(115200);
/* config_gamepad(clock, command, attention, data, Pressures?, Rumble?) */
ps2x.config_gamepad(clockPin, commandPin, attentionPin, dataPin, true, true); // gardez true, true à la fin même si pas de moteurs
Serial.print(F("Manette - code "));
Serial.println(ps2x.readType());
ps2x.read_gamepad(); // initialisation des valeurs
delay(50);
ps2x.read_gamepad(); /* initialise les états */
}
void loop() {
static uint32_t chrono = 0;
const uint32_t periode = 20ul; // la manette est assez sensible, il ne faut pas lui demander les infos trop souvent. 15ms ou 20ms ça fonctionne pas mal...
if (millis() - chrono >= periode) {
int RX = 0, RY = 0, LX = 0, LY = 0;
static int PRX = 127, PRY = 128, PLX = 127, PLY = 128;
chrono += periode;
ps2x.read_gamepad(); /* on lit l'état de la manette */
LX = ps2x.Analog(PSS_LX); /* joystick de gauche X*/
LY = ps2x.Analog(PSS_LY); /* joystick de gauche Y */
RX = ps2x.Analog(PSS_RX); /* joystick de droite X */
RY = ps2x.Analog(PSS_RY); /* joystick de droite Y */
// si une des coordonnées des joystick a changé alors on imprime les nouvelles coordonnées
if ((LX != PLX) || (LY != PLY) || (RX != PRX) || (RY != PRY)) {
PLX = LX; PLY = LY; PRX = RX; PRY = RY; // Mémorisation des valeurs
Serial.print(LX); Serial.print(F(" ,"));
Serial.print(LY); Serial.print(F(" ,"));
Serial.print(RX); Serial.print(F(" ,"));
Serial.println(RY);
}
if (ps2x.ButtonPressed(PSB_START)) { Serial.println(F("START APPUI")); vibrate = 128; }
if (ps2x.ButtonPressed(PSB_SELECT)) Serial.println(F("SELECT APPUI"));
if (ps2x.ButtonPressed(PSB_PAD_UP)) Serial.println(F("HAUT APPUI"));
if (ps2x.ButtonPressed(PSB_PAD_RIGHT)) Serial.println(F("DROIT APPUI"));
if (ps2x.ButtonPressed(PSB_PAD_LEFT)) Serial.println(F("GAUCHE APPUI"));
if (ps2x.ButtonPressed(PSB_PAD_DOWN)) Serial.println(F("BAS APPUI"));
if (ps2x.ButtonPressed(PSB_L1)) Serial.println(F("GAUCHE 1 APPUI"));
if (ps2x.ButtonPressed(PSB_R1)) Serial.println(F("DROITE 1 APPUI"));
if (ps2x.ButtonPressed(PSB_L2)) Serial.println(F("GAUCHE 2 APPUI"));
if (ps2x.ButtonPressed(PSB_R2)) Serial.println(F("DROITE 2 APPUI"));
if (ps2x.ButtonPressed(PSB_L3)) Serial.println(F("ANALOG GAUCHE APPUI"));
if (ps2x.ButtonPressed(PSB_R3)) Serial.println(F("ANALOG DROITE APPUI"));
if (ps2x.ButtonPressed(PSB_GREEN)) Serial.println(F("Triangle APPUI"));
if (ps2x.ButtonPressed(PSB_BLUE)) Serial.println(F("X APPUI"));
if (ps2x.ButtonPressed(PSB_RED)) Serial.println(F("Cercle APPUI"));
if (ps2x.ButtonPressed(PSB_PINK)) Serial.println(F("Carre APPUI"));
if (ps2x.Button(PSB_START)) Serial.println(F("START"));
if (ps2x.Button(PSB_SELECT)) Serial.println(F("SELECT"));
if (ps2x.Button(PSB_PAD_UP)) Serial.println(F("HAUT"));
if (ps2x.Button(PSB_PAD_RIGHT)) Serial.println(F("DROITE"));
if (ps2x.Button(PSB_PAD_LEFT)) Serial.println(F("GAUCHE"));
if (ps2x.Button(PSB_PAD_DOWN)) Serial.println(F("BAS"));
if (ps2x.Button(PSB_L1)) Serial.println(F("GAUCHE 1"));
if (ps2x.Button(PSB_R1)) Serial.println(F("DROITE 1"));
if (ps2x.Button(PSB_L2)) Serial.println(F("GAUCHE 2"));
if (ps2x.Button(PSB_R2)) Serial.println(F("DROITE 2"));
if (ps2x.Button(PSB_L3)) Serial.println(F("ANALOG GAUCHE"));
if (ps2x.Button(PSB_R3)) Serial.println(F("ANALOG DROITE"));
if (ps2x.Button(PSB_GREEN)) Serial.println(F("Triangle"));
if (ps2x.Button(PSB_BLUE)) Serial.println(F("X"));
if (ps2x.Button(PSB_RED)) Serial.println(F("Cercle"));
if (ps2x.Button(PSB_PINK)) Serial.println(F("Carre"));
if (ps2x.ButtonReleased(PSB_START)) { Serial.println(F("START RELACHE")); vibrate = 0; }
if (ps2x.ButtonReleased(PSB_SELECT)) Serial.println(F("SELECT RELACHE"));
if (ps2x.ButtonReleased(PSB_PAD_UP)) Serial.println(F("HAUT RELACHE"));
if (ps2x.ButtonReleased(PSB_PAD_RIGHT)) Serial.println(F("DROITE RELACHE"));
if (ps2x.ButtonReleased(PSB_PAD_LEFT)) Serial.println(F("GAUCHE RELACHE"));
if (ps2x.ButtonReleased(PSB_PAD_DOWN)) Serial.println(F("BAS RELACHE"));
if (ps2x.ButtonReleased(PSB_L1)) Serial.println(F("GAUCHE 1 RELACHE"));
if (ps2x.ButtonReleased(PSB_R1)) Serial.println(F("DROITE 1 RELACHE"));
if (ps2x.ButtonReleased(PSB_L2)) Serial.println(F("GAUCHE 2 RELACHE"));
if (ps2x.ButtonReleased(PSB_R2)) Serial.println(F("DROITE 2 RELACHE"));
if (ps2x.ButtonReleased(PSB_L3)) Serial.println(F("ANALOG GAUCHE RELACHE"));
if (ps2x.ButtonReleased(PSB_R3)) Serial.println(F("ANALOG DROITE RELACHE"));
if (ps2x.ButtonReleased(PSB_GREEN)) Serial.println(F("Triangle RELACHE"));
if (ps2x.ButtonReleased(PSB_BLUE)) Serial.println(F("X RELACHE"));
if (ps2x.ButtonReleased(PSB_RED)) Serial.println(F("Cercle RELACHE"));
if (ps2x.ButtonReleased(PSB_PINK)) Serial.println(F("Carre RELACHE"));
}
}