Programmation trim pour TX 2.4ghz via pad Xbox360

Bonjour à tous,

Je débute dans la programmation de l'arduino, et je me suis lancé dans la conversion d'un pad xbox360 en télécommande de voiture R/C en utilisant un shield USB+arduino mega. J'ai pas mal progressé, j'arrive à piloter les servos de la voiture.

Par contre je bloque sur la création d'une fonction trim:

  • Range Pad: 0 - 1023

Le truc est que si je fais bêtement ValeurPad+trim cela modifie les fins de courses. Je souhaiterai que la course totale reste entre 0-1023 et avoir uniquement le centre qui bouge. J'ai essayé avec la fonction Map mais je n'y arrive pas... =(

Ce que je cherche à faire:

  • Avec range Pad: 0 - 1023 et trim=0 -> Valcentre = 1023/2
  • Avec range Pad: 0 - 1023 et trim=+50 (exemple) -> Valcentre = 1023/2 +50 mais range toujours entre 0-1023 et en utilisant toute la course du pad
    Un dessin plutot qu'un long discours:

Est ce que je peux faire ça avec une fonction ?

Merci pour votre aide,

Marc

starefly:
Ce que je cherche à faire:

  • Avec range Pad: 0 - 1023 et trim=0 -> Valcentre = 1023/2
  • Avec range Pad: 0 - 1023 et trim=+50 (exemple) -> Valcentre = 1023/2 +50 mais range toujours entre 0-1023 et en utilisant toute la course du pad
    Un dessin plutot qu'un long discours:

Est ce que je peux faire ça avec une fonction ?

Merci pour votre aide,

Marc

Bonsoir
je ne suis pas sur d'avoir bien compris ta question
mai si tu veux ajouter/retrancher une valeur de trim sur une gamme centrée à 512 +/- trim tu peux mapper les 2 zones
pour un trim de +50 tu test si tu es =< à 562 (512+50)
X= map(val, 0, 562, 0, 512);
si tu es > 562
X= map(val, 563, 1023, 513, 1023);

Bonjour,

J'ai essayé quelque chose d'équivalent mais ça ne marchait pas comme je voulais.

Merci pour la suggestion.

Question débile:

je fais l'opération suivante :
int robert;
robert=511*512/511;
Serial.println(robert);

et à l'écran en tant que résultat j'ai "-1" ??? A quoi est-ce du ?

Bonsoir,

starefly:
je fais l'opération suivante :
int robert;
robert=511*512/511;
Serial.println(robert);
et à l'écran en tant que résultat j'ai "-1" ??? A quoi est-ce du ?

Dépassement de capacité. Un int est compris entre -32768 et +32767.
511*512 = 261632 ce qui est largement au-dessus de la plage des int.
Par contre si tu utilises un long qui est dans la plage -2147483648 et +2147483647 alors tu devrais trouver un résultat exploitable (cad 512).
:wink:

long robert;
robert=511*512/511;
Serial.println(robert);

Par contre :

int robert;
robert=511/511*512;
Serial.println(robert);

Fonctionne
Il y a lieu de faire une petite révision sur les ordres de priorité des opérations
@+