#include <Adafruit_SSD1306.h>
  #include <Adafruit_GFX.h>

  #include <Fonts/FreeSansBold9pt7b.h>

    #include <Fonts/FreeSansOblique9pt7b.h>


  #define  OLED_RESET -1
  #define SCREEN_WIDTH 128
  #define SCREEN_HEIGHT 64
  Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, 
  OLED_RESET);



  int lademodus_wahl = 0;
  int x = 0;
  int y=0;
  int z=0;
  int sekunden=0;
  int minuten=0;
  int stunden=0;
  int led_on =0;
  int led_blinkt=10;
  int led_leuchtet=20;
  int ladung_beendet=0;
  int stumm=0;


void setup() {
  pinMode(6, INPUT);
  pinMode(7, INPUT);
  pinMode(8, INPUT);
  pinMode(13, OUTPUT);
  pinMode(9, INPUT); //muss wieder gelöscht werden nur zur simulation von gleichzeitigem tastendruck
  // put your setup code here, to run once:
  Serial.begin(115200);
  display.begin(SSD1306_SWITCHCAPVCC,0x3C);


  delay(1000);



// dnt brn my house down 
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);

  display.setCursor(0,0);
  display.print("d");
  display.display();
  delay(30);

  display.setCursor(0,0);
  display.print("dn");
  display.display();
  delay(30);

  display.setCursor(0,0);
  display.print("dnt");
  display.display();
  delay(30);

  display.setCursor(0,0);
  display.print("dnt b");
  display.display();
  delay(30);

  display.setCursor(0,0);
  display.print("dnt br");
  display.display();
  delay(30);

  display.setCursor(0,0);
  display.print("dnt brn");
  display.display();
  delay(30);

  display.setCursor(0,0);
  display.print("dnt brn d");
  display.display();
  delay(30);

  display.setCursor(0,0);
  display.print("dnt brn dw");
  display.display();
  delay(30);

  display.setCursor(0,0);
  display.print("dnt brn dwn");
  display.display();
  delay(30);

  display.setCursor(0,0);
  display.print("dnt brn dwn m");
  display.display();
  delay(30);

  display.setCursor(0,0);
  display.print("dnt brn dwn my");
  display.display();
  delay(30);

  display.setCursor(0,0);
  display.print("dnt brn dwn my h");
  display.display();
  delay(30);

  display.setCursor(0,0);
  display.print("dnt brn dwn my ho");
  display.display();
  delay(30);

  display.setCursor(0,0);
  display.print("dnt brn dwn my hou");
  display.display();
  delay(30);

  display.setCursor(0,0);
  display.print("dnt brn dwn my hous");
  display.display();
  delay(30);

  display.setCursor(0,0);
  display.print("dnt brn dwn my house");
  display.display();
  delay(150);


  display.display();
  delay(300);


// DrALa boXX
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0,10);
  display.print("Dr");

  display.display();
  delay(200);

  display.setCursor(0,10);
  display.print("DrA");

  display.display();
  delay(200);  

  display.setCursor(0,10);
  display.print("DrASi");

  display.display();
  delay(200);

  display.setCursor(0,10);
  display.print("DrASiLa");

    display.display();
  delay(500);

    display.setCursor(90,20); 
  display.print("BOX"); 

  
  display.display();
  delay(800);

// Drohnen Akku Lade Box Juerch 2022
  display.setTextSize(1);
  display.setTextColor(WHITE);

  display.setCursor(0,27);
  display.print("Drohnen");

  display.setCursor(0,37);
  display.print("Akku");

    display.setCursor(0,47);
  display.print("Sicherheits");

    display.setCursor(0,57);
  display.print("Lade Box");

  display.setCursor(92,45);
  display.print("Juerch");

  display.setCursor(100,55);
  display.print("2022");
  display.display();

  okbuttonclick();

  delay(3000);







  menuscreen();

}


void menuscreen() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  display.begin(SSD1306_SWITCHCAPVCC,0x3C);


// dnt brn my house down 
  display.clearDisplay();



  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(12,0);
  display.print("Lademodus waehlen");  
  display.setCursor(12,3);
  display.print("_________________");  


  display.setCursor(58,20);
  display.print("75 %");
  display.setCursor(53,35);
  display.print("100 %");
    display.setCursor(42,50);
  display.print("Dauer EIN");

display.display();
delay(500);

display.drawRoundRect(27,47,78,15,10, WHITE);
display.display();
delay(50);

display.drawRoundRect(27,31,78,15,10, WHITE);
display.display();
delay(50);

display.fillRoundRect(27,15,78,15,10, WHITE);
display.display();
delay(50);

display.drawRoundRect(27,47,78,15,10, BLACK);
display.display();
delay(50);

display.drawRoundRect(27,31,78,15,10, BLACK);
display.display();
delay(50);

display.setTextColor(BLACK);
  display.setCursor(58,20);
  display.print("75 %");

  display.display();
}

void loop() {
  // put your main code here, to run repeatedly:

  if (digitalRead(9)==LOW ) // (digitalRead(7)==LOW & digitalRead(8)==LOW)  <----- muss wieder aktiviert werden wurde zur simulation von zwei gleichzeitigen tastendrücken deaktiviert
  {
    if (stumm==0)
    {
      stumm=1;
      toene_ausschalten();    
    }
    else 
    {
      stumm=0;
      toene_einschalten();
    }
  }



  if (digitalRead(7)==LOW & digitalRead(8)==HIGH)
  {
    lademodus_wahl++;
    buttonclick();

  if(lademodus_wahl==3)
  {
    lademodus_wahl=0;
  }

  if(lademodus_wahl==0)
  {
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(WHITE);
  display.setCursor(12,0);
  display.print("Lademodus waehlen");  
  display.setCursor(12,3);
  display.print("_________________");  
    display.fillRoundRect(27,15,78,15,10, WHITE);
    display.setTextColor(BLACK);
    display.setCursor(58,20);
    display.print("75 %");
    display.setTextColor(WHITE);
    display.setCursor(53,35);
    display.print("100 %");
    display.setCursor(42,50);
    display.print("Dauer EIN");
    display.display();
    delay(500);
  }

  if(lademodus_wahl==1)
  {
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(WHITE);
  display.setCursor(12,0);
  display.print("Lademodus waehlen");  
  display.setCursor(12,3);
  display.print("_________________"); 
    display.fillRoundRect(27,31,78,15,10, WHITE);
    display.setCursor(58,20);
    display.print("75 %");
    display.setTextColor(BLACK);
    display.setCursor(53,35);
    display.print("100 %");
    display.setTextColor(WHITE);
    display.setCursor(42,50);
    display.print("Dauer EIN");
    display.display();
    delay(500);
  }

  if(lademodus_wahl==2)
  {
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(WHITE);
  display.setCursor(12,0);
  display.print("Lademodus waehlen");  
  display.setCursor(12,3);
  display.print("_________________");  
    display.setCursor(58,20);
    display.print("75 %");
    display.setCursor(53,35);
    display.print("100 %");
    display.fillRoundRect(27,47,78,15,10, WHITE);
    display.setTextColor(BLACK);
    display.setCursor(42,50);
    display.print("Dauer EIN");
    display.display();
    delay(500);
  }
  




}

  if (digitalRead(8)==LOW & digitalRead(7)==HIGH)
  {
    okbuttonclick();
    ladung();
  }






}

void ladung()
{
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);

  if (lademodus_wahl==0)
  {
    display.setCursor(35,0);
    display.print("Ladung 75 %"); 
    display.setCursor(33,3);
    display.print("____________"); 
  }

  if (lademodus_wahl==1)
  {
    display.setCursor(34,0);
    display.print("Ladung 100 %"); 
    display.setCursor(32,3);
    display.print("_____________");
  }

  if (lademodus_wahl==2)
  {
    display.setCursor(18,0);
    display.print("Ladung Dauer EIN"); 
    display.setCursor(18,3);
    display.print("________________"); 
  }
  display.display();
  

  
  while (ladung_beendet==0)
  {
    
  x=x+1;

    if (x>106)
  {
    display.fillRect(10,15,x,5, BLACK);
    display.display();
    x=1;
  }
  display.fillRect(10,15,x,5, WHITE);


  display.fillRoundRect(7,25,110,30,10, WHITE);
  display.setTextSize(2);
  display.setTextColor(BLACK);
  display.setCursor(15,32);
  display.print(stunden); 

    display.setCursor(35,32);
  display.print(":"); 

    display.setCursor(55,32);
  display.print(minuten);
  
      display.setCursor(75,32);
  display.print(":"); 

      display.setCursor(90,32);
  display.print(sekunden);

  y++;

  if (y>20)
  {
    sekunden++;
    y=0;
  }

  if (sekunden==60)
  {
    sekunden=0,
    led_on=0;
    minuten++;
  }

    if (minuten==60)
  {
    minuten=0,
    stunden++;
  }

  if (digitalRead(6)==LOW)
  {
    led_on++;
  }

  if (led_on>led_blinkt & lademodus_wahl==0)
  {
    ladung_beendet=1;
  }

  if (led_on>led_leuchtet & lademodus_wahl==1)
  {
    ladung_beendet=1;
  }  





  display.display();
  delay(1);
  }

  ende_screen();
}

void ende_screen()
{
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(9,0);
    display.print("Akkuladung beendet"); 
    display.setCursor(9,3);
    display.print("__________________");
        display.setCursor(0,18);
    display.print("Akku-");
        display.setCursor(0,28);
    display.print("ladung:");    

        display.setCursor(0,50);
    display.print("Ladezeit:"); 

    display.setCursor(70,50);
    display.print(stunden);



    display.setCursor(84,50);
    display.print(":");     


        display.setCursor(91,50);
    display.print(minuten);


    display.setCursor(105,50);
    display.print(":");     

    display.setCursor(113,50);
    display.print(sekunden);


    

    display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(65,20);
  if (lademodus_wahl==0)
  {
        display.print("75 %");
  }

  if (lademodus_wahl==1)
  {
        display.print("100 %");
  }  

  display.display();
  beendet_sound();

  lademodus_wahl = 0;
  x = 0;
  y=0;
  z=0;
  sekunden=0;
  minuten=0;
  stunden=0;
  led_on =0;
  led_blinkt=10;
  led_leuchtet=20;


  while (ladung_beendet==1)
  {
    if (digitalRead(8)==LOW)
    {
      ladung_beendet=0;
      menuscreen();
    }
  }

}

void buttonclick()
{
  if (stumm==0)
  {
    tone(13, 1000, 80); // Plays 262Hz tone for 0.250 seconds
  }
}

void okbuttonclick()
{
  if (stumm==0)
  {
    tone(13, 1620, 250); // Plays 262Hz tone for 0.250 seconds
    delay(100);
    tone(13, 1820, 250); // Plays 262Hz tone for 0.250 seconds
    delay(100);
    tone(13, 2000, 100); // Plays 262Hz tone for 0.250 seconds
  }
}

void beendet_sound()
{
  if (stumm==0)
  {
    while (z<3)
    {
    tone(13, 1620, 250); // Plays 262Hz tone for 0.250 seconds
    delay(100);
    tone(13, 1820, 250); // Plays 262Hz tone for 0.250 seconds
    delay(100);
    tone(13, 2000, 100); // Plays 262Hz tone for 0.250 seconds
delay(400);
        tone(13, 1620, 250); // Plays 262Hz tone for 0.250 seconds
    delay(100);
    tone(13, 1820, 250); // Plays 262Hz tone for 0.250 seconds
    delay(100);
    tone(13, 2000, 100); // Plays 262Hz tone for 0.250 seconds
delay(400);
        tone(13, 1620, 250); // Plays 262Hz tone for 0.250 seconds
    delay(100);
    tone(13, 1820, 250); // Plays 262Hz tone for 0.250 seconds
    delay(100);
    tone(13, 2000, 100); // Plays 262Hz tone for 0.250 seconds
  delay(500);
  tone(13, 1720, 350); // Plays 262Hz tone for 0.250 seconds
  z++;
  delay(5000);
    }

  }
}

void toene_ausschalten()
{
  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(35,15);
  display.print("Toene"); 
  display.setCursor(50,35);
  display.print("aus"); 
  display.display(); 
  delay(1000);
  lademodus_wahl=0;
  menuscreen();
}


void toene_einschalten()
{
  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(35,15);
  display.print("Toene"); 
  display.setCursor(50,35);
  display.print("ein"); 
  display.display(); 
  delay(1000);
  lademodus_wahl=0;
  menuscreen();
}