3.3. Virtualni mjerači vremena

Stranica Mjerenje vremena obradila je vremenske oznake i neblokirajuće petlje vođene s time.ticks_diff(). Virtualni mjerač vremena je druga strana medalje: softver traži od izvršnog okruženja da pozove funkciju prema rasporedu, a izvršno okruženje poziva povratni poziv bez da skripta sama mora provjeravati sat.

3.3.1. Klasa machine.Timer

machine.Timer konstruira virtualni mjerač vremena. Ponašanje neovisno o portu zahtijeva poseban id -1; sve ostalo – period, način rada, povratni poziv – postavlja se kroz imenovane argumente:

from machine import Timer

def tick(t):
    print("tick")

tim = Timer(-1)
tim.init(period=100, callback=tick)   # 10 Hz

Povratni poziv se poziva kao bilo koji obični poziv funkcije – može alocirati objekte, koristiti print() i pozivati drugi kod biblioteke bez ikakvih posebnih ograničenja.

3.3.2. Periodični i jednokratni

Dostupna su dva načina rada:

  • Timer.PERIODIC (zadani). Povratni poziv se aktivira svakih period milisekundi, zauvijek, dok se ne pozove deinit() ili dok se mjerač vremena ponovno ne inicijalizira.

  • Timer.ONE_SHOT. Povratni poziv se aktivira jednom, period milisekundi nakon init(), a mjerač vremena se zatim zaustavlja.

Timer(-1).init(mode=Timer.ONE_SHOT, period=2000, callback=fire)

deinit() zaustavlja periodični mjerač vremena i otkazuje sve povratne pozive na čekanju:

tim.deinit()

3.3.3. Kada posegnuti za mjeračem vremena

Virtualni mjerači vremena i obrazac prozivanja s ticks_diff() sa stranice Mjerenje vremena rješavaju isti problem iz suprotnih smjerova. Prozivana petlja provjerava sat u svakoj iteraciji i djeluje kada je proteklo dovoljno vremena; mjerač vremena traži od izvršnog okruženja da probudi skriptu kada je proteklo dovoljno vremena.

  • Prozivani ticks_diff. Sve ostaje na jednom mjestu – petlja posjeduje mjerenje vremena, nema dodatnih povratnih poziva o kojima treba voditi računa. Najbolje za kratak, dobro definiran posao koji povezuje nekoliko vremenski vođenih zadataka.

  • Virtualni mjerač vremena. Premješta raspored izvan tijela petlje. Najbolje kada je periodični zadatak neovisan o glavnom tijeku (LED otkucaja srca, periodično uzorkovanje senzora) i omogućuje glavnoj petlji da svoje vrijeme troši na druge poslove.

Oba pristupa koriste isti temeljni sat i daju istu točnost pri periodima od milisekunde ili više. Nijedan nije prikladan za precizno prebacivanje pinova ili generiranje valnog oblika ispod milisekunde – kašnjenje povratnog poziva je reda veličine otkucaja raspoređivača, a ne nanosekundi.