Desbravando o PyBricks: Programando o SPIKE Prime em Python do Zero
Aula

Objetivo da aula

  • Compreender o conceito de funções em Python e sua equivalência com os MyBlocks do SPIKE Prime.
  • Aprender a trabalhar com entradas (inputs) e saídas (outputs) de funções.
  • Escrever funções que possam ser reutilizadas em diferentes missões e partes do robô.
  • Aplicar boas práticas para modularizar o código no PyBricks.

1. Das MyBlocks às Funções em Python

No aplicativo do SPIKE Prime, usamos os MyBlocks para criar “blocos personalizados” que agrupam vários comandos.
No PyBricks, fazemos exatamente a mesma coisa — mas com mais poder e flexibilidade — usando funções.

Assim como um MyBlock, uma função pode:

  • Receber informações (entradas);
  • Executar uma sequência de comandos;
  • Retornar um resultado (saída).

A grande diferença é que, no PyBricks, isso é feito por texto e com total controle sobre a lógica interna.

2. Estrutura básica de uma função

A palavra-chave def (de “define”) é usada para criar uma função.
Veja o formato geral:

def nome_da_funcao(parametros):
    # Ações da função
    ...
    return valor

3. Input e Output — Entradas e Saídas

Funções podem receber valores de entrada (input) e devolver resultados de saída (output).

  • Input (entrada): são as variáveis que a função recebe — ex.: velocidade, ângulo, distância.
  • Output (saída): é o valor que a função retorna após processar as informações — ex.: leitura de um sensor, resultado de um cálculo.

No SPIKE, isso seria equivalente a MyBlock com parâmetros e saída.

Exemplo 1 – Função com entrada e sem saída

Como um MyBlock que apenas executa uma tarefa.

def mover(motorE, motorD, velocidade, angulo):
    motorE.run_angle(velocidade, angulo)
    motorD.run_angle(velocidade, angulo)

# Chamada
mover(motor_esquerdo, motor_direito, 400, 360)

Exemplo 2 – Função com entrada e saída

Como um MyBlock que devolve um valor (por exemplo, a distância medida).

def medir_distancia(sensor):
    leitura = sensor.distance()
    return leitura

# Chamada e uso do resultado:
distancia = medir_distancia(sensor_ultrassonico)

if distancia < 100:
    hub.light.on(Color.RED)
else:
    hub.light.on(Color.GREEN)

Explicando o fluxo:

  • sensor → é a entrada (input) da função.
  • leitura → é a variável processada dentro da função.
  • return leitura → é a saída (output) devolvida ao programa.

Assim como nos MyBlocks que retornam valores (por exemplo, cor ou distância), o Python também “envia de volta” o resultado para ser usado em outro ponto do programa.

4. Comparando MyBlocks e Funções

No SPIKE App No PyBricks (Python)
MyBlock “Ir Reto” def ir_reto(...):
Entrada “Velocidade” e “Ângulo” Parâmetros velocidade e angulo
Bloco executa o movimento Corpo da função com comandos do motor
Bloco devolve a distância lida return leitura

5. Funções com valores padrão

Assim como no MyBlock é possível deixar uma entrada com valor “pré-definido”, no Python usamos valores padrão nos parâmetros:

def ir_reto(mE, mD, angulo=360, vel=400):
    mE.run_angle(vel, angulo)
    mD.run_angle(vel, angulo)

# Chamadas possíveis:
ir_reto(mE, mD)             # usa 360° e 400 como padrão
ir_reto(mE, mD, 720, 500)   # sobrescreve padrões

6. Criando funções reutilizáveis de verdade

O segredo está em criar pequenas funções que resolvem partes específicas da missão — e depois combiná-las.

def alinhar(mE, mD):
    mE.run_angle(300, 180)
    mD.run_angle(300, 180)

def entregar_objeto(mE, mD, sensor):
    alinhar(mE, mD)
    if medir_distancia(sensor) > 200:
        ir_reto(mE, mD, 720, 400)
    else:
        hub.light.on(Color.RED)

Assim como um MyBlock que “chama outro MyBlock”, no PyBricks também podemos chamar funções dentro de funções.

7. Analogia simples

  • Função = MyBlock
  • Parâmetros = Entradas do MyBlock
  • Return = Saída do MyBlock

Isso ajuda os alunos que estão migrando da programação por blocos a entenderem que o raciocínio é o mesmo — apenas mais livre e poderoso.

Atividade prática

  1. Crie uma função ler_distancia() que devolva o valor lido do sensor ultrassônico.
  2. Crie uma função avancar() com parâmetros velocidade e angulo.
  3. Crie uma função executar_missao() que use ambas — o robô só avança se a distância for maior que 200 mm.
  4. Teste diferentes valores de entrada e observe o comportamento do robô.