Arduino Projekt: Darstellen von Text und Grafik auf einem OLED Display

In diesem kleinen Projekt möchte ich nun zwei Namen sowie ein Herz auf dem Wemos D1 mini  OLED Display Shield anzeigen.

Die Idee zu diesem Mini Projekt entstand aus einer eMail eines Lesers meines Blogges, dieser hatte mich gefragt ob das möglich ist einen Text & ein Herz auf dem 0,66Zoll Display anzuzeigen. Somit kann ich nur bestätigen: “Ja es ist möglich.”.

WemosD1 min OLED Display - Herz
WemosD1 min OLED Display – Herz

Das Wemos D1 mini  OLED Display Shield habe ich bereits im Tutorial Wemos D1 mini Shield: 0,66 Zoll OLED Display vorgestellt. Daher möchte ich in diesem kurzen Beitrag auf das kleine Projekt eingehen.

Es soll wie eingangs erwähnt zwei Namen sowie ein kleines Herz angezeigt werden, das Herz kann man entweder als XBM Grafik laden oder aber Pixel für Pixel erzeugen. Da ich mit der XBM Grafik und der Adafruit SSD1306 Bibliothek keinen erfolg hatte habe ich mich für das zeichnen per Pixel entschieden. 

Wenn man die Grafik jedoch per Pixel zeichnen möchte so muss man etwas umdenken ansonsten wird die Grafik um 90 Grad verkehrt angezeigt.

Quellcode

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 0  // GPIO0

int herzPixels[24][24] = {
    {BLACK,BLACK,BLACK,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK},
    {BLACK,BLACK,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK},
    {BLACK,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK},
    {BLACK,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK},
    {BLACK,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK},
    {BLACK,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK,BLACK},
    {BLACK,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK,BLACK},
    {BLACK,BLACK,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK,BLACK},
    {BLACK,BLACK,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK},
    {BLACK,BLACK,BLACK,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK,BLACK},
    {BLACK,BLACK,BLACK,BLACK,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK},
    {BLACK,BLACK,BLACK,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK,BLACK},
    {BLACK,BLACK,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK},
    {BLACK,BLACK,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK,BLACK},
    {BLACK,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK,BLACK},
    {BLACK,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK,BLACK},
    {BLACK,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK},
    {BLACK,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK},
    {BLACK,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK},
    {BLACK,BLACK,WHITE,WHITE,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK},
    {BLACK,BLACK,BLACK,WHITE,WHITE,WHITE,WHITE,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK,BLACK},
  };

Adafruit_SSD1306 display(OLED_RESET);

String name1 = "Stefan";
String name2 = "Anna";

void setup()   {
  //initialisieren mit der I2C Adresse 0x3C für das 64 x 48 Pixel große Display.
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  //display starten
  display.display();
  //kleine Pause von 2 sek.
  //Das Display und die Bibliothek startet, auf dem Display erscheint arda.....
  delay(2000);
  //Alle Zeichen auf dem Display löschen.
  display.clearDisplay(); 
  
  //Textgröße auf 1 (das kleinste) setzen
  display.setTextSize(1);
  //Textfarbe weiß
  display.setTextColor(WHITE);

  display.setCursor(38,8);
  display.println(name1);

  display.setCursor(70,25);
  display.println(name2);

  zeichneHerz(38,18);

  display.display();
}

void zeichneHerz(int x, int y){
  for(int i=0;i<21;i++){ 
    for(int a=0;a<16;a++){
        int value = herzPixels[i][a];
        display.drawPixel(x+i, y+a,value);      
      }  
  }
}

void loop(){

}

 

Ein Kommentar

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.