Bonsoir,
Histoire de changer un peu d'air, j'ai décidé de faire quelques tests avec mon matos.
J'ai découvert les joies de la manette PS2X avec son récepteur 2.4 GHz.
J'aimerais faire tourner un moteur lorsque j'appuie sur la gachette R2.
Seulement celui ci ne tourne pas, car au lieu d'avoir mes 5 volts à ces bornes lorsque j'appuie sur la gachette, je n'en ai seulement 1.2 environ.
Voici mon code :
#include <PS2X_lib.h> /* PS2 Controller Library http://www.billporter.info/2010/06/05/playstation-2-controller-arduino-library-v1-0/ */
PS2X ps2x; /* on crée l'instance du controleur */
// information http://www.rhydolabz.com/wiki/?p=12663
// 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;
int pinmotor = 7;
byte motor = 0;
void setup()
{
Serial.begin(115200);
pinMode(pinmotor, OUTPUT);
/* 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
if (ps2x.readType() == 1) Serial.println(F("DualShock"));
else {
Serial.print(F("Manette Absente - code "));
Serial.println(ps2x.readType());
while (true); // on meurt ici, éventuellement enlever si vous avez un autre code manette
}
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 pour moi
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;
Serial.print(LX); Serial.print(F(" ,"));
Serial.print(LY); Serial.print(F(" ,"));
Serial.print(RX); Serial.print(F(" ,"));
Serial.println(RY);
}
// if (ps2x.NewButtonState()) {} /* vrai s'il y a un changement d'état, si on ne veut pas lire l'état à la main */
// ButtonPressed(unsigned int) vrai si le bouton VIENT d'être appuyé (depuis la dernière lecture de config)
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"));
// Button(uint16_t); vrai si le bouton est tenu enfoncé
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))
{
motor = 1;
Serial.println(F("DROITE 2"));
Serial.println(motor);
}
// ButtonReleased(unsigned int) vrai si le bouton VIENT d'être relâché (depuis la dernière lecture de config)
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))
{
motor = 0;
Serial.println(F("DROITE 2 RELACHE"));
Serial.println(motor);
}
}
if(motor == 1)
{
digitalWrite(pinmotor, LOW);
}
else if(motor == 0)
{
digitalWrite(pinmotor, HIGH);
}
}
En espérant que vous trouverez pourquoi
Merci d'avance
EDIT : Le moteur est alimenté par une source externe à l'arduino, qui peu fournir jusqu'à 2 ampères.
Les masses sont communes.
J'ai essayé en alimentant avec l'arduino mais même problème.
Je précise que le moteur est fonctionnel.