def __init__(self): self.lcdPanel = Adafruit_CharLCDPlate() self.volumeString = "100%" self.trackInfo = "No track is currently played" self.state = "" self.line1 = "" self.line2 = "" self.backColor = self.lcdPanel.BLUE self.disco = False self._recalculateLines() self._startTickerThread()
class DisplayRenderer: def __init__(self): self.lcdPanel = Adafruit_CharLCDPlate() self.volumeString = "100%" self.trackInfo = "No track is currently played" self.state = "" self.line1 = "" self.line2 = "" self.backColor = self.lcdPanel.BLUE self.disco = False self._recalculateLines() self._startTickerThread() def _startTickerThread(self): self.tickerStarted = True start_new_thread(self._tickerLoop, ()) def _tickerLoop(self): while self.tickerStarted: time.sleep(0.5) self.handleTimerTick() def stopRenderer(self): self.tickerStarted = False self.disco = False def setTrackInfo(self, trackinfo): self.trackInfo = trackinfo self.Invalidate() def setVolume(self, volume): self.volumeString = str(volume) + "%" self.Invalidate() def setState(self, state): self.state = state self.Invalidate() def toggleDisco(self): if self.disco == False: self.disco = True start_new_thread(self._discoLoop, ()) else: self.disco = False def _discoLoop(self): while self.disco: time.sleep(0.2) self.backColor = random.randint(1, 7) self.RenderDisplayTexts() def Invalidate(self): self._recalculateLines() self.RenderDisplayTexts() def handleTimerTick(self): self.line1position = self._incPos(self.line1position, self.line1) self.RenderDisplayTexts() def _incPos(self, oldPosition, line): if len(line) - oldPosition < 16: return 0 else: return oldPosition + 1 def _recalculateLines(self): newline1 = self.trackInfo n = 16 - len(self.state) - len(self.volumeString) newline2 = self.state + (n * " ") + self.volumeString if newline1 != self.line1: self.line1position = 0 if newline2 != self.line2: self.line2position = 0 self.line1 = newline1 self.line2 = newline2 def RenderDisplayTexts(self): self.lcdPanel.clear() logger.debug("Showing on line 1: " + self.line1) logger.debug("Showing on line 2: " + self.line2) self.lcdPanel.message( self.line1[self.line1position:] + "\n" + self.line2[self.line2position:]) self.lcdPanel.backlight(self.backColor)