class MyMeter(Meter): def __init__(self, x, text): CWriter.set_textpos(ssd, 0, 0) # In case previous tests have altered it wri = CWriter(ssd, arial10, GREEN, BLACK, verbose=False) wri.set_clip(True, True, False) super().__init__(wri, 5, x, divisions=4, ptcolor=YELLOW, label=text, style=Meter.BAR, legends=('0.0', '0.5', '1.0')) self.led = LED(wri, ssd.height - 16 - wri.height, x, bdcolor=YELLOW, label='over') self.task = asyncio.create_task(self._run()) async def _run(self): while True: v = int.from_bytes(uos.urandom(3), 'little') / 16777216 self.value(v, color(v)) self.led.color(color(v)) self.led.text(txt(v), fgcolor=color(v)) # Slow asynchronous data acquisition might occur here. Note # that meters update themselves asynchronously (in a real # application as data becomes available). await asyncio.sleep(v) # Demo variable times
async def meter(n, x, text, t): print('Meter {} test.'.format(n)) m = Meter(wri, 5, x, divisions = 4, ptcolor=YELLOW, label=text, style=Meter.BAR, legends=('0.0', '0.5', '1.0')) l = LED(wri, ssd.height - 16 - wri.height, x, bdcolor=YELLOW, label ='over') while True: v = int.from_bytes(uos.urandom(3),'little')/16777216 m.value(v, color(v)) l.color(color(v)) l.text(txt(v), fgcolor=color(v)) refresh(ssd) await asyncio.sleep_ms(t)
def meter(): print('meter') refresh(ssd, True) # Clear any prior image m = Meter(wri, 5, 2, height = 45, divisions = 4, ptcolor=YELLOW, label='level', style=Meter.BAR, legends=('0.0', '0.5', '1.0')) l = LED(wri, 5, 40, bdcolor=YELLOW, label ='over') steps = 10 for _ in range(steps): v = int.from_bytes(uos.urandom(3),'little')/16777216 m.value(v) l.color(GREEN if v < 0.5 else RED) refresh(ssd) utime.sleep(1) refresh(ssd)
def meter(): print('Meter test.') refresh(ssd, True) # Clear any prior image color = lambda v: RED if v > 0.7 else YELLOW if v > 0.5 else GREEN txt = lambda v: 'ovr' if v > 0.7 else 'high' if v > 0.5 else 'ok' m0 = Meter(wri, 5, 2, divisions=4, ptcolor=YELLOW, label='left', style=Meter.BAR, legends=('0.0', '0.5', '1.0')) l0 = LED(wri, ssd.height - 16 - wri.height, 2, bdcolor=YELLOW, label='over') m1 = Meter(wri, 5, 50, divisions=4, ptcolor=YELLOW, label='right', style=Meter.BAR, legends=('0.0', '0.5', '1.0')) l1 = LED(wri, ssd.height - 16 - wri.height, 50, bdcolor=YELLOW, label='over') m2 = Meter(wri, 5, 98, divisions=4, ptcolor=YELLOW, label='bass', style=Meter.BAR, legends=('0.0', '0.5', '1.0')) l2 = LED(wri, ssd.height - 16 - wri.height, 98, bdcolor=YELLOW, label='over') steps = 10 for n in range(steps): v = int.from_bytes(uos.urandom(3), 'little') / 16777216 m0.value(v, color(v)) l0.color(color(v)) l0.text(txt(v), fgcolor=color(v)) v = n / steps m1.value(v, color(v)) l1.color(color(v)) l1.text(txt(v), fgcolor=color(v)) v = 1 - n / steps m2.value(v, color(v)) l2.color(color(v)) l2.text(txt(v), fgcolor=color(v)) refresh(ssd) utime.sleep(1)