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
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 __init__(self): super().__init__() labels = { 'width': 50, 'fontcolor': WHITE, 'border': 2, 'fgcolor': RED, 'bgcolor': DARKGREEN, 'font': font10, } quitbutton() self.meter = Meter((129, 0), font=font6, legends=('0', '5', '10'), pointercolor=YELLOW, fgcolor=CYAN) self.lbl_result = Label((25, 80), **labels) self.led = LED((0, 80), border=2) self.master = HorizSlider((0, 16), font=font6, fgcolor=YELLOW, fontcolor=WHITE, legends=('0', '5', '10'), cb_end=self.callback, cbe_args=('Master', ), cb_move=self.master_moved, value=0.5, border=2) self.slave = HorizSlider((0, 44), fgcolor=GREEN, cbe_args=('Slave', ), cb_move=self.slave_moved, border=2) self.reg_task(self.coro()) # On/Off toggle: enable/disable quit button and one slider bs = ButtonList(self.cb_en_dis) lst_en_dis = [self.slave, self.master] button = bs.add_button((0, 107), font=font10, fontcolor=BLACK, fgcolor=GREEN, text='Dis', args=[True, lst_en_dis]) button = bs.add_button((0, 107), font=font10, fontcolor=BLACK, fgcolor=RED, text='En', args=[False, lst_en_dis])
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 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)
class SliderScreen(Screen): def __init__(self): super().__init__() labels = { 'width': 50, 'fontcolor': WHITE, 'border': 2, 'fgcolor': RED, 'bgcolor': DARKGREEN, 'font': font10, } quitbutton() self.meter = Meter((129, 0), font=font6, legends=('0', '5', '10'), pointercolor=YELLOW, fgcolor=CYAN) self.lbl_result = Label((25, 80), **labels) self.led = LED((0, 80), border=2) self.master = HorizSlider((0, 16), font=font6, fgcolor=YELLOW, fontcolor=WHITE, legends=('0', '5', '10'), cb_end=self.callback, cbe_args=('Master', ), cb_move=self.master_moved, value=0.5, border=2) self.slave = HorizSlider((0, 44), fgcolor=GREEN, cbe_args=('Slave', ), cb_move=self.slave_moved, border=2) self.reg_task(self.coro()) # On/Off toggle: enable/disable quit button and one slider bs = ButtonList(self.cb_en_dis) lst_en_dis = [self.slave, self.master] button = bs.add_button((0, 107), font=font10, fontcolor=BLACK, fgcolor=GREEN, text='Dis', args=[True, lst_en_dis]) button = bs.add_button((0, 107), font=font10, fontcolor=BLACK, fgcolor=RED, text='En', args=[False, lst_en_dis]) # CALLBACKS # cb_end occurs when user stops touching the control def callback(self, slider, device): print('{} returned {}'.format(device, slider.value())) def master_moved(self, slider): val = slider.value() self.led.value(val > 0.8) self.slave.value(val) self.lbl_result.value(to_string(val)) def cb_en_dis(self, button, disable, itemlist): for item in itemlist: item.greyed_out(disable) # Either slave has had its slider moved (by user or by having value altered) def slave_moved(self, slider): val = slider.value() if val > 0.8: slider.color(RED) else: slider.color(GREEN) self.lbl_result.value(to_string(val)) # COROUTINE async def coro(self): oldvalue = 0 await asyncio.sleep(0) while True: val = int.from_bytes(os.urandom(1), 1) / 255 steps = 20 delta = (val - oldvalue) / steps for _ in range(steps): oldvalue += delta self.meter.value(oldvalue) await asyncio.sleep_ms(100)
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)