/*
Benzin-Pris-Skilt - BPS
Skiltet viser for ARAL 3 priser, der skifter hvert 30. sekund
  95 oktan -tilfældig pris mellem 13,01 kr/l og 15,99 kr/l
  100 oktan - 95 oktan + 87 øre/l
  Diesel - 95 oktan - 111 øre/l
 Koden er beregnet til en 1.77 inch TFT skærm - RGB - 160x128
 Visningen er drejet således at stikket vender nedad

Kabling mellem ESP8266 og TFT - se denne side:
http://goran-juric.from.hr/blog/2020/03/connecting-177-inch-TFT-LCD-screen-ESP8266/

 9-9-2023 - Jens Krogsgaard
 Benzinpriser_TFT_2.ino 

*/
#include <Adafruit_GFX.h>     // Core graphics library
#include <Adafruit_ST7735.h>  // Hardware-specific library for ST7735
#include <SPI.h>

#define TFT_CS 4
#define TFT_RST 16
#define TFT_DC 5

#define WHITE ST7735_WHITE
#define BLUE ST7735_BLUE
#define BLACK ST7735_BLACK
#define YELLOW ST7735_YELLOW

int rand95Oktan;
int rand100Oktan;
int randDiesel;

String Oktan95Kr;
String Oktan95Oere;
String Oktan100Kr;
String Oktan100Oere;
String DieselKr;
String DieselOere;

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

void setup(void) {
  Serial.begin(115200);
  randomSeed(analogRead(0));

  tft.initR(INITR_BLACKTAB);  // Init ST7735S chip, black tab
  tft.fillScreen(BLUE);
  tft.setRotation(2);  // roter skærm - stik nedad

  // Tegn ydre firkant - og opdel skærm i 4 arealer
  tft.drawRect(0, 0, tft.width(), tft.height(), WHITE);
  tft.drawRect(0, 0, tft.width(), 40, WHITE);
  tft.drawRect(0, 40, tft.width(), 80, WHITE);
  tft.drawRect(0, 80, tft.width(), 120, WHITE);
  tft.drawRect(0, 120, tft.width(), 160, WHITE);
  tft.setTextColor(WHITE);

  /* Overskrift */
  tft.setCursor(33, 8);
  tft.setTextSize(3);
  tft.print("ARAL");
  /* linje 1 - 95 oktan */
  tft.setCursor(8, 55);
  tft.setTextSize(2);
  tft.print("95");
  tft.setTextSize(1);
  tft.setCursor(45, 62);
  tft.print("oktan");
  /* linje 2 - 100 oktan */
  tft.setCursor(8, 95);
  tft.setTextSize(2);
  tft.print("100");
  tft.setTextSize(1);
  tft.setCursor(45, 102);
  tft.print("oktan");
  /* linje 3 - Diesel */
  tft.setCursor(8, 135);
  tft.setTextSize(2);
  tft.print("Diesel");
}

void loop() {

  // Beregn priser
  rand95Oktan = random(1301, 1599);
  rand100Oktan = rand95Oktan + 87;
  randDiesel = rand95Oktan - 111;
  // kr og øre i hver sin tekst variabel
  Oktan95Kr = String(rand95Oktan).substring(0, 2);
  Oktan95Oere = String(rand95Oktan).substring(2);
  Oktan100Kr = String(rand100Oktan).substring(0, 2);
  Oktan100Oere = String(rand100Oktan).substring(2);
  DieselKr = String(randDiesel).substring(0, 2);
  DieselOere = String(randDiesel).substring(2);

  tft.setTextColor(YELLOW);

  /* linje 1 - 95 oktan */
  tft.fillRect(80, 45, 45, 30, BLACK);
  tft.setTextSize(2);
  tft.setCursor(85, 55);
  tft.print(Oktan95Kr);
  tft.setTextSize(1);
  tft.setCursor(110, 55);
  tft.print(Oktan95Oere);

  /* linje 2 - 100 oktan */
  tft.fillRect(80, 85, 45, 30, BLACK);
  tft.setTextSize(2);
  tft.setCursor(85, 95);
  tft.print(Oktan100Kr);
  tft.setTextSize(1);
  tft.setCursor(110, 95);
  tft.print(Oktan100Oere);

  /* linje 3 - Diesel */
  tft.fillRect(80, 125, 45, 30, BLACK);
  tft.setTextSize(2);
  tft.setCursor(85, 135);
  tft.print(DieselKr);
  tft.setTextSize(1);
  tft.setCursor(110, 135);
  tft.print(DieselOere);
  // beregn nye priser hvert 30. sekund
  delay(30000);  // 30 sekunder
}