User manual

81 82
10.4 OLED Display und Zeichensatz
Will man Zeichen darstellen, so kann man auf unsere Zeichenroutinen zurückgreifen.
Mit disp_print_xy_lcd() lässt sich ein Text auf dem Display darstellen. Dazu wird als Parameter die Koordinate
der linken oberen Ecke des ersten Zeichens angegeben (x,y). 0,0 links links oben. Die Zeichenhöhe kann man
mit ca. 10 Pixeln annehmen, wenn man mehrere Zeilen schreibt, so muss man einen entsprechenden Offset
eingeben. In dem Programmbeispiel werden mehrere Textzeilen ausgegeben. Der berühmte Satz „the quick
brown fox jumps over the lazy dog“ enthält alle vorkommenden Zeichen des Alphabets, daher wird er gerne
für solche Beispiele verwendet.
Das Programm verwendet zusätzlich eine Variable yoffset, die bei jedem Durchlauf der Schleife „loop“ um eins
verringert wird. Dadurch entsteht ein Scrolleffekt, der Text läuft nach oben durch. Wenn der Offset von -60
erreicht ist, ist der Bildschirm leer und der Offset wird zurück auf 50 gesetzt, so daß die erste Zeile links unten
erscheint (bei einem Offset von 0 würde der Text oben starten).
+
-
9V
1A
SCLS DA
+9V
A0
A1
Tx
Rx
PD2
SCLKMOSI
PD3
PD 6
PD 4
PD 5
PD 7
A7
A3
A2
A6
NANO
to
Br ick`R`
3,3V 5V
USB
B0
SS
MISC
B1
C
C OLED 64x48
SCL
SDA
SCL
SDA
+9V
Adr:8x,Xx
+9V
// DE_28 OLED Beispiele - Zeichensatz
#include <Wire.h>
#include <avr/pgmspace.h>
// Hier ggf Adresse anpassen 78 oder 7A je nach Schalter
#dene i2coledssd (0x7A>>1) // default ist 7A
// -------------------------OLED ----------------------------------------------
...
// -------------------------END OLED ----------------------------------------------
void setup() {
Wire.begin(); // I2C Initialisieren
i2c_oled_initall(i2coledssd); // OLED Initialisieren danach !
}
void loop() { // Schleife
// 64x48 Pixel OLED
char buffer[40]; // Buffer für die Zeichenaushabe
static int yoffset = 50; // Scrollt von unten rein.
disp_buffer_clear(COLOR_BLACK); // Virtuellen Buffer loeschen
// dann einzelne Zeilen ausgeben, dabei mit einem Offset yoffset.
disp_print_xy_lcd(0, 0+yoffset, (unsigned char*)“the quick“, COLOR_WHITE, 0);
disp_print_xy_lcd(0, 10+yoffset, (unsigned char*)“brown fox“, COLOR_WHITE, 0);
disp_print_xy_lcd(0, 20+yoffset, (unsigned char*)“jumps over“, COLOR_WHITE, 0);
disp_print_xy_lcd(0, 30+yoffset, (unsigned char*)“the lazy“, COLOR_WHITE, 0);
disp_print_xy_lcd(0, 40+yoffset, (unsigned char*)“dog“, COLOR_WHITE, 0);
disp_print_xy_lcd(0, 50+yoffset, (unsigned char*)“0123456890“, COLOR_WHITE, 0);
disp_lcd_frombuffer(); // ann erste buffer ans OLED uebertragen.
delay(10); // Eigentlich nicht noetig aber bei schnellen CPUs sicherer
yoffset = yoffset - 1; // Zeilenweise scrollen 1 Pixel
if (yoffset < -60) yoffset = 50; // wieder von vorne anfangen
} // Ende der Schleife
Was passiert? Der Text „the quick borwn fox jumps over the lazy dog 0123456789“ wird auf dem
DIsplay ausgegeben und scrollt in mehreren Zeilen zerlegt, vertikal über den Bildschirm. Das Ganze
wiederholt sich dann.