Custom Font-Map
für das Raspberry Pi Pico-LCD-1.14 Display
Bildbox 1 (klick hier)
Custom Font-Map
für das Raspberry Pi Pico-LCD-1.14 Display
Bildbox 1 (klick hier)
Hardware
- Raspberry Pi Pico
- Pico-LCD-1.14 Display
- Micro USB Kabel
Der nachfolgende Teil gehört zu den Ausführungen von
Teil 1 Pico-LCD-Display ausprobiert
und erklärt die Veränderung der Schriftgröße. Ich
werde das am Beispiel eines einfachen Counters tun, der natürlich auch wieder als
Download (hier)
zur Verfügung steht.
Los gehts
Es geht also jetzt, wie versprochen, um die Änderung der Schriftgröße beim Pico-LCD-1.14 Display. Normal benutzt man
zur Schriftausgabe die Funktion:
LCD.text("String",x-Koord,y-Koord,Farbe)
z.B. LCD.text("hier steht mein Text",70,120,LCD.white)
gefolgt von
LCD.show()
Um die Schriftgröße nun zu verändern kann man folgende Funktion nutzen:
printstring("String",x-Koord,y-Koord,Groesse,Farbe)
z.B. printstring("hier steht mein Text",60,70,2,LCD.blue)
wieder gefolgt von
LCD.show()
D.h. man ruft die Funktion 'printstring' auf und übergibt die Variable 'String, 'xpos', 'ypos', 'size' und 'color'. innerhalb
der Funktion wird eine weitere Funktion 'printchar' aufgerufen, welche das darzustellenden Zeichen (ASCII-Wert) mit Hilfe
der Font_Map bestimmt. Um dies zu veranschaulichen, hier ein Beispiel:
In Zeile 300 des Programms 'counter.py' soll der String "Stoppuhr" in fontsize=2 ausgegeben werden. Die Variable 'spacing' erhält in Zeile
283 den Wert 8 und die Verarbeitung springt für jedes Zeichen des Strings in die Funktion 'printchar'.
300
printstring("Stoppuhr",60,5,2,LCD.white)
278
279
280
281
282
283
284
285
286
287
288
289
def printstring(string,xpos,ypos,size,color):
if size == 1:
spacing = 8
if size == 2:
spacing = 14
if size == 3:
spacing = 22
for i in string:
printchar(i,xpos,ypos,size,color)
xpos+=spacing
Dort wird aus der Font-Map (Zeile 156 bis 252, welche im Beispielprogramm 'counter.py' vollständig vorhanden und dort einzusehen
ist) der ASCII-Code des Zeichens geholt. Das geschieht in Zeile 258. Anschließend werden für jeden darzustellenden Buchstaben
zusätzliche Pixel dazwischen gefügt (Zeile 254 bis 277), damit das wieder vernünftig aussieht. Sollen die Buchstaben noch
größer sein,
ist der Aufwand in der Funktion 'printchar' hier entsprechend größer.
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
270
271
272
273
274
275
276
277
278
def printchar(letter,xpos,ypos,size,color):
origin = xpos
charval = ord(letter)
index = charval-32
character = cmap[index]
rows = [character[i:i+5] for i in range(0,len(character),5)]
for row in rows:
for bit in row:
if bit == '1':
LCD.pixel(xpos,ypos,color)
if size==2:
LCD.pixel(xpos,ypos+1,color)
LCD.pixel(xpos+1,ypos,color)
LCD.pixel(xpos+1,ypos+1,color)
if size==3:
LCD.pixel(xpos,ypos+1,color)
LCD.pixel(xpos,ypos+2,color)
LCD.pixel(xpos+1,ypos,color)
LCD.pixel(xpos+2,ypos,color)
LCD.pixel(xpos+1,ypos+1,color)
LCD.pixel(xpos+2,ypos+2,color)
xpos+=size
xpos=origin
ypos+=size
Damit läßt sich Text in drei Schriftgrößen ausgeben. Downloaden Sie das Beispiel
'counter.py' (hier)
und experimentieren damit.
viel Spass und Erfolg beim Ausprobieren.
weiter zu Pico Man
zurück zum Teil 1
LCD.text("String",x-Koord,y-Koord,Farbe)
z.B. LCD.text("hier steht mein Text",70,120,LCD.white)
gefolgt von
LCD.show()
Um die Schriftgröße nun zu verändern kann man folgende Funktion nutzen:
printstring("String",x-Koord,y-Koord,Groesse,Farbe)
z.B. printstring("hier steht mein Text",60,70,2,LCD.blue)
wieder gefolgt von
LCD.show()
D.h. man ruft die Funktion 'printstring' auf und übergibt die Variable 'String, 'xpos', 'ypos', 'size' und 'color'. innerhalb der Funktion wird eine weitere Funktion 'printchar' aufgerufen, welche das darzustellenden Zeichen (ASCII-Wert) mit Hilfe der Font_Map bestimmt. Um dies zu veranschaulichen, hier ein Beispiel:
In Zeile 300 des Programms 'counter.py' soll der String "Stoppuhr" in fontsize=2 ausgegeben werden. Die Variable 'spacing' erhält in Zeile 283 den Wert 8 und die Verarbeitung springt für jedes Zeichen des Strings in die Funktion 'printchar'.
300
|
printstring("Stoppuhr",60,5,2,LCD.white)
|
278
279
280
281
282
283
284
285
286
287
288
289
|
def printstring(string,xpos,ypos,size,color):
if size == 1:
spacing = 8
if size == 2:
spacing = 14
if size == 3:
spacing = 22
for i in string:
printchar(i,xpos,ypos,size,color)
xpos+=spacing
|
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
270
271
272
273
274
275
276
277
278
|
def printchar(letter,xpos,ypos,size,color):
origin = xpos
charval = ord(letter)
index = charval-32
character = cmap[index]
rows = [character[i:i+5] for i in range(0,len(character),5)]
for row in rows:
for bit in row:
if bit == '1':
LCD.pixel(xpos,ypos,color)
if size==2:
LCD.pixel(xpos,ypos+1,color)
LCD.pixel(xpos+1,ypos,color)
LCD.pixel(xpos+1,ypos+1,color)
if size==3:
LCD.pixel(xpos,ypos+1,color)
LCD.pixel(xpos,ypos+2,color)
LCD.pixel(xpos+1,ypos,color)
LCD.pixel(xpos+2,ypos,color)
LCD.pixel(xpos+1,ypos+1,color)
LCD.pixel(xpos+2,ypos+2,color)
xpos+=size
xpos=origin
ypos+=size
|
viel Spass und Erfolg beim Ausprobieren.
weiter zu Pico Man
zurück zum Teil 1