Bonjour à tous,
Dans le cadre d'un projet en école d’électronique j'ai besoin de réaliser une liaison entre des servomoteurs et deux joysticks par un code ARDUINO. Je n'utilise pas leur fonction switch mais uniquement leurs axes X et Y. J'arrive à récupérer les valeurs des axes X et Y de mes joysticks avec une fonction toute simple et j'aimerais les donner aux servomoteurs. Sauf que j'utilise une carte SHIELD pour contrôler ses derniers et si j'ai bien compris elle utilise une librairie un peu spécifique que je ne comprend pas. Je voudrais donc savoir si quelqu'un pouvais me dire/ m'expliquer comment m'y prendre.
Ma carte ARDUINO est une MEGA 2560 et ma SHIELD une doit.am
Le programme que j'ai fait pour récupérer les valeurs des joysticks est le suivant :
int VRx = 0;
int VRy = 1;
int VRx2 = 2;
int VRy2 = 3;
int xPosition = 0;
int yPosition = 0;
int mapX = 0;
int mapY = 0;
int xPosition2 = 0;
int yPosition2 = 0;
int mapX2 = 0;
int mapY2 = 0;
void setup() {
Serial.begin(9600);
pinMode(VRx, INPUT);
pinMode(VRy, INPUT);
pinMode(VRx2, INPUT);
pinMode(VRy2, INPUT);
}
void loop() {
xPosition = analogRead(VRx);
yPosition = analogRead(VRy);
mapX = map(xPosition, 0, 1023, -512, 512);
mapY = map(yPosition, 0, 1023, -512, 512);
xPosition2 = analogRead(VRx2);
yPosition2 = analogRead(VRy2);
mapX2 = map(xPosition2, 0, 1023, -512, 512);
mapY2 = map(yPosition2, 0, 1023, -512, 512);
Serial.print("X: ");
Serial.print(mapX);
Serial.println();
Serial.print(" | Y: ");
Serial.print(mapY);
Serial.println();
Serial.print("X2: ");
Serial.print(mapX2);
Serial.println();
Serial.print(" | Y2: ");
Serial.print(mapY2);
Serial.println();
delay(1000);
}
et le programme pour tester mes moteurs, que j'ai trouvé est le suivant :
#include <Wire.h>
#include <ServoDriver.h>
ServoDriver pwm = ServoDriver();
#define SERVOMIN 102 // this is the 'minimum' pulse length count (out of 4096)
#define SERVOMAX 512 // this is the 'maximum' pulse length count (out of 4096)
// IMPORTANT: Servo num #
uint8_t servonum = 0;
void setup() {
pwm.begin();
pwm.setPWMFreq(50); // servos run at 50 Hz
}
void loop() {
// Drive ONE servo at a time
for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++) {
pwm.setPWM(servonum, 0, pulselen);
}
delay(300);
for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--) {
pwm.setPWM(servonum, 0, pulselen);
}
delay(300);
}
Merci par avance de votre aide ;D