/*
Hier ist ein Sketch, der folgendes bewirkt:
- einfachen Text anzeigen
- invertierten Text anzeigen
- Zahlen anzeigen
- Zahlen mit Basis anzeigen (Hex, Dez)
- ASCII-Symbole anzeigen
- Text horizontal und vertikal scrollen
 -Teil der Anzeige scrollen
*/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Parameter für OLED SSD1306 festlegen
#define SCREEN_WIDTH 128 // OLED Breite
#define SCREEN_HEIGHT 64 // OLED Höhe
#define OLED_RESET    -1 // Reset
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
  Wire.begin(21, 20); // SDA, SCL
  Serial.begin(9600);
  
  // initialize the OLED object
  if(!oled.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println(F("SSD1306 - Adresszuweisung fehlgeschlagen!"));
    for(;;); // wenn es nicht funktioniert, dann Endlosschleife
  }
// Anzeigepuffer löschen
  oled.clearDisplay();
  // Display Text
  oled.setTextSize(1);
  oled.setTextColor(WHITE);
  oled.setCursor(0,28);
  oled.println("Hello Lernfeld 7");
  oled.display();
  delay(2000);
  oled.clearDisplay();
  // Display Inverted Text
  oled.setTextColor(BLACK, WHITE); // 'invers'
  oled.setCursor(0,28);
  oled.println("Hallo Lernfeld 7");
  oled.display();
  delay(2000);
  oled.clearDisplay();
  // zeichengröße einstellen
  oled.setTextColor(WHITE);
  oled.setCursor(0,24);
  oled.setTextSize(2);
  oled.println("Hallo!");
  oled.display();
  delay(2000);
  oled.clearDisplay();
  // Zahlen anzeigen
  oled.setTextSize(1);
  oled.setCursor(0,28);
  oled.println(123456789);
  oled.display();
  delay(2000);
  oled.clearDisplay();
  // HEX - DEC anzeigen
  oled.setCursor(0,28);
  oled.print("0x"); oled.print(0xFF, HEX); 
  oled.print("(HEX) = ");
  oled.print(0xFF, DEC);
  oled.println("(DEC)"); 
  oled.display();
  delay(2000);
  oled.clearDisplay();
  // Anzeige ASCII Zeichen
  oled.setCursor(64,24);
  oled.setTextSize(2);
  oled.write(4);
  oled.display();
  delay(2000);
  oled.clearDisplay();
  // Scrollen vom gesamten Display
  oled.setCursor(0,0);
  oled.setTextSize(1);
  oled.println("Scrollen");
  oled.println("vom gesamten");
  oled.println("Display!");
  oled.display();
  oled.startscrollright(0x00, 0x07);
  delay(2000);
  oled.stopscroll();
  delay(1000);
  oled.startscrollleft(0x00, 0x07);
  delay(2000);
  oled.stopscroll();
  delay(1000);    
  oled.startscrolldiagright(0x00, 0x07);
  delay(2000);
  oled.startscrolldiagleft(0x00, 0x07);
  delay(2000);
  oled.stopscroll();
  oled.clearDisplay();
  // Scrollen von einer Zeile
  oled.setCursor(0,0);
  oled.setTextSize(1);
  oled.println("Scrollen");
  oled.println("einer Zeile");
  oled.println("vom Display.");
  oled.display();
  oled.startscrollright(0x01, 0x01); // nur Zeile 2 scrollen
}    
void loop() {
  
  // Hauptprogramm
  
}