From aa2d44c9a2cd1be0bc5bafec2442e839a239f89b Mon Sep 17 00:00:00 2001 From: Peter-Martijn Date: Sun, 15 Jun 2025 13:32:00 +0200 Subject: [PATCH] Added RGB-LCD code --- grove-rgb-lcd/rgblcd.py | 68 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 grove-rgb-lcd/rgblcd.py diff --git a/grove-rgb-lcd/rgblcd.py b/grove-rgb-lcd/rgblcd.py new file mode 100644 index 0000000..7b80763 --- /dev/null +++ b/grove-rgb-lcd/rgblcd.py @@ -0,0 +1,68 @@ +from microcontroller import delay_us +import board +import busio + +DISPLAY_TEXT_ADDR = 0x3e +DISPLAY_RGB_ADDR = 0x62 +class RGBLCD: + def __init__(self, i2cbus: busio.I2C, lcdaddr=DISPLAY_TEXT_ADDR, rgbaddr=DISPLAY_RGB_ADDR): + self._lcdaddr = lcdaddr + self._rgbaddr = rgbaddr + self.bus = i2cbus + + # set backlight to (R,G,B) (values from 0..255 for each) + def setRGB(self, r,g,b): + self.bus.writeto(self._rgbaddr,bytes((0,0))) + self.bus.writeto(self._rgbaddr,bytes((1,0))) + self.bus.writeto(self._rgbaddr,bytes((0x08,0xaa))) + self.bus.writeto(self._rgbaddr,bytes((4,r))) + self.bus.writeto(self._rgbaddr,bytes((3,g))) + self.bus.writeto(self._rgbaddr,bytes((2,b))) + + # send command to display (no need for external use) + def textCommand(self, cmd): + self.bus.writeto(self._lcdaddr,bytes((0x80,cmd))) + + # set display text \n for second line(or auto wrap) + def setText(self, text): + self.textCommand(0x01) # clear display + delay_us(50000) + self.textCommand(0x08 | 0x04) # display on, no cursor + self.textCommand(0x28) # 2 lines + delay_us(50000) + count = 0 + row = 0 + for c in text: + if c == '\n' or count == 16: + count = 0 + row += 1 + if row == 2: + break + self.textCommand(0xc0) + if c == '\n': + continue + count += 1 + self.bus.writeto(self._lcdaddr,bytes((0x40,ord(c)))) + + #Update the display without erasing the display + def setText_norefresh(self, text): + self.textCommand(0x02) # return home + delay_us(50000) + self.textCommand(0x08 | 0x04) # display on, no cursor + self.textCommand(0x28) # 2 lines + delay_us(50000) + count = 0 + row = 0 + while len(text) < 32: #clears the rest of the screen + text += ' ' + for c in text: + if c == '\n' or count == 16: + count = 0 + row += 1 + if row == 2: + break + self.textCommand(0xc0) + if c == '\n': + continue + count += 1 + self.bus.writeto(self._lcdaddr,bytes((0x40,ord(c))))