//Настройка всего, что есть
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#define TFT_DC 9
#define TFT_CS 10
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
void setup() {
  pinMode(8, OUTPUT);
  tft.begin();
  on();//включение модуля
}
bool ison=false;//Включен ли модуль
void onPos1(){//Включение позиции 1
    tft.fillRect(10, 10, 220, 50,ILI9341_MAGENTA);
  tft.setCursor(90,25);
  tft.setTextColor(ILI9341_WHITE);
  tft.setTextSize(3);
  tft.println("off");
}
void offPos1(){//Выключение позиции 1
tft.fillRect(10, 10, 220, 50,ILI9341_PURPLE);
  tft.setCursor(90,25);
  tft.setTextColor(ILI9341_WHITE);
  tft.setTextSize(3);
  tft.println("off");
}
void onPos2(){//Включение позиции 2
  tft.fillRect(10, 100, 220, 50,ILI9341_MAGENTA);
    tft.setCursor(15,115);
  tft.setTextColor(ILI9341_WHITE);
  tft.setTextSize(3);
  tft.println("What I can?");
}
void offPos2(){//Выключение позиции 2
    tft.fillRect(10, 100, 220, 50,ILI9341_PURPLE);
  tft.setCursor(15,115);
  tft.setTextColor(ILI9341_WHITE);
  tft.setTextSize(3);
  tft.println("What I can?");
}
void offAll(){//Отключение позиций
  offPos1();
  offPos2();
}
void screen(){
  tft.fillScreen(ILI9341_RED);
  tft.fillScreen(ILI9341_YELLOW);
  tft.fillScreen(ILI9341_OLIVE);
  tft.fillScreen(ILI9341_DARKGREEN);
}
void lines(){
  for(int i=1;i<=200;i+=2){
  tft.drawLine(10,50,i,i,ILI9341_BLUE);
  }
  for(int i=200;i>=20;i-=2){
  tft.drawLine(125,300,i,i,ILI9341_MAGENTA);
  }
  for(int i=200;i>=5;i-=2){
    tft.drawLine(210,50,i,i+30,ILI9341_GREEN);
  }
  for(int i=20;i<250;i+=2){
    tft.drawLine(60,270,i,i+20,ILI9341_ORANGE);
  }
}
void demo(){//Демостранция
  tft.fillScreen(ILI9341_BLACK);
  tft.setTextColor(ILI9341_RED);
  tft.setTextSize(4);
  tft.setCursor(25,130);
  tft.println("Looking!");
  tft.setCursor(25,170);
  tft.println("I want!");
  delay(1000);
  screen();
  tft.setCursor(40,100);
  tft.println("change");
  tft.setCursor(40,130);
  tft.println("colors");
  delay(1000);
  tft.fillScreen(ILI9341_BLACK);
  lines();
  tft.setCursor(40,100);
  tft.println("Draw");
  tft.setCursor(40,130);
  tft.println("lines");
}
int pos=1;
void on(){//Функция включения
  tone(8,523,300);//Заставка
  delay(400);
  tone(8,622,300);
  delay(400);
  tft.fillScreen(ILI9341_RED);
  tft.setTextColor(ILI9341_DARKGREEN);
  tft.setTextSize(4.5);
  tft.setCursor(50,130);
  tone(8,466,1500);
  tft.println("I");
  delay(1000);
  tft.setCursor(75,130);
  tft.println("v");
  delay(200);
  tft.setCursor(100,130);
  tft.println("e");
   delay(200);
  tft.setCursor(125,130);
  tft.println("t");
   delay(200);
  tft.setCursor(150,130);
  tft.println("s");
   delay(700);
  tft.setCursor(60,170);
  tft.setTextColor(ILI9341_BLUE);
  tft.setTextSize(2);
  tft.println("techology");
  delay(1200);
  tft.fillScreen(ILI9341_LIGHTGREY);//Включение модуля
  ison=true;
  offAll();
  pos=1;//Начальня позиция 1
}
void off(){//Функция отключения модуля
   tft.fillScreen(ILI9341_RED);
   tft.setTextColor(ILI9341_DARKGREEN);
  tft.setTextSize(4.5);
  tft.setCursor(30,100);
  tft.println("Goodbye!");
  tone(8,440,750);
  delay(750);
  tone(8,587,750);
  delay(1500);
  tft.fillScreen(ILI9341_BLACK);
}

void loop() {
  if (digitalRead(2)==HIGH && ison && pos==1){//Включение позиции 1, если кнопка нажата
    offPos2();
    onPos1();
    pos=2;
    delay(3000);
  if(digitalRead(2)==HIGH && ison) {//Если кнопка удержана более, чем 3сек
    off();
    ison=false;
    
  }
  }
  if (digitalRead(2)==HIGH  && pos==2 && ison){//Включение позиции 2, если кнопка нажата
      onPos2();
      offPos1();
      pos=1;
      delay(3000);
      if(digitalRead(2)==HIGH && ison){//Если кнопка зажата
      demo();
      }
    }
  if(digitalRead(2)==HIGH && ison==false){//Если модуль выключен, то включаем
      on();
       ison=true;
    }
}