In den vorherigen Lektionen haben wir unter anderem gelernt, wir wir uns Signale im Seriellen Monitor unseres Editors anzeigen lassen können. Wir wissen, dass wir zum Auslesen des Signals den Seriellen Monitor auf unserem Computer öffnen müssen. Aber was machen wir eigentlich, wenn wir gerade keinen Computer zur Hand haben?
Auch hierfür gibt es in der Mikroelektronik eine einfache Lösung: wir verwenden Displays, auf denen wir einfache Ziffernfolgen (z.B. Worte oder Zahlenwerte) ausgeben können. Diese Displays sind im Vergleich zu herkömmlichen Computerbildschirmen günstig, wesentlich kleiner und dadurch auch flexibler verwendbar. Natürlich darf auch ein solches Display auf unserem Funduino Cube nicht fehlen!
In dieser Lektion möchten wir auf unserem Display die weltweit bekannten Worte „Hello, World!“ darstellen.
Wir starten mit dem Hinzufügen des Blocks für unser OLED mit SSD1306 Treiberchip.
Den Block findest du in deiner ROBOTERKONFIGURATION unter „Aktion„, relativ weit unten.
Nachdem wir den Block zu unserer ROBOTERKONFIGURATION hinzugefügt haben, vergeben wir innerhalb des Blocks einen Namen.
In unserem Beispiel nennen wir den Block „OLED„.
Direkt unter dem Namensfeld befindet sich ein Feld mit dem Titel „Adresse„. In diesem Feld ist der Wert „0x3D“ voreingetragen.
Es handelt sich bei diesem Feld um eine sogenannte HEX-Adresse. HEX-Adressen werden bei Modulen verwendet, die über eine sogenannte I²C (I2C) Schnittstelle kommunizieren.
Aber warum verwenden wir eine HEX-Adresse?
I²C Schnittstellen bieten für Programmierer einen wesentlichen Vorteile:
Hinter der I²C Schnittstelle verbirgt sich ein sogenanntes Bussystem. In diesem Fall ein Master-Slave-Bus. Über ein Bussystem werden Datenpakete von einem „Master“ an einen „Slave“ gesendet. Diese Datenpakete können dabei von einem Master zielgerichtet an unterschiedliche Slaves versendet werden, solange diese sich in dem selben Bussystem befinden.
Damit der „Master“ die „Slaves“ unterscheiden kann, werden die „Slaves“ mit einer HEX-Adresse versehen. In unserem Fall, soll der „Slave“ mit der HEX-Adresse 0x3D (OLED) Datenpakete von „Master“ (Mikrocontroller) erhalten.
Innerhalb des Blocks für das SSD1306 OLED befindet sich zwei weitere Punkte, die wir in den vorherigen Lektionen noch nicht kennengelernt haben.
Die beiden Punkte „SDA“ und „SCL“ werden ebenfalls für die Kommunikation über das I²C Bussystem benötigt.
Über den Pin „SDA“ werden die Datenpakete versendet.
Der Pin „SCL“ gibt das Taktsignal vor, in welchem die Datenpakete übermittelt werden. Der Takt wird über „SCL“ vom „Master“ festgelegt und lediglich vom „Slave“ gelesen. Die Übertragungsrichtung ist hierbei eindeutig festgelegt.
Auf dem SSD1306 OLED auf deinem Funduino Cube findest du diesen beiden Pins ebenfalls wieder. Wir tragen an den entsprechenden Stellen im Block also die Werte „A4“ für SDA und „A5“ für SCL ein.
Den Block für unser OLED mit SSD1306 Treiberchip finden wir im Menü auf der linken Seite innerhalb des OpenRoberta Lab.
Hierfür navigieren wir zunächst in die erweiterte Übersicht, indem wir auf „☆2″ klicken.
Anschließend wählen wir unter „Aktion“ das Menü „Anzeige“ aus und ziehen den Block in unser PROGRAMM.
Du wirst feststellen, dass dieser Block relativ übersichtlich gestaltet ist.
Im Block „Zeige Text„, für welchen der Wert „Hallo“ hinterlegt ist, tragen wir jetzt „Hello, World!“ ein.
Zusätzlich zum Text können wir innerhalb des Blocks noch festlegen, in welcher Spalte und in welcher Zeile der Text ausgegeben werden soll.
Wir legen hierbei jeweils den Startpunkt des ersten Zeichens fest.
Gratulation! Wir haben die Aufgabenstellung erfolgreich gelöst.
Nachdem du dein Programm auf deinen Funduino Cube hochgeladen hast, sollte jetzt der Text „Hello, World!“ erscheinen.
Frage: Schaffst du es, deinen Namen auf dem OLED anzeigen zu lassen?
#include // Einbindung der Bibliothek
#define SCREEN_ADDRESS 0x3C // Festlegen der HEX-Adresse
#define OLED_RESET 4 // Festlegen des RESETs
#define SCREEN_WIDTH 128 // Festlegen der Auflösung (Breite)
#define SCREEN_HEIGHT 64 // Festlegen der Auflösung (HÖHE)
Adafruit_SSD1306 _lcd_OLED(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // Laden der vorherigen Konfigurationen
void setup()
{
_lcd_OLED.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS); // Laden der Standardparameter für das SSD1306 OLED
_lcd_OLED.clearDisplay(); // "Löschen" des Displays
_lcd_OLED.setTextColor(SSD1306_WHITE); // Festlegen der Schriftfarbe
}
void loop()
{
_lcd_OLED.setCursor(0,1); // Festlegen des Startpunktes der ersten Ziffer (Spalte, Zeile)
_lcd_OLED.print("Hello, World!"); // Ausgabe des Textes
_lcd_OLED.display();
}