binary counting with a 7 segment LCD
-
here is some code to draw a 7 segment LCD and use the segments to count up to 127 (2**7-1).
class digit(object): """a digit of the lcd display""" def __init__(self, pos, size, seg_l, seg_h): self.pos = pos self.size = size self.seg_l = seg_l self.seg_h = seg_h def draw_segment(self, indx, l, h): seg_poss = [ ( 0, self.size), ( self.size/2, self.size/2), ( self.size/2, -self.size/2), ( 0, -self.size), (-self.size/2, -self.size/2), (-self.size/2, self.size/2), ( 0, 0), ] x = self.pos[0] + seg_poss[indx][0] y = self.pos[1] + seg_poss[indx][1] if indx in [1, 2, 4, 5]: polygon( (x, y + l/2), (x - h/2, y + l/2 - h/2), (x - h/2, y - l/2 + h/2), (x, y - l/2), (x + h/2, y - l/2 + h/2), (x + h/2, y + l/2 - h/2),) else: polygon( (x + l/2, y), (x + l/2 - h/2, y + h/2), (x - l/2 + h/2, y + h/2), (x - l/2, y), (x - l/2 + h/2, y - h/2), (x + l/2 - h/2, y - h/2),) def draw(self, num): for s in range(7): if (num & (1<<s)): self.draw_segment(s, self.seg_l, self.seg_h) # --------------------------- int_to_bin = { 0 : 63, 1 : 6, 2 : 91, 3 : 79, 4 : 102, 5 : 109, 6 : 125, 7 : 7, 8 : 127, 9 : 111, } # --------------------------- PW, PH = 500, 500 d = digit((0, 0), PW/3, 150, 30) d_int = digit((PW*.5, -PH*.4), 16, 14, 4) for n in range(128): assert (0 <= n < 128), "Values should be higher than -1 and smaller than 128!" newPage(PW, PH) fill(.2) rect(0, 0, PW, PH) translate(PW/2, PH/2) skew(2) fill(0, 1, 0) d.seg_h = n+4 d.draw(n) with savedState(): for i in reversed(str(n)): translate(-30) d_int.draw(int_to_bin[int(i)])
should make animations like this: