Skip to main content

Lição 2: Usando um Loop While

Nesta lição, irá criar um projeto utilizando o Sensor Bumper e o ciclo while . No mini-desafio, você aplicará essas habilidades para navegar desde o início do Labirinto da Parede até a letra ‘A‘.

O Playground do Labirinto da Parede não mostra o painel do playground. O Robô VR tem uma parede na frente que está tocando, indicando que precisará girar para poder progredir no labirinto.

Resultados de Aprendizagem

  • Identifique que os comandos que não estão em espera fazem com que o projeto continue, mesmo que o comportamento do comando ainda não esteja concluído.
  • Identifique que um comando de espera conclui o comportamento antes de continuar com o projeto.
  • Identifique que o ciclo while verificará repetidamente uma condição booleana e não passará para o comando seguinte até que a condição informe True.
  • Identifique que o ciclo while  é utilizado com comandos sem espera (por exemplo, drive) para verificar o estado do sensor.
  • Identifique que a palavra-chave not inverte o valor de uma condição booleana de Verdadeiro para Falso ou de Falso para Verdadeiro. 
  • Identifique que os comandos left_bumper.pressed e right_bumper.pressed  devolvem um valor True ou False num ciclo while .
  • Descreva como criar um projeto que tenha uma unidade de robô VR para a frente até que o sensor de pára-choques seja pressionado.

Loops While

O ciclo while aceita condições booleanas. Enquanto loops verificam repetidamente uma condição booleana e controlam o fluxo do projeto. O ciclo while continuará em ciclo enquanto a condição for& True. O ciclo while sairá do ciclo e passará para o próximo comando fora do ciclo assim que a condição for reportada como False.

A VEXcode VR Python Toolbox. O comando while é destacado em vermelho, com uma seta apontando para a interface de codificação. O código lê def main():, while condition:, wait(5, MSEC) após o comando while ser arrastado da caixa de ferramentas para a interface de codificação.

Essencialmente, um ciclo while diz ao VR Robot para continuar a executar um comportamento enquanto uma determinada condição está a ser satisfeita. A lógica é semelhante a este cenário: enquanto o sol está brilhando, vá brincar lá fora. O que faria? A condição de "o sol está brilhando" determina onde você deve estar. Quando o sol está brilhando, a condição é Verdadeira, então você vai brincar lá fora. Quando o sol se põe, essa condição é falsa, então você voltaria para dentro.

No lado esquerdo há um exemplo de leitura de código enquanto o sol está brilhando:, jogue lá fora. Após a instrução while, leia come inside. À direita está uma rapariga a andar de bicicleta do lado de fora da sua casa num dia ensolarado. De acordo com o código, ela vai brincar lá fora até que o sol não esteja mais brilhando, e depois vai entrar.

Loops While e o Problema do Labirinto da Parede

A mesma lógica se aplica ao Robô de RV no Labirinto da Parede. Enquanto o sensor de pára-choques não estiver pressionado, o robô VR deve continuar avançando. Quando é pressionado, deve parar ou girar. Usando enquanto faz loops em conjunto com comandos sem espera, como drive, podemos codificar o VR Robot para fazer exatamente isso. No entanto, os comandos do Sensor de Pára-choques utilizam a condição do Sensor de Pára-choques ser pressionado (left_bumper.pressed ou right_bumper.pressed) Para codificar o Robô VR para conduzir enquanto o Sensor de Pára-choques estiver not pressionado, precisamos usar um operador not .

def main():
	while not condition:
		wait (5, MS)

Para sua informação

Comandos de não espera e espera determinam quando o próximo comando inicia um comportamento. Comandos de espera, como drive_for e turn_for, concluem seus comportamentos antes de passar para o próximo comando no projeto. Comandos sem espera, como drive e turn, continuam a se mover para o próximo comando no projeto, mesmo que o comportamento do comando sem espera não esteja completo.

Comandos de espera

drivetrain.drive_for(PARA FRENTE, 200, MM)
drivetrain.turn_for(DIREITA, 90, GRAUS)

Comandos de Não Espera

drivetrain.drive(PARA FRENTE)
drivetrain.turn(DIREITA)

A palavra-chave Not

A palavra-chave not será normalmente utilizada com ciclos while , para fazer com que os comandos dentro do ciclo sejam executados enquanto a condição retorna False. Para utilizar o exemplo do 'sol está a brilhar', o mesmo efeito pode ser conseguido utilizando um operador e não . Enquanto o sol não estiver brilhando, entre.

À esquerda mostra um pedaço de código de exemplo, lendo enquanto não o sol está brilhando:, entre. Após o tempo, o comando é reproduzido lá fora. À direita mostra uma casa durante a noite onde a lua está fora. De acordo com esse código, enquanto o sol não estiver brilhando, ninguém vai brincar do lado de fora e ficar dentro de casa.

No Labirinto de Parede, isso é útil para que possamos codificar o Robô VR para que, enquanto o Sensor de Para-choque não for pressionado, ele avance. A condição ainda é 'se o sensor de pára-choques for pressionado', mas desta forma, quando ele relata Falso (não pressionado), o fluxo de projeto permanece no loop. Quando o sensor de pára-choques é pressionado, a condição é então True, então o projeto sairá do loop.Um diagrama de fluxo do projeto que descreve o fluxo de um projeto com um tempo não estruturado. À esquerda, o projeto na definição principal é lido como enquanto não o pára-choque esquerdo pressionado, com uma unidade para frente e aguarde 5 milissegundos de comando dentro do loop. Fora do loop há um comando de parada. À direita, o fluxo de projeto ilustrado com uma seta vermelha cíclica lê que, enquanto o pára-choques não é pressionado, essa condição retorna false e o robô avança. Em seguida, uma seta verde reta aponta para baixo, ilustrando que, quando o para-choque é pressionado, a condição retorna verdadeira e o projeto sai do circuito, fazendo com que o robô pare de dirigir.

Para sua informação

A palavra-chave not é um operador lógico que inverte o valor de um booleano. Colocar a palavra-chave não na frente de um comando que retorna um valor booleano inverterá Verdadeiro para Falso e Falso para Verdadeiro. Por exemplo, imagine que o Sensor do Para-choque Esquerdo no Robô VR é pressionado e o  comando left_bumper.pressed retorna True. A palavra-chave not irá inverter o valor booleano e fazer com que esta expressão devolva False.

not left_bumper.pressed()

Dependendo dos dados do sensor que está a utilizar, a palavra-chave not pode ser necessária para fazer com que um robô de RV execute os comportamentos desejados. 

def main():
	while not left_bumper.pressed():
		drivetrain.drive(FORWARD)
		wait(5, MSEC)
	drivetrain.stop()

Construir um Projecto com um Loop Enquanto e o Sensor Bumper

Nomeie e guarde o projeto

  • Abra um novo projeto de texto e selecione o Wall Maze Playground quando solicitado. A peça de seleção Parede Labirinto Playground lê Parede Labirinto na parte inferior e mostra o labirinto acima.
  • Nomeie o projeto Unit4Lesson2.A barra de ferramentas VEXcode VR. O Nome do Projeto no meio da Barra de Ferramentas diz Unidade 4 Lição 2 e é destacado com uma caixa vermelha.

     

  • Arraste ou digite o comando while na área de trabalho para substituir o comando Drivetrain que é preenchido automaticamente como parte de um novo projeto de texto. Note que existe um comando a wait dentro do ciclo. Não remova o comando wait , isto irá garantir que o VR Robot executa o projeto corretamente. O seu projeto deve ter este aspeto:

    def main():
    	while condition:
    		wait(5, MS)
  • Introduza um operador e não após o 'while' no comando while . O seu projeto deve agora ter este aspeto:

    def main():
    	while not condition:
    		wait(5, MS)
  • Arraste ou digite o  comando left_bumper.pressed na 'condição' do loop while. Os comandos dentro do loop serão executados enquanto a condição não for True, ou seja, quando o Sensor do Para-choque Esquerdo não for pressionado. O seu projeto deve agora ter este aspeto:

    def main():
    	while not left_bumper.pressed():
    		wait(5, MSEG)
  • Dentro do ciclo while , arraste ou digite o comando drive. Certifique-se de que o comando drive e o comando wait estão corretamente indentados no ciclo while , para que o ciclo seja executado como planeado. Você pode usar as linhas de orientação como uma ajuda visual. O seu projeto deve agora ter este aspeto:

    def main():
    	while not left_bumper.pressed():
    		drivetrain.drive(FORWARD)
    		wait(5, MSEC)
  • Arraste ou digite um comando stop fora do ciclo while . Certifique-se de que o comando stop está alinhado com o ciclo while e não recuado, de modo a que corra fora do ciclo como pretendido. Você pode usar as linhas de orientação como uma ajuda visual.  O seu projeto deve agora ter este aspeto:

    def main():
    	while not left_bumper.pressed():
    		drivetrain.drive(FORWARD)
    		wait(5, MSEC)
    	drivetrain.stop()
  • Abra a janela do playground se ainda não estiver aberta. Certifique-se de que o Wall Maze Playground abre. 
  • Executar o projeto.
  • Observe o robô VR dirigir a partir do início do labirinto de parede e pare quando o sensor de pára-choques for pressionado pela parede.
  • O comando Drive permite que o Robô VR continue avançando enquanto verifica a condição do Sensor do Para-choque com o comando Left Bumper Pressed (Para-choque Esquerdo Pressionado). Assim que comando left_bumper.pressed for reportado como True, o robô VR passará para o próximo comando fora do loop e parará de dirigir.

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