Aula 3 (Extra) — Funções em MicroPython
Duração estimada: 20 minutos
Quando usar: leia esta aula antes da Aula 3 se o código comdefpareceu confuso.
Por que esta aula existe?
Na Aula 3 o código usa uma função chamada escrever_palavra(). Se você nunca criou uma função em Python ou MicroPython, esta aula explica o conceito com exemplos simples antes de você voltar para a Aula 3.
1. O que é uma função?
Uma função é um bloco de código com um nome. Você o escreve uma vez e pode executá-lo quantas vezes quiser, só chamando o nome.
Sem função — código repetido:
# acender LED
led.value(1)
time.sleep(0.5)
led.value(0)
# acender LED de novo
led.value(1)
time.sleep(0.5)
led.value(0)
# acender LED mais uma vez
led.value(1)
time.sleep(0.5)
led.value(0)
Com função — código escrito uma vez, chamado três vezes:
def piscar():
led.value(1)
time.sleep(0.5)
led.value(0)
piscar() # primeira vez
piscar() # segunda vez
piscar() # terceira vez
2. Estrutura de uma função
def nome_da_funcao(parametro):
# corpo da função — indentado com 4 espaços
instrucao_1
instrucao_2
| Parte | O que é |
|---|---|
def |
palavra reservada que inicia a definição |
nome_da_funcao |
nome que você escolhe — use letras minúsculas e _ |
(parametro) |
valor que a função recebe para trabalhar — pode ser omitido com () |
| corpo indentado | as instruções que a função executa |
3. Função sem parâmetro
from machine import Pin
import time
led = Pin(2, Pin.OUT)
def acender():
led.value(1)
def apagar():
led.value(0)
# chamadas
acender()
time.sleep(1)
apagar()
A função não precisa de nenhuma informação externa — ela sempre faz a mesma coisa.
4. Função com parâmetro
Um parâmetro é uma variável que a função recebe no momento em que é chamada:
def piscar_n_vezes(n):
for _ in range(n):
led.value(1)
time.sleep(0.2)
led.value(0)
time.sleep(0.2)
piscar_n_vezes(3) # pisca 3 vezes
piscar_n_vezes(5) # pisca 5 vezes
Quando você chama piscar_n_vezes(3), o valor 3 vai para dentro da função como n.
5. A função da Aula 3 — explicada linha a linha
Na Aula 3 você encontrará esta função:
def escrever_palavra(palavra):
for i, pino in enumerate(pinos):
bit = (palavra >> i) & 1
pino.value(bit)
Traduzindo cada linha:
| Linha | Significado |
|---|---|
def escrever_palavra(palavra): |
define a função; recebe um número inteiro chamado palavra |
for i, pino in enumerate(pinos): |
percorre a lista pinos; i é o índice (0,1,2,3) e pino é cada objeto Pin |
bit = (palavra >> i) & 1 |
extrai o bit na posição i da palavra |
pino.value(bit) |
aplica esse bit (0 ou 1) no pino correspondente |
Quando você chama escrever_palavra(0b1010), o número 0b1010 entra como palavra e a função distribui seus bits pelos LEDs.
6. Experimento
Monte o circuito da Aula 1 (1 LED no GPIO2) e execute:
from machine import Pin
import time
led = Pin(2, Pin.OUT)
def definir_led(valor):
"""Liga o LED se valor=1, desliga se valor=0."""
led.value(valor)
# teste
definir_led(1) # acende
time.sleep(1)
definir_led(0) # apaga
time.sleep(1)
# chamando com variável
for v in [1, 0, 1, 0, 1]:
definir_led(v)
time.sleep(0.3)
Perguntas:
a) O que acontece se você chamar definir_led(5)? Teste e registre:
b) Reescreva o laço for acima sem usar a função definir_led — usando led.value() diretamente. Qual versão você considera mais legível?
Pronto — volte para a Aula 3
Agora que você entende o que def faz e como passar um parâmetro, o código da Aula 3 vai fazer sentido imediato.