Logique : gérer mouvement de 2 moteurs avec des "ou" et "et"

Résolu/Fermé
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 - Modifié par poparnassus le 27/04/2016 à 17:16
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 - 27 avril 2016 à 18:04
Bonjour,

j'ai besoin de réaliser un code en C pour gerer deux moteur (des chenilles), la finalité de ce code

JDX_Mx , JDY_Mx , JGX_Mx , JGY_Mx qui represente les valeurs de mes joystique en pourcentage.

L'objectif est que je dois envoyer deux variables à un robot,
Puissance roue gauche : PRoueG
Puissance roue droite : PRoueD

// Une simple rotation, à gauche ou à droite sans avancer ni reculer.

            if((input->JGY_Mx == 0) && (input->JDX_Mx < 0)) //Rotation Gauche Sans Avance ni reculer
            {
                input->PRoueG = input->JDX_Mx;
                input->PRoueD = -input->JDX_Mx;
            }
            else if ((input->JGY_Mx == 0) && (input->JDX_Mx > 0))//Rotation Droite Sans Avance ni reculer
            {
                input->PRoueG = input->JDX_Mx;
                input->PRoueD = -input->JDX_Mx;
            }

            printf("Roue gauche: %d\n\n",input->PRoueG);
            printf("Roue droite: %d\n\n",input->PRoueD);


//Ca fonctionne j'obtiens bien des valeurs opposé pour PRoueG et PRoueD si mon joystick est à mis parcour genre, 50% à gauche j'obtiens biens PRoueG=-50 et PRoueD=50


Probleme j'arrive pas a inclure les mouvement avancer et reculer

j'ai essayer ca mais ca marche pas:

            if ((input->JGY_Mx > 0) && (input->JDX_Mx < 0)) // Avancer et tourner a gauche
            {
                input->PRoueG = 100 + input->JDX_Mx;
                input->PRoueD = input->JGY_Mx;
            }
            else if ((input->JGY_Mx > 0) && (input->JDX_Mx > 0)) // Avancer et tourner a droite
            {
                input->PRoueG = input->JGY_Mx ;
                input->PRoueD = 100 - input->JGY_Mx ;
            }


            if ((input->JGY_Mx < 0) && (input->JDX_Mx < 0)) // reculer et tourner a gauche
            {
                input->PRoueG = input->JGY_Mx - (input->JGY_Mx - input->JDX_Mx);
                input->PRoueD = input->JGY_Mx;
            }
            else if ((input->JGY_Mx < 0) && (input->JDX_Mx > 0))
            {
                input->PRoueG = input->JGY_Mx ;
                input->PRoueD = input->JGY_Mx - (input->JGY_Mx - input->JDX_Mx);
            }

            printf("Roue gauche: %d\n\n",input->PRoueG);
            printf("Roue droite: %d\n\n",input->PRoueD);

je travaille avec l'axe Y joystique gauche pour géréé la puissance du courant envyer dans les moteurs, et l'axe X joystick droit pour géré mes mouvement gauche et droit.

j'arrive pas à faire tenir compte le fais que quand je deplace mon axe X à droite de 30%, par ex, et que mon axe Y joy gauche est à 25% par ex, les 30% de x qui represente une reduction de 30% de la puissance qui est appliqué donc 25 % (axe y joy gauche)

Et de plus, y a certain incoherence dans mes conditions ca marche pas bien

1 réponse

poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 30
27 avril 2016 à 18:04
1er probleme dans Rotation Droite Sans Avance ni reculer, jobtien PRoueG = 0 et PRoueD =100, alors que je devrais avoir PRoueG= -100

2eme probleme dans Avancer et reculer, si j'avance 20 % et tourne de plus de 20% mes valeurs passe en negatif et je ne leveux pas

            if((input->JGY_Mx == 0) && (input->JDX_Mx == 0)) //mise à zero
            {
                input->PRoueG = 0;
                input->PRoueD = 0;
            }


            if((input->JGY_Mx == 0) && (input->JDX_Mx < 0)) //Rotation Gauche Sans Avance ni reculer
            {
                input->PRoueG = input->JDX_Mx;
                input->PRoueD = -input->JDX_Mx;
            }
            else if ((input->JGY_Mx == 0) && (input->JDX_Mx > 0))//Rotation Droite Sans Avance ni reculer
            {
                input->PRoueG = input->JDX_Mx;
                input->PRoueD = -input->JDX_Mx;
            }

            if((input->JGY_Mx > 0) && (input->JDX_Mx == 0)) // avancer
            {
                input->PRoueG =input->JGY_Mx;
                input->PRoueD = input->JGY_Mx;
            }
            else if ((input->JGY_Mx < 0)&&(input->JDX_Mx == 0))
            {
                input->PRoueG = input->JGY_Mx;
                input->PRoueD = input->JGY_Mx;
            }

            //Avancer
            if((input->JGY_Mx > 0)&&(input->JDX_Mx < 0)) // tourner a gauche
            {
                input->PRoueG = input->JGY_Mx + input->JDX_Mx;
                input->PRoueD = input->JGY_Mx;
            }
            else if (input->JDX_Mx > 0) //tourner a droite
            {
                input->PRoueG = input->JGY_Mx ;
                input->PRoueD = input->JGY_Mx - (input->JDX_Mx);
            }

            //reculer
            if ((input->JGY_Mx < 0) && (input->JDX_Mx < 0)) // tourner a gauche
            {
                input->PRoueG = input->JGY_Mx - input->JDX_Mx;
                input->PRoueD = input->JGY_Mx;
            }
            else if ((input->JGY_Mx < 0) &&(input->JDX_Mx > 0)) //tourner a droite
            {
                input->PRoueG = input->JGY_Mx ;
                input->PRoueD = input->JGY_Mx +  (input->JDX_Mx);
            }

            printf("Roue gauche: %d\n\n",input->PRoueG);
            printf("Roue droite: %d\n\n",input->PRoueD);
0