SOLUCIONEM EL PROBLEMA DE LES PAUSES BLOQUEJANTS
SOLUCIONEM EL PROBLEMA DE LES PAUSES BLOQUEJANTS
Les pauses detenen l'execució del programa durant el temps definit.
Les instruccions sleep(), sleep_ms() i sleep_us() del mòdul time introdueixen pauses en l'execució del programa, detenint-la el temps que s'especifiqui. Utiltzen respectivament com unitat segons, milisegons i microsegons.
import time
time.sleep(1) # interromp el processament 1 segon
time.sleep_ms(750) # interromp el processament 750 milisegons
time.sleep_us(250) # interromp el processament 250 microsegons
Tenir en compte que:
sleep(0.01) === time.sleep_ms(1)
Quan treballem la resposta a estímuls provinents de sensors o amb determinats sistemes de connectivitat, les pauses en l'execució dels programes suposen un problema.
Podem definir intervals de temps consultant constantment el rellotge intern del µcontrolador amb la instrucció time.ticks_ms() del mòdul time, que retorna el temps, en ms que porta en execució.
Exemple 1: blink sense pauses 👉
from machine import Pin
import time
led = Pin(23, Pin.OUT)
temps_inicial = time.ticks_ms() # llegim el temps d'execució inicial
temps_limit = 1000 # interval d'actualització: temps de durada de la pausa a evitar
while True:
temps_actual = time.ticks_ms() # llegim el temps d'execució actual
# compara constantment les dues mesures de temps
# i quan el temps entre les dues lectures sigui el definit ...
if (temps_actual- temps_inicial) >= temps_limit:
estat_led = not estat_led # inverteix l'estat del led
led.value(estat_led)
temps_inicial = temps_actual # per acabar, actualitza el valor de la variable
Exemple 2: interruptor sense pauses 👉
from machine import Pin
import time
led = Pin(23, Pin.OUT)
boto = Pin(15, Pin.IN)
estat_led = False # variable booleana (True/False) que definirà l'estat del led
temps_inicial = time.ticks_ms() # temps d'execució inicial
temps_limit = 100 # temps d'actualització
while True:
temps_actual = time.ticks_ms() # llegim el temps d'execució actual
lectura = boto.value()
if lectura == 1:
if (temps_actual- temps_inicial) >= temps_limit:
estat_led = not estat_led # inverteix l'estat del led
led.value(estat_led)
temps_inicial = temps_actual # per acabar, actualitza el valor de la variable
Esquema general
import time
ultim_tasca = 0
while True:
ara = time.ticks_ms()
if time.ticks_diff(ara, ultim_tasca) >= INTERVAL:
ultim_tasca = ara
# codi de la tasca