async def do_usec(minutes): global gps tick = Message() print('Setting up GPS.') await us_setup(tick) print('Waiting for time data.') await gps.ready() max_us = 0 min_us = 0 sd = 0 nsamples = 0 count = 0 terminate = Event() asyncio.create_task(killer(terminate, minutes)) while not terminate.is_set(): await tick usecs = tick.value() tick.clear() err = 1000000 - usecs count += 1 print('Timing discrepancy is {:4d}μs {}'.format( err, '(skipped)' if count < 3 else '')) if count < 3: # Discard 1st two samples from statistics continue # as these can be unrepresentative max_us = max(max_us, err) min_us = min(min_us, err) sd += err * err nsamples += 1 # SD: apply Bessel's correction for infinite population sd = int(math.sqrt(sd / (nsamples - 1))) print( 'Timing discrepancy is: {:5d}μs max {:5d}μs min. Standard deviation {:4d}μs' .format(max_us, min_us, sd))
async def main(): event = Event() asyncio.create_task(waiter(event)) await asyncio.sleep(2) print('Setting event') event.set() await asyncio.sleep(1) # Caller can check if event has been cleared print('Event is {}'.format('set' if event.is_set() else 'clear'))
async def do_time(minutes): global gps fstr = '{}ms Time: {:02d}:{:02d}:{:02d}:{:06d}' print('Setting up GPS.') gps = await setup() print('Waiting for time data.') await gps.ready() print('Setting RTC.') await gps.set_rtc() print('RTC is set.') terminate = Event() asyncio.create_task(killer(terminate, minutes)) while not terminate.is_set(): await asyncio.sleep(1) # In a precision app, get the time list without allocation: t = gps.get_t_split() print(fstr.format(gps.get_ms(), t[0], t[1], t[2], t[3]))