Introdução
O timer “one-shot” (em tradução livre, “temporizador de único disparo”) é um recurso usado para executar uma ação após um certo período de tempo ter decorrido e, em seguida, parar. Portanto, ao contrário de um timer periódico, que se repete em intervalos regulares, o timer “one-shot” é acionado uma única vez.
Ao utilizar o MicroPython no Raspberry Pi Pico, é possível utilizar o timer “one-shot” através da biblioteca “machine” que vem com o MicroPython. Neste artigo, veremos algumas aplicações desse timer.
Ligar um LED com Timer one-shot
Materiais necessários
Para esse projeto vamos precisar de:
- 1 x Raspberry Pi Pico
- 1 x Protoboard
- 1 x Led
- 1 x Resistor de 1KΩ
- 1 x botão de pressão (push-button)
- 1 x Cabo micro USB
- Jumper
Circuito
E a montagem será a mesma explicada no artigo GPIO | Entradas Digitais, cuja configuração pode ser observada na Figura abaixo.
Programa para Ligar LED com timer one-shot
Como nos demais programas feitos, vamos começar com from machine import Pin para acessar os pinos da placa. Além disso, vamos adicionar a biblioteca “Timer”.
A definição do timer foi feita através da variável “temporizador” e a sua configuração foi definindo o período como 3000 ms, o modo do timer como “one-shot” e chamando a função de callback, com o nome “desliga”.
A função callback é chamada quando um evento específico ocorre ou quando uma determinada condição é atendida. No programa que estamos construindo, a função callback “desliga” é chamada ao fim do período de 3 segundos. No corpo dessa função, há uma lógica que define o estado do pino GPIO15 como desligado para apagar o LED.
from machine import Pin, Timer
led_red= Pin(15,Pin.OUT) #definindo o pino 15 como saída
temporizador = Timer()
def desliga (timer): #definindo função callback
global led_red
led_red.off()
print("led desligado")
print("Iniciando o timer")
temporizador.init(period = 3000, mode = Timer.ONE_SHOT, callback = desliga)
led_red.on()Para ter certeza da ordem e execução da lógica escrita, foram colocados “prints” em pontos estratégicos do código. Assim, sabemos se a operação foi realizada conforme esperado.
Nesse caso, diferente do timer periódico, o LED irá desligar após o tempo definido e será somente aceso outra vez se a função `temporizador.init` for chamada novamente.
Se você não possui os componentes físicos para o projeto, é possível testar o programa utilizando o simulador Wokwi. Abaixo temos a simulação virtual:
Programa para ligar LED com timer one-shot e botão
Nesta segunda versão do programa, utilizamos as mesmas configurações do LED, porém com um novo comportamento. Criaremos um loop principal que verificará constantemente o estado do botão. Se o botão for pressionado (valor lógico baixo), o temporizador é inicializado com um período de 5000 milissegundos (5 segundos) no modo “one-shot”, chamando a função de callback para desligar o LED quando o temporizador encerrar a contagem.
Em seguida, entramos em um segundo loop while que aguarda até que o botão seja liberado (valor lógico alto). Durante cada iteração desse loop, o programa pausa por 100 milissegundos usando a função time.sleep_ms(100) antes de verificar novamente o estado do botão. Isso faz com que o programa permita que o LED seja ligado novamente somente quando o botão for solto e pressionado novamente.
from machine import Pin, Timer
import time
led_red= Pin(15,Pin.OUT) #definindo o pino 15 como saída
botao= Pin(16,Pin.IN,Pin.PULL_UP) #definindo o pino 16 como entrada
temporizador = Timer()
def desliga (timer): #definindo função callback
global led_red
led_red.off()
print("led desligado")
while True:
if not botao.value():
temporizador.init(period = 5000, mode = Timer.ONE_SHOT, callback = desliga)
led_red.on()
print("led ligado")
while not botao.value():
time.sleep_ms(100)
Se você não possui os componentes físicos para o projeto, é possível testar o programa utilizando o simulador Wokwi. Abaixo temos a simulação virtual:
Conclusão
Nesse artigo exploramos a criação de timers do tipo one-shot no Raspberry Pi Pico. Os timers one-shot são ferramentas poderosas para adicionar funcionalidades temporizadas, garantindo maior controle sobre eventos e permitindo a criação de aplicações mais eficientes aos projetos com o Raspberry Pi Pico.






