Merci pour cette indication. Je suis maintenant en masses communes dans mon montage, mais j'ai toujours le problème de blocage en marche des moteurs. Notez que cela ne se produit que lorsque le montage n'est pas raccordé au PC.
Avez-vous un avis concernant mon code ?
/*
Conduite d'un machin à deux moteurs avec une manette PS4
Suppose la mise en place sur l'arduino uno :
1: en bas l'arduino uno lui-même
2: le shield usb recevant le dongle bluetooth
3: le shield Cytron pour deux moteurs électriques CC
pin 4 : sens de rotation moteur droit (sensMoteurDroit)
pin 5 : vitesse moteur droit (vitesseMoteurDroit)
pin 6 : vitesse moteur gauche (vitesseMoteurGauche)
pin 7 : sens de rotation moteur gauche (sensMoteurGauche)
4: Concernant la manette PS4, les joysticks ne seront lus que sur les axes verticaux
Les valeurs lues varient de 0, joysticks poussé vers le haut, à 255, joysticks
complètement tiré vers le bas
*/
//Inclusions des bibliothèques PS4 bluetooth et USB
#include <PS4BT.h>
#include <usbhub.h>
// Satisfy the IDE, which needs to see the include statment in the ino too.
// Repris de PS4BT.ino
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
#include <SPI.h>
#include <Shield2AMotor.h>
//Création d'une instance de la liaison USB du shield
USB Usb;
//Création d'une instance du dongle bluetooth
BTD Btd(&Usb);
/* You can create the instance of the PS4BT class in two ways */
// This will start an inquiry and then pair with the PS4 controller - you only have to do this once
// You will need to hold down the PS and Share button at the same time, the PS4 controller will then start to blink rapidly indicating that it is in pairing mode
//PS4BT PS4(&Btd, PAIR);
// After that you can simply create the instance like so and then press the PS button on the device
PS4BT PS4(&Btd);
//Variables de lecture des joysticks
//Valeurs brutes des joysticks lues avec la fonction "getAnalogHat"
int jsGy,jsDy;
//Déclaration du shield de commande des deux moteurs, en mode "Signed Magnitude"
//La déclaration assure également l'assignation des pins vers l'Arduino
Shield2AMotor motor(SIGNED_MAGNITUDE);
//Variable des vitesses calculées des moteurs
//Peut varier de -100 à +100
signed int vitesseD=0;
signed int vitesseG=0;
/* Fin des initialisation */
void setup() {
//Moteurs à l'arrêt à l'initialisation
vitesseG=0;
vitesseD=0;
motor.control(vitesseG, vitesseD);
// Initialisation de la liaison série pour suivre le programme
Serial.begin(115200);
// Wait for serial port to connect - used on Leonardo, Teensy and other boards
// with built-in USB CDC serial connection
#if !defined(__MIPSEL__)
while (!Serial);
#endif
if (Usb.Init() == -1) {
Serial.print(F("\r\nUSB n'a pas démarré"));
while (1); // Halt
}
Serial.print(F("\r\nLibrairie PS4 démarrée"));
}
void loop() {
Usb.Task();
if (PS4.connected()) //La manette PS4 est bien connectée
{
//Lecture de la position des deux joysticks (uniquement en vertical)
jsGy=PS4.getAnalogHat(LeftHatY);
jsDy=PS4.getAnalogHat(RightHatY);
Serial.print(F("\r\njoyGauche: "));
Serial.print(jsGy);
Serial.print(F("\tjoyDroit: "));
Serial.print(jsDy);
//Joy Gauche au neutre
if ((jsGy > 117) && (jsGy < 137))
{
//Serial.print(F("\r\nJoysticks Gauche au centre"));
vitesseG=0;
}
//Joy droit au neutre
if ((jsDy > 117) && (jsDy < 137))
{
//Serial.print(F("\r\nJoysticks Droit au centre"));
vitesseD=0;
}
//Joy Gauche vers le haut
if (jsGy <= 117)
{
//Serial.print(F("\r\nJoystick Gauche vers le haut"));
vitesseG=map(jsGy, 117, 0, 0, 90);
}
//Joy Gauche vers le bas
if (jsGy >= 137)
{
//Serial.print(F("\r\nJoystick Gauche vers le bas"));
vitesseG=map(jsGy, 137, 255, 0, -90);
}
//JS Droit vers le haut
if (jsDy <= 117)
{
//Serial.print(F("\r\nJoystick Droit vers le haut"));
vitesseD=map(jsDy, 117, 0, 0, 90);
}
//JS Droit vers le bas
if (jsDy >= 137)
{
//Serial.print(F("\r\nJoystick Droit vers le bas"));
vitesseD=map(jsDy, 137, 255, 0, -90);
}
ordresCharEtPS4(vitesseG, vitesseD);
Serial.print(F("\tvitesseG: "));
Serial.print(vitesseG);
Serial.print(F("\tvitesseD: "));
Serial.print(vitesseD);
//Test bouton TRIANGLE (arrêt des deux moteurs)
if (PS4.getButtonClick(TRIANGLE))
{
/*Test d'appui sur le bouton "Triangle", alors arrêt moteurs*/
Serial.print(F("\r\nTriangle : Arrêt deux moteurs"));
vitesseG=0;
vitesseD=0;
ordresCharEtPS4(vitesseG, vitesseD);
PS4.disconnect();
}
//Test bouton PS (déconnexion, arrêt moteurs)
if (PS4.getButtonClick(PS))
{
/*Test appui sur touche "PS", qui conduit à la déconnexion de la
manette PS4. Il faut d'abord arrêter les moteurs*/
Serial.print(F("\r\nPS : Déconnexion - Arrêt deux moteurs"));
vitesseG=0;
vitesseD=0;
ordresCharEtPS4(vitesseG, vitesseD);
PS4.disconnect();
}
}
else
{
Serial.print(F("\r\nPS4 non connectee"));
}
}
void ordresCharEtPS4(signed int vG, signed int vD){
//Deux Moteurs à l'arrêt
if ((vG == 0) && (vD == 0))
{
PS4.setRumbleOn(0,0);
PS4.setLed(Blue);
PS4.setLedFlash(0, 0);
}
//Deux moteurs vers l'avant
else if ((vG > 0) && (vD > 0))
{
PS4.setRumbleOn(0,127);
PS4.setLed(White);
PS4.setLedFlash(0, 0);
}
//Deux Moteurs vers l'arrière
else if ((vG < 0) && (vD < 0))
{
PS4.setRumbleOn(65,0);
PS4.setLed(Yellow);
PS4.setLedFlash(10, 10);
}
//Tourne vers la droite
else if (vG > vD)
{
PS4.setRumbleOn(0,0);
PS4.setLed(Green);
PS4.setLedFlash(10, 10);
}
else if (vG < vD)
{
PS4.setRumbleOn(0,0);
PS4.setLed(Red);
PS4.setLedFlash(10, 10);
}
motor.control(vG, vD);
}