kopia lustrzana https://github.com/peterhinch/micropython-samples
Prior to multi-screen
rodzic
d8a205d20d
commit
93a7a451ad
|
@ -37,6 +37,7 @@ class Writer():
|
||||||
text_col = 0
|
text_col = 0
|
||||||
row_clip = False # Clip or scroll when screen full
|
row_clip = False # Clip or scroll when screen full
|
||||||
col_clip = False # Clip or new line when row is full
|
col_clip = False # Clip or new line when row is full
|
||||||
|
wrap = True # Word wrap
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def set_textpos(cls, row=None, col=None):
|
def set_textpos(cls, row=None, col=None):
|
||||||
|
@ -47,12 +48,14 @@ class Writer():
|
||||||
return Writer.text_row, Writer.text_col
|
return Writer.text_row, Writer.text_col
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def set_clip(cls, row_clip=None, col_clip=None):
|
def set_clip(cls, row_clip=None, col_clip=None, wrap=None):
|
||||||
if row_clip is not None:
|
if row_clip is not None:
|
||||||
Writer.row_clip = row_clip
|
Writer.row_clip = row_clip
|
||||||
if col_clip is not None:
|
if col_clip is not None:
|
||||||
Writer.col_clip = col_clip
|
Writer.col_clip = col_clip
|
||||||
return Writer.row_clip, Writer.col_clip
|
if wrap is not None:
|
||||||
|
Writer.wrap = wrap
|
||||||
|
return Writer.row_clip, Writer.col_clip, Writer.wrap
|
||||||
|
|
||||||
def __init__(self, device, font, verbose=True):
|
def __init__(self, device, font, verbose=True):
|
||||||
self.device = device
|
self.device = device
|
||||||
|
@ -100,8 +103,23 @@ class Writer():
|
||||||
|
|
||||||
def printstring(self, string, invert=False):
|
def printstring(self, string, invert=False):
|
||||||
#print('Writer.text_row = ', Writer.text_row)
|
#print('Writer.text_row = ', Writer.text_row)
|
||||||
|
# word wrapping. Assumes words separated by single space.
|
||||||
|
rstr = None
|
||||||
|
if Writer.wrap and self.stringlen(string) > self.screenwidth:
|
||||||
|
pos = 0
|
||||||
|
lstr = string[:]
|
||||||
|
while self.stringlen(lstr) > self.screenwidth:
|
||||||
|
pos = lstr.rfind(' ')
|
||||||
|
lstr = lstr[:pos]
|
||||||
|
if pos > 0:
|
||||||
|
rstr = string[pos + 1:]
|
||||||
|
string = lstr
|
||||||
|
|
||||||
for char in string:
|
for char in string:
|
||||||
self._printchar(char, invert)
|
self._printchar(char, invert)
|
||||||
|
if rstr is not None:
|
||||||
|
self._printchar('\n')
|
||||||
|
self.printstring(rstr, invert) # Recurse
|
||||||
|
|
||||||
def stringlen(self, string):
|
def stringlen(self, string):
|
||||||
l = 0
|
l = 0
|
||||||
|
@ -172,14 +190,41 @@ class CWriter(Writer):
|
||||||
def __init__(self,device, font, verbose=True):
|
def __init__(self,device, font, verbose=True):
|
||||||
super().__init__(device, font, verbose)
|
super().__init__(device, font, verbose)
|
||||||
self.fgcolor = 1
|
self.fgcolor = 1
|
||||||
|
self.cpos = 0
|
||||||
|
self.tab = 4
|
||||||
|
|
||||||
def setcolor(fgcolor, bgcolor):
|
def setcolor(self, fgcolor=None, bgcolor=None):
|
||||||
self.fgcolor = fgcolor
|
if fgcolor is not None:
|
||||||
self.bgcolor = bgcolor
|
self.fgcolor = fgcolor
|
||||||
|
if bgcolor is not None:
|
||||||
|
self.bgcolor = bgcolor
|
||||||
|
return self.fgcolor, self.bgcolor
|
||||||
|
|
||||||
def _printchar(self, char, invert=False):
|
def tabsize(self, value=None):
|
||||||
|
if value is not None:
|
||||||
|
self.tab = value
|
||||||
|
return self.tab
|
||||||
|
|
||||||
|
def _gchar(self, char):
|
||||||
|
if char == '\n':
|
||||||
|
self.cpos = 0
|
||||||
|
elif char == '\t':
|
||||||
|
nspaces = self.tab - (self.cpos % self.tab)
|
||||||
|
if nspaces == 0:
|
||||||
|
nspaces = self.tab
|
||||||
|
while nspaces:
|
||||||
|
nspaces -= 1
|
||||||
|
self._printchar(' ', recurse=True)
|
||||||
|
self.glyph = None # All done
|
||||||
|
return
|
||||||
|
super()._get_char(char)
|
||||||
|
|
||||||
|
def _printchar(self, char, invert=False, recurse=False):
|
||||||
#print('Writer.text_row 1 = ', Writer.text_row)
|
#print('Writer.text_row 1 = ', Writer.text_row)
|
||||||
self._get_char(char)
|
if recurse:
|
||||||
|
self._get_char(char)
|
||||||
|
else:
|
||||||
|
self._gchar(char)
|
||||||
#print('Writer.text_row 2 = ', Writer.text_row)
|
#print('Writer.text_row 2 = ', Writer.text_row)
|
||||||
if self.glyph is None:
|
if self.glyph is None:
|
||||||
return # All done
|
return # All done
|
||||||
|
@ -212,3 +257,4 @@ class CWriter(Writer):
|
||||||
if drow >= self.screenheight or drow < 0:
|
if drow >= self.screenheight or drow < 0:
|
||||||
break
|
break
|
||||||
Writer.text_col += -char_width if usd else char_width
|
Writer.text_col += -char_width if usd else char_width
|
||||||
|
self.cpos += 1
|
||||||
|
|
|
@ -44,8 +44,9 @@ def inverse(use_spi=False, soft=True):
|
||||||
square_side = 10
|
square_side = 10
|
||||||
ssd.fill_rect(rhs - square_side, 0, square_side, square_side, 1)
|
ssd.fill_rect(rhs - square_side, 0, square_side, square_side, 1)
|
||||||
|
|
||||||
CWriter.set_textpos(0, 0) # In case previous tests have altered it
|
Writer.set_textpos(0, 0) # In case previous tests have altered it
|
||||||
wri = CWriter(ssd, freesans20, verbose=False)
|
Writer.set_clip(False, False, False) # Char wrap
|
||||||
|
wri = Writer(ssd, freesans20, verbose=False)
|
||||||
wri.printstring('Sunday\n')
|
wri.printstring('Sunday\n')
|
||||||
wri.printstring('12 Aug 2018\n')
|
wri.printstring('12 Aug 2018\n')
|
||||||
wri.printstring('10.30am', True) # Inverse text
|
wri.printstring('10.30am', True) # Inverse text
|
||||||
|
@ -59,6 +60,7 @@ def scroll(use_spi=False, soft=True):
|
||||||
ssd.fill_rect(rhs - square_side, 0, square_side, square_side, 1)
|
ssd.fill_rect(rhs - square_side, 0, square_side, square_side, 1)
|
||||||
|
|
||||||
Writer.set_textpos(0, 0) # In case previous tests have altered it
|
Writer.set_textpos(0, 0) # In case previous tests have altered it
|
||||||
|
Writer.set_clip(False, False, False) # Char wrap
|
||||||
wri = Writer(ssd, freesans20, verbose=False)
|
wri = Writer(ssd, freesans20, verbose=False)
|
||||||
wri.printstring('Sunday\n')
|
wri.printstring('Sunday\n')
|
||||||
wri.printstring('12 Aug 2018\n')
|
wri.printstring('12 Aug 2018\n')
|
||||||
|
@ -77,6 +79,7 @@ def usd_scroll(use_spi=False, soft=True):
|
||||||
# Only CWriter can do usd
|
# Only CWriter can do usd
|
||||||
CWriter.invert_display()
|
CWriter.invert_display()
|
||||||
CWriter.set_textpos(HEIGHT - 1, WIDTH - 1)
|
CWriter.set_textpos(HEIGHT - 1, WIDTH - 1)
|
||||||
|
CWriter.set_clip(False, False, False) # Char wrap
|
||||||
wri = CWriter(ssd, freesans20, verbose=False)
|
wri = CWriter(ssd, freesans20, verbose=False)
|
||||||
|
|
||||||
wri.printstring('Sunday\n')
|
wri.printstring('Sunday\n')
|
||||||
|
@ -97,6 +100,7 @@ def usd(use_spi=False, soft=True):
|
||||||
# Only CWriter can do usd
|
# Only CWriter can do usd
|
||||||
CWriter.invert_display()
|
CWriter.invert_display()
|
||||||
CWriter.set_textpos(HEIGHT - 1, WIDTH - 1)
|
CWriter.set_textpos(HEIGHT - 1, WIDTH - 1)
|
||||||
|
CWriter.set_clip(False, False, False) # Char wrap
|
||||||
wri = CWriter(ssd, freesans20, verbose=False)
|
wri = CWriter(ssd, freesans20, verbose=False)
|
||||||
wri.printstring('Sunday\n')
|
wri.printstring('Sunday\n')
|
||||||
wri.printstring('12 Aug 2018\n')
|
wri.printstring('12 Aug 2018\n')
|
||||||
|
@ -107,27 +111,29 @@ def usd(use_spi=False, soft=True):
|
||||||
def rjust(use_spi=False, soft=True):
|
def rjust(use_spi=False, soft=True):
|
||||||
ssd = setup(use_spi, soft) # Create a display instance
|
ssd = setup(use_spi, soft) # Create a display instance
|
||||||
Writer.set_textpos(0, 0) # Previous tests may have altered it
|
Writer.set_textpos(0, 0) # Previous tests may have altered it
|
||||||
|
Writer.set_clip(False, False, False) # Char wrap
|
||||||
wri = Writer(ssd, freesans20, verbose=False)
|
wri = Writer(ssd, freesans20, verbose=False)
|
||||||
|
|
||||||
my_str = 'Sunday\n'
|
my_str = 'Sunday\n'
|
||||||
l = wri.stringlen(my_str)
|
l = wri.stringlen(my_str)
|
||||||
CWriter.set_textpos(col = WIDTH - l)
|
Writer.set_textpos(col = WIDTH - l)
|
||||||
wri.printstring(my_str)
|
wri.printstring(my_str)
|
||||||
|
|
||||||
my_str = '12 Aug 2018\n'
|
my_str = '12 Aug 2018\n'
|
||||||
l = wri.stringlen(my_str)
|
l = wri.stringlen(my_str)
|
||||||
CWriter.set_textpos(col = WIDTH - l)
|
Writer.set_textpos(col = WIDTH - l)
|
||||||
wri.printstring(my_str)
|
wri.printstring(my_str)
|
||||||
|
|
||||||
my_str = '10.30am'
|
my_str = '10.30am'
|
||||||
l = wri.stringlen(my_str)
|
l = wri.stringlen(my_str)
|
||||||
CWriter.set_textpos(col = WIDTH - l)
|
Writer.set_textpos(col = WIDTH - l)
|
||||||
wri.printstring(my_str)
|
wri.printstring(my_str)
|
||||||
ssd.show()
|
ssd.show()
|
||||||
|
|
||||||
def fonts(use_spi=False, soft=True):
|
def fonts(use_spi=False, soft=True):
|
||||||
ssd = setup(use_spi, soft) # Create a display instance
|
ssd = setup(use_spi, soft) # Create a display instance
|
||||||
Writer.set_textpos(0, 0) # In case previous tests have altered it
|
Writer.set_textpos(0, 0) # In case previous tests have altered it
|
||||||
|
Writer.set_clip(False, False, False) # Char wrap
|
||||||
wri = Writer(ssd, freesans20, verbose=False)
|
wri = Writer(ssd, freesans20, verbose=False)
|
||||||
wri_f = Writer(ssd, fixed, verbose=False)
|
wri_f = Writer(ssd, fixed, verbose=False)
|
||||||
wri_f.printstring('Sunday\n')
|
wri_f.printstring('Sunday\n')
|
||||||
|
@ -135,17 +141,51 @@ def fonts(use_spi=False, soft=True):
|
||||||
wri.printstring('10.30am')
|
wri.printstring('10.30am')
|
||||||
ssd.show()
|
ssd.show()
|
||||||
|
|
||||||
|
def tabs(use_spi=False, soft=True):
|
||||||
|
ssd = setup(use_spi, soft) # Create a display instance
|
||||||
|
CWriter.set_textpos(0, 0) # In case previous tests have altered it
|
||||||
|
CWriter.set_clip(False, False, False) # Char wrap
|
||||||
|
wri = CWriter(ssd, fixed, verbose=False)
|
||||||
|
wri.printstring('1\t2\n')
|
||||||
|
wri.printstring('111\t22\n')
|
||||||
|
wri.printstring('1111\t1')
|
||||||
|
ssd.show()
|
||||||
|
|
||||||
|
def usd_tabs(use_spi=False, soft=True):
|
||||||
|
ssd = setup(use_spi, soft) # Create a display instance
|
||||||
|
CWriter.invert_display()
|
||||||
|
CWriter.set_textpos(HEIGHT - 1, WIDTH - 1)
|
||||||
|
CWriter.set_clip(False, False, False) # Char wrap
|
||||||
|
wri = CWriter(ssd, fixed, verbose=False)
|
||||||
|
wri.printstring('1\t2\n')
|
||||||
|
wri.printstring('111\t22\n')
|
||||||
|
wri.printstring('1111\t1')
|
||||||
|
ssd.show()
|
||||||
|
CWriter.invert_display(False) # For subsequent tests
|
||||||
|
|
||||||
|
def wrap(use_spi=False, soft=True):
|
||||||
|
ssd = setup(use_spi, soft) # Create a display instance
|
||||||
|
CWriter.set_textpos(0, 0) # In case previous tests have altered it
|
||||||
|
CWriter.set_clip(False, False, True) # Word wrap
|
||||||
|
wri = CWriter(ssd, freesans20, verbose=False)
|
||||||
|
wri.printstring('the quick brown fox jumps over')
|
||||||
|
ssd.show()
|
||||||
|
|
||||||
tstr = '''Test assumes a 128*64 (w*h) display. Edit WIDTH and HEIGHT in ssd1306_setup.py for others.
|
tstr = '''Test assumes a 128*64 (w*h) display. Edit WIDTH and HEIGHT in ssd1306_setup.py for others.
|
||||||
Device pinouts are comments in ssd1306_setup.py.
|
Device pinouts are comments in ssd1306_setup.py.
|
||||||
All tests take two boolean args:
|
All tests take two boolean args:
|
||||||
use_spi = False. Set True for SPI connected device
|
use_spi = False. Set True for SPI connected device
|
||||||
soft=True set False to use hardware I2C/SPI. Hardware option currently fails with official SSD1306 driver.
|
soft=True set False to use hardware I2C/SPI. Hardware option currently fails with official SSD1306 driver.
|
||||||
|
|
||||||
Available tests:
|
Available tests:
|
||||||
inverse() Show black on white text.
|
inverse() Show black on white text.
|
||||||
scroll() Illustrate scrolling
|
scroll() Illustrate scrolling
|
||||||
usd() Upside-down display.
|
usd() Upside-down display.
|
||||||
usd_scroll() Upside-down scroll test.
|
usd_scroll() Upside-down scroll test.
|
||||||
rjust() Right justification.
|
rjust() Right justification.
|
||||||
fonts() Two fonts.'''
|
fonts() Two fonts.
|
||||||
|
tabs() Tab stops.
|
||||||
|
usd_tabs() Upside-down tabs.
|
||||||
|
wrap() Word wrapping'''
|
||||||
|
|
||||||
print(tstr)
|
print(tstr)
|
||||||
|
|
Ładowanie…
Reference in New Issue