#include "Arduino.h"
#include <SPI.h>             // SPI für die Kommunikation
#include <Adafruit_GFX.h>    // Adafruit Grafik-Bibliothek wird benötigt
#include <Adafruit_ST7735.h> // Adafruit ST7735-Bibliothek wird benötigt

/***
 * Test für das 1,77 Zoll SPI TFT-Display
 * v1.0 - 2018-01-06
 * Jan Greth <[email protected]>
 ***/

/* Pinnung
 *  Display (Pin) - Arduino Nano
 *  GND  (1) - GND
 *  VCC  (2) - 5V
 *  SCK  (3) - D13    A5
 *  SDA  (4) - D11    A4
 *
 *  RES  (5) - D8
 *  RS   (6) - D9
 *  CS   (7) - D10
 *  LEDA (8) - 3.3V
 *
 *  LEDA kann auch an 5V doch dann wird das Display sehr schnell sehr heiß - was ich nicht für optimal halte.
 *  Beim Betrieb mit 3.3V ist das Dispklay nur minimal dunkler und bleibt kalt.
 */


#define TFT_PIN_CS   10 // Arduino-Pin an Display CS
#define TFT_PIN_DC   9  // Arduino-Pin an
#define TFT_PIN_RST  8  // Arduino Reset-Pin


Adafruit_ST7735 tft = Adafruit_ST7735(TFT_PIN_CS, TFT_PIN_DC, TFT_PIN_RST);  // ST7735-Bibliothek Setup

void setup(void) {

	Serial.begin(115200);

  /***
   * ST7735-Chip initialisieren (INITR_BLACKTAB / INITR_REDTAB / INITR_GREENTAB)
   * Muss bei AZ-Delivery 1.77'' 160x128px RGB TFT INITR_GREENTAB sein ansonsten Pixelfehler rechts und unten.
   * Hinweis: https://github.com/adafruit/Adafruit-ST7735-Library/blob/master/examples/soft_spitftbitmap/soft_spitftbitmap.ino#L52
   * Zeile 52-65
   ***/

  tft.initR(INITR_GREENTAB);
  tft.setRotation(2);

  // fillScreen(farbe);
   tft.fillScreen(ST7735_BLACK);
}

void loop() {

  /***
   * Die tft Funktionen kommen aus der Adafruit Grafik-Bibliothek (Adafruit_GFX) die möglichen Funktionen finden sich unter:
   * https://learn.adafruit.com/adafruit-gfx-graphics-library?view=all
   * bzw.
   * https://cdn-learn.adafruit.com/downloads/pdf/adafruit-gfx-graphics-library.pdf
   ***/



  // drawRect(pos_links,pos_oben,breite,hoehe,farbe);
  tft.drawRect(0,0,128,160,ST7735_BLUE);

  // setTextSize(groesse);
  tft.setTextSize(1);

  // setCursor(links,oben);
  tft.setCursor(30,10);

    // setTextColor(farbe);
  tft.setTextColor(ST7735_WHITE);

  // print(text);
  tft.print("Hello World!");

  // drawLine(links_start,oben_start,links_ende,oben_ende,farbe);
  tft.drawLine(1,25,127,25,ST7735_BLUE);

  // Hier kommt PacMan!
  int ol = 35;
  int ul = 115;

  do {
    tft.fillCircle(64,75,40, ST7735_YELLOW);
    tft.fillTriangle(65,75, 110,ol, 110,ul, ST7735_BLACK);
    tft.fillCircle(64,60,3, ST7735_BLACK);
    ol = ol + 10;
    ul = ul - 10;
    delay(100);
  } while(ol < 75);

  do {
   // tft.fillCircle(64,75,40, ST7735_YELLOW);
    tft.fillTriangle(65,75, 110,ol, 110,ul, ST7735_BLACK);
   // tft.fillCircle(64,60,3, ST7735_BLACK);
    ol = ol - 10;
    ul = ul + 10;
    delay(100);
  } while(ol >= 35);

  // setCursor(von links,von oben);
  tft.setCursor(25,135);
  // setTextColor(farbe);
  tft.setTextColor(ST7735_GREEN);
  // print(text);
  tft.print("www.greth.me");


  Serial.print(".");
  // 5 Sekunden warten
  delay(1000);
}