Encapsulation des mouvements de base du robot dans VEXcode Pro V5

The VEX Visual Studio Code Extension has replaced VEXcode Pro V5, which is now end-of-life.

VEXcode Blocks and VEXcode Text remain actively developed and supported for all VEX platforms.

L'objectif principal est de vous montrer comment encapsuler certains des codes de mouvement fondamentaux dans des fonctions, et non pour le calcul de l'encodeur et les manipulations de mouvement.

Les exemples de fonctions de mouvement suivants vous aideront à créer votre code de mouvements de base :

  • Plus organisé
  • Plus lisible
  • Moins sujet aux erreurs

Tout d’abord, vous devrez définir les variables de base suivantes :

roue flottante = 10,16 ;
flottant WB = 36,75 ; //basé sur la configuration V5 Clawbot

Remarque : Si vous modifiez le rapport de démultiplication, le calcul suivant peut légèrement changer en fonction du rapport de démultiplication.

Ceci sera abordé dans un autre article consacré au codeur moteur :

float EncPerCm = 360/(roue* M_PI);
float EncPerDeg = WB/Roue ;

Cet exemple concerne uniquement le pivotement. Par exemple moteur droit = ​​100, moteur gauche = -100, etc.

Deuxièmement, lorsque vous examinez les exemples suivants, nous vous encourageons à rechercher la référence API en ligne pour connaître les paramètres et leurs spécifications. Visitez :https://api.vexcode.cloud/v5/html/et recherchez, par exemple,rotateToafin de vous familiariser avec les paramètres.


Exemple 1 : Encapsuler un mouvement rectiligne en fonction de différentes distances

roue flottante = 10,16 ; 
flottant WB = 36,75 ; 
float EncPerCm = 360,0 / (Roue* M_PI) ; 

void reportMotionValues(motor m, int line){

  Brain.Screen.printAt(5,line, "%8.2lf%8.2lf%8.2f", 
    m.position(rev), 
    m.position(deg)); 
}

// La distance est en centimètres
void goStraight( float distance ){
	
	LeftMotor.resetPosition();
	LeftMotor.resetRotation();
	RightMotor.resetPosition();
	RightMotor.resetRotation();
  	
	float totalEnc = distance * EncPerCm;
	
	// remarque : "deg" provient de l'espace de noms vex::. Par conséquent, vous ne devez pas 
        // créer une autre variable également nommée « deg ». 

       LeftMotor.setVelocity(50,0, pour cent);
LeftMotor.spinToPosition(totalEnc, deg, false);
RightMotor.setVelocity (50,0,
cent);
RightMotor.spinToPosition(totalEnc, deg, false); while (LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, msec); retour; } int main() { vexcodeInit(); goStraight(100.0); Brain.Screen.printAt(5,60, "Terminé"); reportMotionValues ​​(LeftMotor, 30); reportMotionValues ​​(Moteur Droit, 60); }

Exemple 2 : Encapsuler les virages à gauche en fonction de différents degrés

roue flottante = 10,16 ; 
flottant WB = 36,75 ; 
float EncPerCm = 360,0 / (Roue* M_PI) ; 
float EncPerDeg = WB / Roue ;

void turnRight (degrés flottants) {
	
	LeftMotor.resetPosition ();
	LeftMotor.resetRotation();
	RightMotor.resetPosition();
	RightMotor.resetRotation();
  	
	float totalEnc = degrés * EncPerDeg;
	
       // remarque : ce « deg » provient de l'espace de noms vex
       LeftMotor.setVelocity(100.0, percent);
LeftMotor.spinToPosition(totalEnc, deg, false);

RightMotor.setVelocity (-100,0, pour cent);
RightMotor.spinToPosition(-totalEnc, deg, false); while(LeftMotor.isSpinning() || RightMotor.isSpinning() ) wait(50, msec); retour; } int main(){ ... tourner à droite (90,0); ... }

Exemple 3 : Encapsuler la gauche et la droite dans une seule fonction

void doTurning( float Degrees ) {
	// exactement le même code que le turnRight ci-dessus
}

int main() {
...
   faireTournage(90.0); // Pivot à droite, tour
...
   faireTournage(-90.0); // Pivot gauche, tour
}

Pour une programmation plus avancée, si vous souhaitez rendre votre code beaucoup plus lisible, vous pouvez essayer ce qui suit :

#define doLeftTurn(d) doTurning(d)
#define doRigtTurn(d) doTurning(-d)

int main() {
...
   doLeftTurn(90.0);  
   doRightTurning(90.0);
...
}

#defineest appelé une expression de macro de préprocesseur. Considérez cette expression comme un symbole. Partout où ce symbole apparaît dans le code, ilsera remplacépar l'expressiondoTurning(la valeur spécifiée).

La macro du préprocesseur est un autre sujet approfondi et ne sera pas abordé dans cet article.

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: