from machine import Pin, Timer
from time import sleep
class Siebensegment:
def __init__(self, digitPinLst, segPinLst, freq=100):
self.dig = [0, 0, 0, 0]
for i in range(4):
self.dig[i] = Pin(Pin(digitPinLst[i]), Pin.OUT)
self.a = Pin(segPinLst[0], Pin.OUT)
self.b = Pin(segPinLst[1], Pin.OUT)
self.c = Pin(segPinLst[2], Pin.OUT)
self.d = Pin(segPinLst[3], Pin.OUT)
self.e = Pin(segPinLst[4], Pin.OUT)
self.f = Pin(segPinLst[5], Pin.OUT)
self.g = Pin(segPinLst[6], Pin.OUT)
self.dp = Pin(segPinLst[7], Pin.OUT)
self.freq = 4*freq
self.dp.on()
self.stelle = 0
self.clear()
self.dppos = -1
Timer(freq=self.freq, callback=self.multiplex)
def multiplex(self, event):
self.dig[self.stelle].off()
self.stelle = (self.stelle+1) % 4
if self.dppos == self.stelle:
self.dp.off()
else:
self.dp.on()
self.__setpins(self.anzeige[self.stelle])
self.dig[self.stelle].on()
def clear(self):
self.anzeige = ' '*4
def show(self, anzeige):
if type(anzeige) in [int, float]:
anzeige = str(anzeige)
if '.' in anzeige:
anzeige = ' '*(5-len(anzeige)) + anzeige
self.dppos = anzeige.index('.')
anzeige = anzeige.replace('.','')
self.dppos -= 1
else:
anzeige = ' '*(4-len(anzeige)) + anzeige
self.anzeige = anzeige
def __setpins(self, ziffer):
if ziffer in '02356789aACeEfFpPOsS':
self.a.off()
else:
self.a.on()
if ziffer in '01234789aAdDHpPUOyY':
self.b.off()
else:
self.b.on()
if ziffer in '013456789aAbBdDhHnNouUOsSyY':
self.c.off()
else:
self.c.on()
if ziffer in '0235689bBcCdDeElLouUOsStTyY':
self.d.off()
else:
self.d.on()
if ziffer in '0268aAbBcCdDeEfFhHlLnNopPrRuUOtT':
self.e.off()
else:
self.e.on()
if ziffer in '045689aAbBCeEfFhHlLpPUOsStTyY':
self.f.off()
else:
self.f.on()
if ziffer in '-2345689aAbBcdDeEfFhHnNopPrRsStTyY':
self.g.off()
else:
self.g.on()
digits = [21, 18, 17, 15]
segments = [20, 16, 13, 11, 10, 19, 14, 12]
disp = Siebensegment(digits, segments, freq=100)
disp.show('LUPO')
sleep(3)
disp.clear()
sleep(1)
while True:
for i in range(-99, 9999):
disp.show(f'{i/10:.1f}')
sleep(.1)