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

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

long ChangeScreen=0;
unsigned long ScreenLastTime=0;
long ScreenSelect = 0;

int UV = 180;
int OV = 260;
int VT = 5500;
int OCS = 25;
int IT = 6000;

int RV = 248;
int YV = 252;
int BV = 238;

int RI = 25;
int YI = 06;
int BI = 38;

int T = 59;

void setup()
{
  Serial.begin(115200);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  // Clear the buffer
  display.clearDisplay();
  // Display Text
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 28);
  display.println("Hello... Hashva!");
  display.display();
  display.clearDisplay();
  delay(1000);
}

void loop()
{

  if(millis()-ChangeScreen>3000)
    {
      ScreenSelect+=1;
      ChangeScreen=millis();
    }
    
  if(millis()-ScreenLastTime>500)
    {
      ScreenLastTime = millis();

      if((ScreenSelect%4)==0)
      { displayVITVals(); } //POT values for UV, OV, Timedelay and OCS
  
      else if( (ScreenSelect%4)==1)
      { displayVIStatus();   } //Instantaenous Voltage, Current and relay status
  
      else if( (ScreenSelect%4)==2)
      { displayTemp();      } //Panel temperature
    }
}

void displayVITVals()
{
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 5);
  display.println("Set:  UV   OV   OCS");
  display.setCursor(32, 17);
  display.println(UV);
  display.setCursor(65, 17);
  display.println(OV);
  display.setCursor(101, 17);
  display.println(OCS);
  display.setCursor(0, 35);
  display.println("V.DelayT:  ");
  display.setCursor(54, 35);
  display.println(VT);
  display.setCursor(90, 35);
  display.println("~ms");
  display.setCursor(0, 55);
  display.println("I.DelayT:  ");
  display.setCursor(54, 55);
  display.println(IT);
  display.setCursor(90, 55);
  display.println("~ms");
  display.display();
  ScreenLastTime = millis();
} 

void displayVIStatus()
{
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.drawCircle(8, 15, 8, WHITE);
  display.drawCircle(8, 38, 8, WHITE);
  display.setCursor(6, 12);
  display.println("V");
  display.setCursor(6, 34);
  display.println("A");
  display.setCursor(0, 0);
  display.println("      R     Y     B");
  display.setCursor(29, 12);
  display.println(RV);
  display.setCursor(65, 12);
  display.println(YV);
  display.setCursor(101, 12);
  display.println(BV);
  display.setCursor(29, 34);
  display.println(RI);
  display.setCursor(65, 34);
  display.println(YI);
  display.setCursor(101, 34);
  display.println(BI);
  display.setCursor(0, 55);
  display.println("STS:");
  display.display();
  ScreenLastTime = millis();
}

void displayTemp()
{
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 10);
  display.println("WiFi:");
  display.setCursor(0, 30);
  display.println("Panel Temp:    *C");
  display.setCursor(67, 30);
  display.println(T);
  display.setCursor(0, 50);
  display.println("Cooling Fan:");
  display.display();
  ScreenLastTime = millis();
}