Hoje vamos implementar uma função interessante no Raspberry Pi Pico com microPython: blinkWithoutDelay. Essa função elimina a necessidade de utilizar time.sleep() que deixa o programa parado esperando.
A ideia é utilizar a função time.ticks_us() que fornece o tempo atual em microssegundos. Ficamos contando até que tempo suficiente se passe entre o tempo atual (currentTime) e o tempo capturado anteriormente (oldTime).
No código abaixo o valor 1000000 significa 1 milhão de microssegundos, ou 1 segundo. Eu faço um led.toggle() (ligar o desligado e desligar o ligado) em um LED externo e no LED onboard a cada segundo. No restante do tempo o programa fica livre para fazer o que mais precisar.
from machine import Pin
import time
led = machine.Pin(18, machine.Pin.OUT)
onboard = machine.Pin(25, machine.Pin.OUT)
oldTime = 0
currentTime = 0
led.off()
onboard.off()
while True:
currentTime = time.ticks_us()
if(currentTime - oldTime > 1000000):
oldTime = currentTime
led.toggle()
onboard.toggle()
Abaixo um gif do código em funcionamento. Veja que o LED externo tem um resistor de 1k Ohm em série.
Agora um exemplo alternando os dois LEDs.
from machine import Pin
import time
led = machine.Pin(18, machine.Pin.OUT)
onboard = machine.Pin(25, machine.Pin.OUT)
oldTime = 0
currentTime = 0
led.off()
onboard.off()
while True:
currentTime = time.ticks_us()
if(currentTime - oldTime > 1000000):
oldTime = currentTime
if(led.value() == True):
onboard.on()
led.off()
else:
onboard.off()
led.on()
Quer colocar mais tarefas no mesmo programa? veja o código abaixo, onde eu coloco cada um dos dois LEDs em uma tarefa diferente, neste caso um tempo diferente.
Um LED pisca a cada 1 segundo e o outro a cada 250 milissegundos.
from machine import Pin
import time
led = machine.Pin(18, machine.Pin.OUT)
onboard = machine.Pin(25, machine.Pin.OUT)
oldTime = 0
oldTime2 = 0
currentTime = 0
led.off()
onboard.off()
while True:
currentTime = time.ticks_us()
if(currentTime - oldTime > 1000000):
oldTime = currentTime
onboard.toggle()
if(currentTime - oldTime2 > 250000):
oldTime2 = currentTime
led.toggle()
Efetivamente estamos executando mais de uma tarefa (piscar dois LEDs em tempos diferentes) sem ocupar o tempo do processador com time.sleep(). Tem um pouco mais sobre manipulação de IOs aqui.
Não pegou o básico sobre microPython com Raspberry Pi Pico? leia este artigo.
Deixe um comentário