Die Bibliothek Adafruit_SSD1306 kann ebenso wie die Bibliothek ⇒u8g2 Grafik und Text darstellen.
Pinbelegung eines OLED-Displays am Arduino
Benötigte Bibliothek:
Achte darauf, dass du auch die abhängigen Bibliotheken installierst.
Funktionen der Bibliothek Adafruit_SSD1306
Schlüsselwort | Parameter | Aktion |
---|---|---|
begin(Parameter); | SSD1306_SWITCHCAPVCC, Adresse in Hexadezimal | OLED starten |
dim(Parameter); | true false | Bildschirm dunkler schalten |
width(); | Bildschirmbreite feststellen | |
height(); | Bildschirmhöhe feststellen | |
clearDisplay(); | Bildschirm löschen | |
setRotation(Drehrichtung); | 0 = keine Drehung 1 = 90° im Uhrzeigersinn drehen 2 = 180° drehen 3 = 270° im Uhrzeigersinn drehen | Bildschirm drehen |
fillScreen(Farbe); | Bildschirmhintergrundfarbe festlegen | |
drawPixel(x-Achse, y-Achse, Farbe) | Farbe: WHITE (SSD1306_WHITE) BLACK (SSD1306_BLACK) | einzelnen Pixel zeichnen |
disolay(); | Bildschirm anzeigen | |
drawLine(StartX, StartY, EndeX, EndeY, Farbe); | Farbe: WHITE (SSD1306_WHITE) BLACK (SSD1306_BLACK) | Linie zeichnen |
drawFastVLine(StartX, StartY, Breite, Farbe); | Farbe: WHITE (SSD1306_WHITE) BLACK (SSD1306_BLACK) | Vertikale Linie zeichnen |
drawFastVLine(StartX, StartY, Breite, Farbe); | Farbe: WHITE (SSD1306_WHITE) BLACK (SSD1306_BLACK) | Horizontale Linie zeichnen |
drawRect(StartX, StartY,, Breite, Höhe, Farbe); | Farbe: WHITE (SSD1306_WHITE) BLACK (SSD1306_BLACK) | Rechteck zeichnen |
drawRoundRect(StartX, StartY , Breite, Höhe, Eckenradius, Farbe); | abgerundetes Rechteck zeichnen | |
fillRect(StartX, StartY,, Breite, Höhe, Farbe); | ausgefülltes Rechteck zeichnen | |
fillRoundRect(StartX, StartY , Breite, Höhe, Eckenradius, Farbe); | ausgefülltes, abgerundetes Rechteck zeichnen | |
drawCircle(MittelpunkX, MittelpunktY, Radius, Farbe); | Farbe: WHITE (SSD1306_WHITE) BLACK (SSD1306_BLACK) | Kreis zeichnen |
fillCircle(MittelpunkX, MittelpunktY, Radius); | Ausgefüllten Kreis zeichnen | |
setCursor(x-Achse, y-Achse); | Cursor setzen | |
print("Text"); | Text schreiben | |
write(Zeichen) | einzelnes Zeichen schreiben |
So sieht es aus:
#include "Adafruit_GFX.h"
#include "Adafruit_SSD1306.h"
// Maße des Bildschirms
#define BildschirmBreite 128
#define BildschirmHoehe 64
#define OLED_RESET 4
// Adresse: 0x3C oder 0x3D
#define Adresse 0x3c
// Name des Displays und Startparameter
Adafruit_SSD1306 oled(BildschirmBreite, BildschirmHoehe, &Wire, OLED_RESET);
void setup()
{
// OLED starten
oled.begin(SSD1306_SWITCHCAPVCC, Adresse);
// Bildschirm löschen
oled.clearDisplay();
// Schriftfarbe und -größe
oled.setTextColor(WHITE);
// Textgröße (1-3)
oled.setTextSize(2);
// Codepage auf 437 setzen -> Sonderzeichen anzeigen
oled.cp437(true);
// Display dunkler stellen
oled.dim(true);
}
void loop()
{
// ausgefüllte Kreise von links nach rechts
int Radius = 3;
// Start am linken Rand
int StartX = Radius;
int StartY = 5;
while (StartX < oled.width() - Radius)
{
for (int i = StartY; i < oled.height() - Radius; i += 10) {
oled.fillCircle(StartX, i, Radius, WHITE);
oled.display();
delay(1);
}
StartX += 10;
}
delay(500);
oled.clearDisplay();
// ausgefüllte Kreise von rechts nach links
// Start am rechten Rand
StartX = oled.width() - Radius;
StartY = 5;
// solange der linke Rand nicht erreicht wurde
while (StartX > Radius)
{
for (int i = StartY; i < oled.height() - Radius; i += 10)
{
oled.fillCircle(StartX, i, Radius, WHITE);
oled.display();
delay(10);
}
// 10 Pixel weiter nach links
StartX -= 10;
}
delay(500);
// Kreise
Radius = 5;
StartX = Radius;
while (StartX < oled.width() - Radius)
{
for (int i = StartY; i < oled.height() - Radius; i += 15)
{
oled.drawCircle(StartX, i, Radius, WHITE);
oled.display();
delay(1);
}
StartX += 15;
}
delay(500);
oled.clearDisplay();
// diagonale Linien
for (int i = 0; i < oled.width(); i += 4)
{
oled.drawLine(0, 0, i, oled.height() - 1, WHITE);
oled.display();
delay(1);
}
for (int i = 0; i < oled.height(); i += 4)
{
oled.drawLine(0, 0, oled.width() - 1, i, WHITE);
oled.display();
delay(1);
}
delay(500);
oled.clearDisplay();
// horizontale Linie mit drawLine
for (int i = 0; i < oled.height() - 1; i += 4)
{
oled.drawLine(0, i, oled.width() - 1, i, WHITE);
oled.display();
delay(1);
}
oled.clearDisplay();
delay(500);
// horizontale Linien mit drawFastHLine
for (int i = 0; i < oled.height() - 1; i += 4)
{
oled.drawFastHLine(0, i, oled.width(), WHITE);
oled.display();
delay(1);
}
oled.clearDisplay();
delay(500);
// vertikale Linie mit drawLine
for (int i = 0; i < oled.width() - 1; i += 4)
{
oled.drawLine(i, 0, i, oled.height() - 1, WHITE);
oled.display();
delay(1);
}
oled.clearDisplay();
delay(500);
// vertikale Linien mit drawFastVLine
for (int i = 0; i < oled.width() - 1; i += 4)
{
oled.drawFastVLine(i, 0, oled.height(), WHITE);
oled.display();
delay(1);
}
oled.clearDisplay();
delay(500);
// Rechtecke
for (int i = 0; i < oled.height() / 2; i += 4)
{
oled.drawRect(i, i, oled.width() - 2 * i, oled.height() - 2 * i, WHITE);
oled.display();
delay(10);
}
delay(500);
oled.clearDisplay();
// abgerundete Rechtecke
for (int i = 0; i < oled.height() / 2; i += 4)
{
oled.drawRoundRect(i, i, oled.width() - 2 * i, oled.height() - 2 * i, 5, WHITE);
oled.display();
delay(10);
}
delay(500);
oled.clearDisplay();
// einzelne Pixel zufällig anordnen
for (int i = 0; i < 500; i++)
{
int x = random(1, oled.width());
int y = random(1, oled.height());
oled.drawPixel(x, y, WHITE);
delay(2);
}
oled.display();
delay(500);
oled.clearDisplay();
oled.setTextSize(2);
oled.setCursor(0, 0);
oled.print("Text");
oled.display();
delay(500);
oled.clearDisplay();
// Sonderzeichen
oled.setCursor(0, 0);
oled.print("Sonder-");
oled.setCursor(0, 15);
oled.print("-zeichen:");
oled.display();
delay(500);
oled.clearDisplay();
oled.setCursor(0, 0);
oled.write("\x84"); // ä -> 132
oled.write("\x94"); // ö -> 148
oled.write("\x81"); // ü -> 129
oled.write("\x8e"); // Ä -> 142
oled.write("\x99"); // Ö -> 153
oled.write("\x9a"); // Ü -> 154
oled.write("\xe1"); // ß -> 224
oled.write("\xe0"); // alpha -> 223
oled.write("\xe4"); // Summenzeichen -> 228
oled.write("\xe3"); // PI -> 227
oled.write("\xea"); // Ohm -> 234
oled.write("\xed"); // Durchschnitt -> 237
oled.write("\xee"); // PI -> 238
oled.write("\x10"); // Pfeil links -> 16
oled.write("\x11"); // Pfeil rechts -> 17
oled.write("\x12"); // Pfeil oben und unten -> 18
oled.write("\x7b"); // { -> 123
oled.write("\x7c"); // | -> 124
oled.write("\x7d"); // } ~ -> 125
oled.write("\xf8"); // ° -> 248
oled.display();
delay(2000);
oled.clearDisplay();
// Lauftext
oled.setTextSize(2);
oled.setTextColor(SSD1306_WHITE);
oled.setCursor(0, 0);
oled.println("Text");
oled.display();
oled.startscrollright(0x00, 0x0F);
delay(4000);
oled.stopscroll();
delay(500);
oled.startscrollleft(0x00, 0x0F);
delay(4000);
oled.stopscroll();
delay(500);
oled.clearDisplay();
}
I²C-Adresse herausfinden:
#include "Wire.h"
void setup()
{
Wire.begin();
Serial.begin(9600);
delay(500);
Serial.print("I2C Scanner");
}
void loop()
{
byte Fehler, Adresse;
int Geraete = 0;
Serial.println("Starte Scanvorgang");
for (Adresse = 1; Adresse < 127; Adresse++ )
{
// Übertragung starten
Wire.beginTransmission(Adresse);
// wenn die Übertragung beendet wird
Fehler = Wire.endTransmission();
if (Fehler == 0)
{
Serial.print("I2C Gerät gefunden - Adresse: 0x");
if (Adresse < 16) Serial.print("0");
Serial.print(Adresse, HEX);
Serial.println("");
Geraete++;
}
}
if (Geraete == 0) Serial.println("Keine I2C Geräte gefunden\n");
else Serial.println("Scanvorgang abgeschlossen");
delay(10000);
}
Hier findest du einen Überblick über die 🔗Adafruit class reference SSD1306 (externer Link abgerufen am 07.12.23).
Letzte Aktualisierung: