Skip to main content

Lição 2: Declarações Condicionais If/Else

Nesta lição, você criará um projeto em que o robô VR derruba pelo menos dois edifícios no Dynamic Castle Crasher Playground. Um algoritmo será necessário para resolver o desafio usando loops e feedback do sensor porque o layout do Playground muda a cada reinicialização.

Exemplos de layouts dinâmicos do Castle Crasher Playground:

Três vistas de cima para baixo de layouts de amostra do Dynamic Castle Crasher Playground com o robô na mesma posição inicial e castelos em posições diferentes. Os layouts estão lado a lado, para enfatizar como os castelos mudam de posição cada vez que o Playground é redefinido.

Resultados de Aprendizagem

  • Identifique que um bloco [If then else] é um bloco C que executa os blocos dentro da ramificação If ou Else com base no valor booleano relatado.
  • Identifique que um bloco [If then else] é normalmente usado com um bloco [Repeat] ou [Forever] para verificar a condição mais de uma vez.
  • Identifique e descreva por que um bloco [If then else] é usado com loops.
  • Descreva o que faria com que uma ramificação [If then else] fosse executada em um projeto.

Como usar um bloco [If then else]

Este desafio é diferente do desafio Castle Crasher na Unidade 2. O desafio da Unidade 2 usou sequenciamento simples e comandos Drivetrain para derrubar os edifícios em um playground estático.

Um exemplo de projeto VEXcode VR da Unidade 2. O projeto começa com um bloco When started e tem 6 blocos anexados. Os blocos lêem, em ordem, Defina a velocidade de acionamento para 100%; Defina a velocidade de giro para 100%; avance para 1550 mm; vire à direita para 180 graus; avance para 700 mm; depois vire à direita para 90 graus.

Os comandos do Trem de Força por si só não serão suficientes para que o Robô de RV derrube dois ou mais edifícios devido às mudanças nos layouts do Parque Infantil Dynamic Castle Crasher. Um conjunto de comandos Drivetrain pode funcionar em um Playground, mas não em outro. Será necessário um algoritmo que use sensores e seleção. O bloco [If then else] será usado para criar um algoritmo adicionando seleção com instruções condicionais a este projeto.

Uma vista de cima para baixo do Parque Infantil Dynamic Castle Crasher, com apenas alguns castelos derrubados e outros intocados, para ilustrar como os comandos do trem de força por si só são insuficientes quando a posição dos castelos muda aleatoriamente.

Existem duas etapas principais para o robô VR derrubar edifícios no Dynamic Castle Crasher Playground.

  1. Se o Robô de RV detectar um edifício de castelo, avance em direção a ele para derrubá-lo.
    1. Ao contrário de todos os outros Playgrounds, o Dynamic Castle Crasher Playground não tem paredes. Como os edifícios são os únicos objetos no Parque Infantil Dynamic Castle Crasher, o Sensor de Distância pode ser usado para detectar edifícios.

      Uma vista de cima para baixo do Parque Infantil Dynamic Castle Crasher com o robô na posição inicial, no centro inferior do layout, com uma seta pontilhada apontando para um castelo em frente ao robô que é destacado em uma caixa vermelha. A seta indica que o sensor pode detectar o castelo como um objeto à sua frente.
  2. Se o Robô de RV não detectar uma construção de castelo, vire e verifique se há uma construção de castelo novamente.
    1. Como os edifícios são os únicos objetos no Parque Infantil Dynamic Castle Crasher, o Sensor de Distância pode ser usado para detectar edifícios do castelo.

      Uma vista de cima para baixo do Parque Infantil Dynamic Castle Crasher, com o robô na posição inicial e setas curvas em ambos os lados, indicando a necessidade de virar até que um objeto de castelo seja detectado.

Assim que as etapas 1 e 2 forem concluídas, o Robô VR pode voltar para a etapa 1 e usar o Sensor de Distância para encontrar o próximo prédio a ser derrubado.

  • Inicie um novo projeto no VEXcode VR e nomeie o projeto Unit9Lesson2.

    Caixa de nome do projeto no centro da barra de ferramentas VEXcode VR destacada com uma caixa vermelha, à esquerda do botão Select Playground. O nome do projeto diz Unidade 9 Lição 2.
  • Adicione dois blocos [Comment] ao espaço de trabalho e preencha as etapas descritas acima.

    Um novo projeto VEXcode VR com dois blocos Comment anexados ao bloco When started. Os comentários são lidos em ordem: Derrube o edifício encontrado usando o Sensor de Distância; e Vire para encontrar um edifício usando o Sensor de Distância.
  • Um bloco [If then else] pode ser usado para acionar cada uma das ações descritas acima. Cada ação depende se a condição booleana no bloco [If then else] relata VERDADEIRO ou FALSO. Adicione um bloco [If then else] abaixo dos blocos [Comment].

    O mesmo projeto VEXcode VR com um bloco If then else anexado abaixo do segundo comentário. O parâmetro da ramificação If é deixado aberto.

    Para sua informação

    O bloco [If then else] é um bloco C que aceita blocos de repórter booleano como entrada. O bloco [If then else] é uma declaração condicional que controla o fluxo de um projeto. O bloco [If then else] executará uma sequência particular de instruções se a condição for atendida e outro conjunto de instruções se a condição NÃO for atendida, "ramificando" assim o fluxo de projeto. Apenas uma ramificação no [If then else] será executada.

    Um bloco If then else da VEXcode VR Toolbox.
    • Se a condição for relatada como VERDADEIRA, os blocos dentro da ramificação If Then serão executados.
    • Se a condição for relatada como FALSA, os blocos dentro da ramificação Else serão executados.
    Um projeto VEXcode VR é usado para ilustrar a função de cada ramificação do bloco If then else. Neste projeto, o bloco If then else é anexado a um When started e lê If Front Distance found an object, then Comment - Knock over the building found using the Distance Sensor and drive forward; Else, Turn to find a building using the Distance Sensor, and Turn right. A ramificação 'If then' é rotulada Drive forward se o Sensor de Distância detectar um objeto. A ramificação 'Else' é rotulada como Vire à direita se o sensor de distância não detectar um objeto.

    Assim que todos os blocos dentro de uma das ramificações forem executados, o projeto passará para o próximo bloco fora do bloco [If then else].

  • Neste projeto, o Sensor de Distância pode ser usado para detectar edifícios no Playground. Adicione um <Distance found object> bloco ao bloco [If then else].

    O mesmo projeto VEXcode VR de antes, com um bloco de objeto Distance Found adicionado como o parâmetro da ramificação If then. O bloco If then agora lê If Front Distance found an object then.

    Para sua informação

    O <Distance found object> bloco é um bloco repórter booleano que informa se o sensor de distância encontrou um objeto na frente do robô VR. Este bloco relata VERDADEIRO quando há um objeto ou superfície dentro de 3000 milímetros (mm) do Robô VR.

    Distância encontrada objeto VEXcode VR block from the Toolbox that reads Front Distance found an object?
  • Agora, cada ramificação do bloco [If then else] precisa ser definida usando os comentários criados no início do projeto. Quando o <Distance found object> bloco relata VERDADEIRO, o robô VR deve dirigir em direção a esse edifício para derrubá-lo. Mova esse bloco [Comment] para a ramificação ‘If Then’ do projeto.

    O mesmo projeto VEXcode VR com o primeiro Comentário movido dentro do C da ramificação If then. O projeto agora lê When Started, If Front Distance found an object, then Knock over the building found using the Distance Sensor.
  • Mova o outro bloco [Comment] para a ramificação ‘Else’ do projeto para o que deve acontecer se o Robô VR NÃO detectar um edifício.

    O mesmo projeto VEXcode VR com o segundo comentário dentro do C da ramificação else. O projeto agora diz Quando iniciado, Se a Distância Frontal encontrou um objeto, então Derrube o edifício encontrado usando o Sensor de Distância; caso contrário, Vire para encontrar um edifício usando o Sensor de Distância.
  • Adicione um bloco [Drive] na ramificação ‘If Then’ do bloco [If then else].

    O mesmo projeto VEXcode VR com um bloco Drive definido para encaminhar abaixo do primeiro comentário na ramificação If then. A ramificação If then agora lê, If Front Distance found an object, then Comment Knock over the building found using the Distance sensor; Drive forward.
  • Quando o <Distance found object> bloco relatar FALSO, o Robô VR precisará se virar e encontrar um prédio no Playground. Adicione um bloco [Turn] abaixo do bloco [Comment] na ramificação ‘Else’ do bloco [If then else].

    O mesmo projeto VEXcode VR com um bloco Turn definido logo abaixo do segundo comentário na ramificação Else. A filial Else agora lê, Else, Comment of turn para encontrar um edifício usando o Sensor de Distância; em seguida, vire à direita.
  • Antes do projeto ser testado, mais um bloco precisa ser adicionado. Os blocos [If then else] só verificarão a condição uma vez antes de passar para o próximo bloco na pilha. Na Unidade 7, um bloco [Forever] foi adicionado ao projeto para instruir o Robô VR a verificar repetidamente a condição do Sensor de Down Eye. Para garantir que a condição do Sensor de Distância esteja sendo verificada repetidamente, arraste um bloco [Forever] para o espaço de trabalho ao redor do bloco [If then else].

    Uma visão geral de como adicionar um bloco Forever ao projeto para que a totalidade do bloco If then else esteja dentro do C do bloco Forever. O projeto agora lê When started, Forever, If Front distance found an object then drive forward; else turn right.
  • Abra o Dynamic Castle Crasher Playground e execute o projeto.

    Uma vista de cima do Castle Crasher Playground com três castelos intactos e dois edifícios derrubados. O robô está no canto superior direito ao lado de um castelo derrubado.
  • Depois que o Robô de RV derrubar pelo menos dois edifícios, recarregue o Playground e execute o projeto em outro layout do Dynamic Castle Crasher Playground.

    Uma vista de cima do Castle Crasher Playground com três castelos intactos e dois edifícios derrubados. O robô está no canto superior direito ao lado de um castelo derrubado.
  • Em cada execução do projeto, o Robô VR girará até que um edifício seja detectado pelo Sensor de Distância e, em seguida, dirigirá em direção a esse edifício para derrubá-lo.

    Uma vista lateral do Robô de RV empurrando uma peça do castelo para fora do Playground, mas o robô está começando a dirigir para a borda do Playground como se ele também fosse cair da borda.
  • Durante a execução do projeto, o Robô VR pode empurrar uma peça de construção até a borda e cair do Playground. Isso ocorre porque o <Distance found object> bloco ainda está relatando que há um objeto na frente do Robô VR. Quando este bloco relata VERDADEIRO, o robô VR avança. Levando o Robô VR a cair da mesa.

Selecione o botão Seguinte para continuar com o resto desta lição.