3.3. Temporizadores virtuais¶
A página de temporização abordou timestamps e ciclos não bloqueantes baseados em time.ticks_diff(). Um temporizador virtual é o lado oposto: o software pede ao runtime que chame uma função num horário definido, e o runtime invoca o callback sem que o script tenha de verificar o relógio por si próprio.
3.3.1. A classe machine.Timer¶
machine.Timer constrói um temporizador virtual. O comportamento entre ports requer o id especial -1; tudo o resto – período, modo, callback – é definido através de argumentos por palavra-chave:
from machine import Timer
def tick(t):
print("tick")
tim = Timer(-1)
tim.init(period=100, callback=tick) # 10 Hz
O callback é invocado como qualquer chamada de função ordinária – pode alocar objetos, usar print() e chamar outro código de biblioteca sem quaisquer restrições especiais.
3.3.2. Periódico e de disparo único¶
Estão disponíveis dois modos:
Timer.PERIODIC(o padrão). O callback dispara a cadaperiodmilissegundos, indefinidamente, até quedeinit()seja chamado ou o temporizador seja reinicializado.Timer.ONE_SHOT. O callback dispara uma vez,periodmilissegundos apósinit(), e o temporizador pára depois.
Timer(-1).init(mode=Timer.ONE_SHOT, period=2000, callback=fire)
deinit() para um temporizador periódico e cancela qualquer callback pendente:
tim.deinit()
3.3.3. Quando usar um temporizador¶
Os temporizadores virtuais e o padrão de polling com ticks_diff() de temporização resolvem o mesmo problema de direções opostas. Um ciclo com polling verifica o relógio a cada iteração e age quando já passou tempo suficiente; um temporizador pede ao runtime que acorde o script quando já passou tempo suficiente.
Polling com
ticks_diff. Tudo fica num único lugar – o ciclo controla a temporização, sem callbacks adicionais para gerir. Mais indicado para trabalho curto e bem definido que liga várias tarefas temporizadas.Temporizador virtual. Move o agendamento para fora do corpo do ciclo. Mais indicado quando a tarefa periódica é independente do fluxo principal (um LED de heartbeat, uma amostragem periódica de sensor) e permite que o ciclo principal use o seu tempo em outro trabalho.
Ambas as abordagens usam o mesmo relógio subjacente e dão a mesma precisão para períodos de um milissegundo ou mais. Nenhuma é adequada para alternância precisa de pinos ou geração de formas de onda abaixo do milissegundo – a latência do callback é da ordem do tick do agendador, não de nanossegundos.