comment il faut faire pur ralentir et bloque un mini servo dans son mouvement

Florent, je veux bien t'aider, mais il faut lire les réponses que tu obtiens. Dans le message 17 (tu vois les numéros des messages ?) après le paragraphe qui commence par "Voici ce que j'obtiens" il y a un programme dans un rectangle blanc. Tu peux essayer de le lire et de le comprendre ou bien le copier directement dans ton logiciel arduino et le téléverser dans ton arduino. Teste le, fais le fonctionner et dis nous ensuite si c'est ce que tu cherches ou s'il faut le modifier.

merci,

mais je crois avoir une idee

il ne faurrai pas dire que le joy stick envoyer moins de puissance

je remette le post

Non Florent, ce n'est pas possible

excuse moi je ne vois pas les message car je regarder tj sur la premier pas excuser moi je suis vraiment confut

si non t on code me fait un truc bizarre mais je sais le mettre sur la carte

par contre si tu c est me dire comment coder detach () car mon pere me dit qu il faut que je laisse le servo moteur bloquer parce que il revient au debut pas comme les potentiomètre et j ai trouver quant détachant le cable qui est connecté a la carte arduino le servo moteur ne reviens pas au debut alors mon idee se serai de la detacher en appuyant sur le bouton du joy stick (sw) on puisse le devier sur une broche non occuper

Il revient au début lorsque tu relâches les joysticks, c'est ça?

Oui

Quand tu dis "ton code me fait un truc bizarre", que se passe-t-il exactement ?

J'ai modifié le code pour qu'un appui sur l'un ou l'autre bouton permette de bloquer ou de relancer les servos. Si les servos sont en mouvement, un appui sur un bouton (n'importe lequel) va les bloquer. S'ils sont bloqués, un appui sur un bouton (n'importe lequel) va les relancer.

Voici le code : teste le.

#include <Servo.h>

Servo rotation;
Servo alongeur;
Servo pince;
Servo longueur;

const byte ServoMoteur1 = 7;
const byte ServoMoteur2 = 8;
const byte ServoMoteur3 = 9;
const byte ServoMoteur4 = 10;
const byte Bouton_1 = 2;
const byte Bouton_2 = 3;
#define axeY1joy A1
#define axeX1joy A2
#define axeX2joy A3
#define axeY2joy A4

enum listeServos {Rotation, Alongeur, Pince, Longueur};
unsigned int positionDuServo[4] = {0}; // degrés
unsigned int positionDuServoOld[4] = {0};
unsigned int valeursJoy[4] = {0};
int vitesse[4] = {0}; // -1, 0 ou 1
unsigned int dureeMouvement = 50; // ms
bool detached = true;

// fonction de lecture des positions des joysticks
void readJoysticks () {
  valeursJoy[Rotation] = analogRead(axeY1joy);
  valeursJoy[Alongeur] = analogRead(axeX2joy);
  valeursJoy[Pince]    = analogRead(axeY2joy);
  valeursJoy[Longueur] = analogRead(axeX1joy);
}

// fonction pour attacher les servos
void attachServos () {
  rotation.attach(ServoMoteur1);
  alongeur.attach(ServoMoteur2);
  pince.attach(ServoMoteur3);
  longueur.attach(ServoMoteur4);
}

// fonction pour détacher les servos
void detachServos () {
  rotation.detach();
  alongeur.detach();
  pince.detach();
  longueur.detach();
}

void setup()
{
  attachServos ();
  detached = false;
  pinMode(Bouton_1, INPUT_PULLUP);
  pinMode(Bouton_2, INPUT_PULLUP);

  readJoysticks ();
  for (byte i = 0; i < 4; i++) positionDuServoOld[i] = map(valeursJoy[i], 0, 1023, 0, 180);

  rotation.write(positionDuServoOld[Rotation]);
  longueur.write(positionDuServoOld[Longueur]);
  alongeur.write(positionDuServoOld[Alongeur]);
  pince.write(positionDuServoOld[Pince]);

  delay(3000); // pour laisser les servos atteindre leurs positions
}

void loop()
{
  if (!detached) {  // si les servos sont attachés :
    // lecture des positions des joysticks
    readJoysticks ();

    // calcul des positions des servos
    for (byte i = 0; i < 4; i++) {
      positionDuServo[i] = map(valeursJoy[i], 0, 1023, 0, 180);
      if (positionDuServo[i] > positionDuServoOld[i]) vitesse[i] = 1;
      else if (positionDuServo[i] < positionDuServoOld[i]) vitesse[i] = -1;
      else vitesse[i] = 0;
      positionDuServoOld[i] += vitesse[i];
    }

    // déplacement des servos
    rotation.writeMicroseconds(positionDuServoOld[Rotation]);
    alongeur.writeMicroseconds(positionDuServoOld[Alongeur]);
    pince.writeMicroseconds(positionDuServoOld[Pince]);
    longueur.writeMicroseconds(positionDuServoOld[Longueur]);
    delay (dureeMouvement);
  }

  // lecture des boutons (LOW si appuyé)
  if (!digitalRead(Bouton_1) || !digitalRead(Bouton_2)) {
    // si un bouton est appuyé, on inverse l'indicateur 'detached'
    detached = !detached;
    // puis on attache ou on détache selon l'indicateur
    if (detached) detachServos ();
    else attachServos ();
  }
}

Les boutons sont connectés sur les pins 2 et 3, en "INPUT_PULLUP", c'est à dire :
pin --- bouton --- GND

merci beaucoup mais je t ai poser une question en mp , pour un probleme sauf que tt le monde peux le savoir

je peux changer ca

#define axeY1joy A1

en ca
[/code]
const char axeY1joy = A1 ;

si oui ce la change quoi???

j ai pas tout compris pour mettre le code sorry

ça ne change rien en pratique mais la seconde version const char axeY1joy = A1 ;est plus propre car elle permettra au compilateur d'effectuer des vérification sur le type de la variable.

bon l'idéal serait d'utiliser byte (ou uint8_t) comme type au lieu de char car un numéro de pin n'est pas négatif et un char c'est une variable signée --> const byte axeY1joy = A1 ;

florentw:
j ai pas tout compris pour mettre le code sorry

Pour rajouter les balises de code / tags autour du code on écrit comme cela:

[code]
[color=blue]// votre code ici[/color]
[/code]

et ça va ressembler à cela:

// votre code ici

(faites aussi ctrl-T (PC) or cmd-T (Mac) dans l'IDE avant de copier le code pour qu'il soit indenté correctement)

(on peut aussi clicker sur l'icône de code </> après avoir sélectionner le code)[/color]

ok mais tu as messenger car je vais te montrer ce que fait le robot avec le code repond moi en mp

j'ai pas messenger et je ne lis pas les mp. tout ce que je contribue ici est public...

mais @lesept lui fait comme il veut :slight_smile:

Pas messenger non plus, trop vieux... :')

@florent vous pouvez poster une petite vidéo (anonymisée) sur YouTUbe si vous voulez nous montrer quelque chose

voila la video le lien c est :

Florent - d’où vient l’alimentation électrique des moteurs ?

Sinon remplacez cette partie du code de leSept (dans la loop() )

    // déplacement des servos
    rotation.writeMicroseconds(positionDuServoOld[Rotation]);
    alongeur.writeMicroseconds(positionDuServoOld[Alongeur]);
    pince.writeMicroseconds(positionDuServoOld[Pince]);
    longueur.writeMicroseconds(positionDuServoOld[Longueur]);
    delay (dureeMouvement);

par le code suivant

    // déplacement des servos
    rotation.write(positionDuServoOld[Rotation]);
    alongeur.write(positionDuServoOld[Alongeur]);
    pince.write(positionDuServoOld[Pince]);
    longueur.write(positionDuServoOld[Longueur]);
    delay (dureeMouvement);

Pas facile de prendre une vidéo tout en manipulant un joystick !!! :slight_smile: Mais, le montage est très bien fait, bravo Florent !

Pour ralentir le mouvement, afin qu'il soit moins brusque, il faut modifier la valeur '20' dans la ligne suivante :

unsigned int dureeMouvement = 20; // ms

Tu peux commencer par mettre 150 et voir si ça convient. Si c'est trop lent, tu diminues à 125 puis 100 (par exemple) jusqu'à obtenir ce qui te convient.

Plus le chiffre est petit, plus les mouvements seront rapides...

mais faut quand même faire la modification que je mentionne au post #37. petite erreur de copier coller de leSept :slight_smile: