Added RGB-LCD code
This commit is contained in:
parent
a53afd377c
commit
aa2d44c9a2
1 changed files with 68 additions and 0 deletions
68
grove-rgb-lcd/rgblcd.py
Normal file
68
grove-rgb-lcd/rgblcd.py
Normal file
|
@ -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))))
|
Loading…
Reference in a new issue