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.
Основная цель — показать вам, как инкапсулировать некоторые фундаментальные коды движения в функции, а не для вычислений энкодера и манипулирования движением.
Следующие примеры функций движения помогут создать базовый код движений:
- Более организованный
- Более читаемый
- Меньше ошибок
Прежде всего, вам нужно будет определить следующие основные переменные:
плавающее колесо = 10,16; плавающий ВБ = 36,75; //на основе конфигурации V5 Clawbot
Примечание. Если вы измените передаточное число, следующий расчет может немного измениться в зависимости от передаточного числа.
Это будет обсуждаться в другой статье, посвященной энкодеру двигателя:
float EncPerCm = 360/(колесо* M_PI); float EncPerDeg = ББ/Колесо;
Этот образец предназначен только для поворота. Например правый мотор = 100, левый мотор = -100 и т. д.
Во-вторых, когда вы просматриваете следующие примеры, вам рекомендуется найти в Интернете справочник по API для параметров и их спецификаций. Посетите:https://api.vexcode.cloud/v5/html/и найдите, например,rotateTo, чтобы ознакомиться с параметрами.
Пример 1. Инкапсуляция прямолинейного движения на основе различных расстояний
плавающее колесо = 10,16;
плавающий ВБ = 36,75;
float EncPerCm = 360,0 / (Колесо* 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));
}
// расстояние в сантиметрах
void goStraight( float distance ){
LeftMotor.resetPosition();
LeftMotor.resetRotation();
RightMotor.resetPosition();
RightMotor.resetRotation();
float totalEnc = расстояние * EncPerCm;
// примечание: «deg» из пространства имен vex::. Поэтому вам не следует
// создавать еще одну переменную с именем «deg».
LeftMotor.setVelocity(50,0, процент);
LeftMotor.spinToPosition(totalEnc, градус, ложь);
RightMotor.setVelocity(50,0, процент);
RightMotor.spinToPosition(totalEnc, градус, ложь);
while (LeftMotor.isSpinning() || RightMotor.isSpinning() )
wait(50, мс);
возврат;
}
int main() {
vexcodeInit();
идтиПрямо(100,0);
Brain.Screen.printAt(5,60, «Готово»);
reportMotionValues(LeftMotor, 30);
reportMotionValues(RightMotor, 60);
}
Пример 2. Инкапсуляция поворотов налево на основе различных градусов
плавающее колесо = 10,16;
плавающий ВБ = 36,75;
float EncPerCm = 360,0 / (Колесо* M_PI);
float EncPerDeg = ББ/Колесо;
void TurnRight (плавающие градусы) {
LeftMotor.resetPosition();
LeftMotor.resetRotation();
RightMotor.resetPosition();
RightMotor.resetRotation();
float totalEnc = градусы * EncPerDeg;
// примечание: этот «градус» взят из пространства имен vex
LeftMotor.setVelocity(100.0, процентов);
LeftMotor.spinToPosition(totalEnc, градус, ложь);
RightMotor.setVelocity(-100,0, процент);
RightMotor.spinToPosition(-totalEnc, градус, ложь);
while(LeftMotor.isSpinning() || RightMotor.isSpinning() )
wait(50, мс);
возвращение;
}
int main(){
...
повернуть направо (90,0);
...
}
Пример 3. Инкапсулируйте левую и правую стороны в одной функции
void doTurning( float градусов ) {
// точно такой же код, как и для TurnRight выше
}
int main() {
...
сделатьTurning(90.0); // Правый поворот поворота
...
сделатьТочение(-90.0); // поворот влево
}
Для более сложного программирования, если вы хотите сделать свой код более читабельным, вы можете попробовать следующее:
#define doLeftTurn(d) doTurning(d)
#define doRigtTurn(d) doTurning(-d)
int main() {
...
сделатьLeftTurn(90.0);
doRightTurning(90.0);
...
}
#defineназывается макровыражением препроцессора. Посмотрите на это выражение как на символ. Везде, где этот символ встречается в коде, онбудет замененвыражениемdoTurning(указанное значение).
Макросы препроцессора — это отдельная обширная тема, которая не будет обсуждаться в этой статье.