From 1c7ea8b974d7cac1edc080f54bae6de791a587e7 Mon Sep 17 00:00:00 2001 From: James Gao Date: Wed, 15 Oct 2014 23:44:12 -0700 Subject: [PATCH] Fixing threading, dot rendering --- kiln/Adafruit_alphanumeric.py | 40 +++++++++++++++++++++++++++++------ kiln/thermo.py | 14 +++++++++--- 2 files changed, 44 insertions(+), 10 deletions(-) diff --git a/kiln/Adafruit_alphanumeric.py b/kiln/Adafruit_alphanumeric.py index c9a1118..3bb3be0 100644 --- a/kiln/Adafruit_alphanumeric.py +++ b/kiln/Adafruit_alphanumeric.py @@ -173,23 +173,49 @@ class AlphaScroller(threading.Thread): def __init__(self, address=0x70, interval=.25): self.interval = interval self.disp = Alphanumeric(address) + self.text = " " + self.counter = 0 + super(AlphaScroller, self).__init__() - self.value = " " - self.counter = 0 + self.daemon = True + self.running = True + + def stop(self): + self.running = False - def set_text(self, text, pad=True): - self.text = text + def set_text(self, text, pad=True, reset=True): + i = 0 + self.text = [] + while i < len(text)-1: + if text[i+1] == ".": + i+= 1 + self.text.push((text[i], True)) + else: + self.text.push((text[i],)) + i+= 1 + if pad: - self.text += " " - self.counter = 0 + self.text += [(' ',)]*4 + + if reset: + self.counter = 0 def set_speed(self, interval): self.interval = interval def run(self): - while True: + while self.running: for i in range(4): char = self.value[(self.counter+i) % len(self.value)] self.disp.writeChar(i, char) time.sleep(self.interval) self.counter += 1 + +if __name__ == "__main__": + scroller = AlphaScroller() + scoller.set_text(list("Hello. World.")+["cone","degree"]) + scroller.start() + try: + scroller.join() + except KeyboardInterrupt: + scroller.stop() \ No newline at end of file diff --git a/kiln/thermo.py b/kiln/thermo.py index 82c961b..524ced3 100644 --- a/kiln/thermo.py +++ b/kiln/thermo.py @@ -25,6 +25,7 @@ class Monitor(threading.Thread): self.display.start() super(Monitor, self).__init__() self.daemon = True + self.running = True def _read_temp(self): with open(self.device, 'r') as f: @@ -39,12 +40,16 @@ class Monitor(threading.Thread): if match is not None: return float(match.group(1)) / 1000.0 + def stop(self): + self.running = False + self.display.stop() + @property def temperature(self): return self.history[-1][1] def run(self): - while True: + while running: temp = self._read_temp() fahr = temp * 9. / 5. + 32. now = datetime.datetime.now() @@ -55,9 +60,12 @@ class Monitor(threading.Thread): if 600 <= temp: text += [' ', ' ', 'cone']+list("%0.1f"%temp_to_cone(temp)) text += ' ' - self.display.text = text + self.display.set_text(text, reset=False) if __name__ == "__main__": mon = Monitor() mon.start() - mon.join() + try: + mon.join() + except KeyboardInterrupt: + mon.stop() \ No newline at end of file