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