Código de controlador personalizado em VEXcode EXP

O uso do Controlador pode facilitar a condução e movimentação do robô para concluir uma tarefa. No entanto, existem limitações no uso do programa Drive e, dependendo da construção do seu robô ou da tarefa em questão, você pode querer controles diferentes. Codificar o Controlador permite que você otimize o Controlador para que ele se ajuste melhor ao seu robô e à tarefa em questão. Existem várias maneiras de codificar o Controlador no VEXcode EXP. Cada um tem suas vantagens e limitações, e alguns métodos são mais adequados para determinadas situações, dependendo do resultado desejado.

Este artigo orientará você por três opções diferentes para codificação personalizada do controlador no VEXcode EXP. Cada método será descrito com suas vantagens, limitações e um exemplo de caso de uso para ajudar a orientá-lo na escolha de um método. Para os fins deste artigo, todos os exemplos de código mostrados foram criados para o Clawbot. No entanto, os mesmos conceitos podem ser aplicados a inúmeras outras compilações encontradas em builds.vex.come compilações personalizadas.

Opção 1: Atribuir botões na configuração do dispositivo

Essa opção é ótima quando você está usando uma versão padrão, como BaseBot ou Clawbot, e deseja começar a trabalhar rapidamente.

Esta opção permite atribuir motores, um sistema de transmissão ou grupos de motores a botões no controlador na configuração do dispositivo. Para obter mais informações sobre como atribuir botões ao controlador na configuração do dispositivo, este artigo.

Captura de tela 2023/07/26 às 15h49min.png

Resumo da Opção 1: Atribuição de Botões na Configuração do Dispositivo

Vantagens

Limitações

Situação de exemplo

  • Configuração rápida sem necessidade de codificação
  • Método mais simples
  • Facilmente ajustável
  • Pode atribuir motores individuais, um sistema de transmissão padrão e grupos de motores aos botões
  • As atribuições de botões são limitadas ao número de botões no controlador
  • O trem de força não pode exceder 4 motores ou ser personalizado (somente um acionamento padrão é suportado, não um acionamento H, holonômico ou outro trem de força personalizado)
  • Manipular uma construção padrão, como BaseBot, Clawbot ou uma simples modificação dessas construções padrão. Por exemplo, um BaseBot com uma entrada acoplada na frente controlada por um grupo motor.
  • Manipular quais botões correspondem a diferentes comportamentos no robô rapidamente, sem muita codificação

Opção 2: usando um loop eterno

Se você estiver usando uma compilação personalizada em vez de uma compilação padrão, ou deseja ter mais personalização em seu controlador, esta opção é uma boa opção. Usar um loop Forever é uma ótima introdução para criar código personalizado para seu Controller.

Esta opção coloca todas as condições do Controlador e seus botões associados em um loop Forever. Isso proporciona mais flexibilidade, especialmente com designs de construção personalizados, mas também requer alguma experiência em codificação. Uma consideração ao usar esta opção, entretanto, é a duração e a complexidade do seu projeto. Quanto mais condições forem adicionadas, maior será a pilha de códigos. Isso significa que vários blocos devem ser executados em ordem e, quando há muitos blocos, isso pode retardar a execução do projeto. A execução mais lenta do projeto pode criar um atraso entre pressionar os botões do Controlador e ver o comportamento do robô.

O exemplo específico mostrado abaixo é uma maneira de usar um loop Forever com um robô de design personalizado (como um robô com transmissão personalizada) para conduzir o robô e manipular a garra e o braço para interagir com objetos.

Captura de tela 2023-07-26 às 16h07.png

Baixe o arquivo de projeto VEXcode EXP "Opção 2" >

Explicação do código da opção 2.

Parte do código

Explicação

Defina a parada do ArmMotor para segurar e configure a parada do ClawMotor para segurar

Um Clawbot foi usado para este exemplo de código. Quando os botões do controlador são usados ​​para levantar e abaixar o braço, assim que o botão é liberado, devido à gravidade o braço cairá novamente. Definir o braço e a garra para “segurar” garantirá que o braço e a garra permanecerão no lugar mesmo depois que os botões do controlador forem liberados.

Captura de tela 2023/07/26 às 16:07:59.png Controlador EXP com Labels.png

Um Clawbot foi usado para este exemplo de código. Quando os botões do controlador são usados ​​para levantar e abaixar o braço, assim que o botão é liberado, devido à gravidade o braço cairá novamente. Definir o braço e a garra para “segurar” garantirá que o braço e a garra permanecerão no lugar mesmo depois que os botões do controlador forem liberados.

Um loop Forever é usado para verificar continuamente quais botões estão sendo pressionados no controlador.

Os blocos [Set motor speed] são usados ​​para definir a velocidade do motor para a posição atual do controlador ao longo dos eixos 2 e 3. Isso é o equivalente a colocar um carro em movimento. Isso não necessariamente faz o carro se mover, apenas o define.

Cada eixo do joystick retorna um valor entre -100 e +100 e retorna um valor zero quando centralizado. Isto significa então que os eixos do joystick, quando pressionados, equivalem a -100% a 100%. Quanto mais próximo de 100 ou -100 os eixos forem empurrados, mais rápido o motor girará.

O bloco [Spin] é então usado para realmente mover o motor. Isso equivale a pisar no acelerador do carro depois que a direção for definida. Isto permite que cada motor seja controlado por um dos quatro eixos do Controlador.

Captura de tela 2023-07-26 às 16h09.52.png

Um Clawbot foi usado para este exemplo de código. Quando os botões do controlador são usados ​​para levantar e abaixar o braço, assim que o botão é liberado, devido à gravidade o braço cairá novamente. Definir o braço e a garra para “segurar” garantirá que o braço e a garra permanecerão no lugar mesmo depois que os botões do controlador forem liberados.

O bloco [If then else if then else] é usado para mapear certos comportamentos para botões sendo pressionados ou liberados no Controlador. Nesta seção do código, as condições definidas são se os botões Para cima ou Para baixo forem pressionados. Nesse caso, certos comportamentos acontecerão, como levantar e abaixar o braço. Há também a parte else da condição: se nenhum botão for pressionado, o braço será configurado para parar de se mover.

Observe que a seção de código a seguir no projeto do Claw segue a mesma explicação.

Resumo da Opção 2: Usando um Loop Forever

Vantagens

Limitações

Situação de exemplo

  • Pode acomodar construções personalizadas, especialmente transmissões com mais de 4 motores
  • Pode atribuir vários comportamentos a um único botão
  • Pode atribuir comportamentos a diferentes eixos no controlador (em oposição às únicas opções de Left Arcade, Right Arcade, Split Arcade e Tank Drive na configuração do dispositivo)
  • Requer algum conhecimento de codificação (condicionais, loops e conhecimento dos botões/joysticks no controlador)
  • Potencial para execução mais lenta do projeto ou atraso no tempo de resposta do botão. Como todos os comandos estão contidos em um único loop Forever, a execução do código pode ser lenta dependendo das condições definidas e do comprimento do código.
  • Usando o controlador com um robô personalizado, especialmente com um sistema de transmissão não padrão
  • Ao querer atribuir vários comportamentos a um único botão. Por exemplo, quando o botão para cima é pressionado, a garra pode abrir, avançar e fechar em torno de um objeto.

Opção 3: usando eventos

Se você deseja muita customização para seu Controller, Usar Eventos é a melhor opção para você. O pressionamento de um botão pode acionar vários comportamentos do robô, como pressionar um botão para abrir a garra, levantar o braço e avançar por uma distância definida. Tentar codificar vários comportamentos por botão dentro de um loop Forever faria com que a execução do projeto ficasse drasticamente lenta – o uso de Eventos permite que você faça isso de forma mais eficaz.

Esta opção usa Eventos para dividir o fluxo do projeto. Isso é semelhante ao uso de um loop Forever, mas permite que o código seja mais organizado, para que a execução do botão tenha um tempo de resposta mais rápido. Tempo de resposta mais rápido significa que você não verá um atraso entre pressionar os botões do controlador e ver o comportamento do robô. Este exemplo mostra os mesmos comportamentos do projeto anterior, mas feito usando Events em vez do Forever Loop.

Captura de tela 2023-07-26 às 16h31.57.png

Baixe o arquivo de projeto VEXcode EXP "Opção 3" >

Explicação do código da opção 3.

Parte do código

Explicação

Defina a parada do ArmMotor para segurar e configure a parada do ClawMotor para segurar

Um Clawbot foi usado para este exemplo de código. Quando os botões do controlador são usados ​​para levantar e abaixar o braço, assim que o botão é liberado, devido à gravidade o braço cairá novamente. Definir o braço e a garra para “segurar” garantirá que o braço e a garra permanecerão no lugar mesmo depois que os botões do controlador forem liberados.

Captura de tela 2023/07/26 às 16h33min.png Controlador EXP com Labels.png

Um Clawbot foi usado para este exemplo de código. Quando os botões do controlador são usados ​​para levantar e abaixar o braço, assim que o botão é liberado, devido à gravidade o braço cairá novamente. Definir o braço e a garra para “segurar” garantirá que o braço e a garra permanecerão no lugar mesmo depois que os botões do controlador forem liberados.

{When controller axis} Blocos de eventos são usados ​​para acionar certos comportamentos quando um dos quatro eixos do Controlador é alterado usando os joysticks.

Os blocos [Set motor speed] são usados ​​para definir a velocidade do motor para a posição atual do controlador ao longo dos eixos A e D. Isso é o equivalente a colocar um carro em movimento. Isso não necessariamente faz o carro se mover, apenas o define.

Cada eixo do joystick retorna um valor entre -100 e +100 e retorna um valor zero quando centralizado. Isto significa então que os eixos do joystick, quando pressionados, equivalem a -100% a 100%. Quanto mais próximo de 100 ou -100 os eixos forem empurrados, mais rápido o motor girará.

O bloco [Spin] é então usado para realmente mover o motor. Isso equivale a pisar no acelerador do carro depois que a direção for definida. Isto permite que cada motor seja controlado por um dos quatro eixos do Controlador.

Captura de tela 26/07/2023 às 16h33.png

Um Clawbot foi usado para este exemplo de código. Quando os botões do controlador são usados ​​para levantar e abaixar o braço, assim que o botão é liberado, devido à gravidade o braço cairá novamente. Definir o braço e a garra para “segurar” garantirá que o braço e a garra permanecerão no lugar mesmo depois que os botões do controlador forem liberados.

{When controller axis} Blocos de eventos são usados ​​para mapear certos comportamentos de botões pressionados ou liberados no Controlador. Nesta seção do código, as condições definidas são se os botões Para cima ou Para baixo forem pressionados. Nesse caso, certos comportamentos acontecerão, como levantar, abaixar ou parar o braço.

Observe que a última seção do código do projeto para o Claw segue a mesma explicação.

Resumo da Opção 3: Usando Eventos

Vantagens

Limitações

Situação de exemplo

  • Pode acomodar construções personalizadas, especialmente transmissões com mais de 4 motores
  • Pode atribuir vários comportamentos a um único botão
  • Pode atribuir comportamentos a diferentes eixos no controlador (em oposição às únicas opções de Left Arcade, Right Arcade, Split Arcade e Tank Drive na configuração do dispositivo)
  • Execução de código mais rápida e, portanto, capacidade de resposta do botão (já que cada condição é chamada separadamente e não incorporada em uma única pilha de código)
  • Requer o máximo conhecimento de codificação das opções (condicionais, loops, eventos e conhecimento dos botões/joysticks no controlador)
  • Usando o controlador com um robô personalizado, especialmente com um sistema de transmissão não padrão
  • Quando quiser atribuir vários comportamentos a um único botão sem atraso. Por exemplo, quando o botão para cima é pressionado, a garra pode abrir, avançar e fechar em torno de um objeto.

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

Last Updated: