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