Черный экран и больше ничего. Помогите советом

Нет ответов
dominion
Offline
Зарегистрирован: 30.05.2016

Всем привет! Есть скетч. Проект бортового компьютера для авто. Загружаю скетч в ардуино нано. Заливает черным экран и дальше ничего. Ни надписей, никаких действий. Подскажите где ошибка? Да и к машине пока не подключен.

 

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <gfxfont.h>
#include <Adafruit_ST7735.h>
#include <Wire.h>
//#include <LiquidCrystal_I2C.h>
//#include <LiquidCrystal.h>

#include <OneWire.h>
#include <EEPROM.h>
#include "RTClib.h"
RTC_DS1307 rtc;

#define TFT_CS     10    //CS на дисплее
#define TFT_RST    9     //RESET на дисплее
#define TFT_DC     8     //AO на дисплее
#define TFT_SCLK   13    //SCK на дисплее
#define TFT_MOSI   11    //SDA на дисплее
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS,  TFT_DC, TFT_RST);
 

OneWire  ds(14);                 //датчик 18в20 на выводе А0

#define BUFFER_SIZE 100         // Буфер для хранения данных последовательного порта
#define buffer_errors_size 20   // Буфер для ошибок ЭБУ
#define buzz 12                 // Вывод пищалки
#define backlight 11            // Вывод управления подсветкой дисплея

//--------------------------назначение ячеек в памяти EEPROM------------------------
#define eepautolightstat 10
#define eepautolightoff 11
#define eepautolighton 12
#define eepcoolfanstat 13
#define eepcoolfanoff 14
#define eepcoolfanon 15
#define eepheatfanon 16
#define eepheatfan1 17
#define eepheatfan2 18
#define eepbacklight 19

//-------------------------команды для обмена данными и управления ЭБУ-----------------------
unsigned char stopCommunication[]                  = {0x81, 0x10, 0xF1, 0x82, 0x04};
unsigned char startCommunication[]                 = {0x81, 0x10, 0xF1, 0x81, 0x03};                      //старт диагностического сеанса
unsigned char readDataByLocalIdentifier_RLI_ASS[]  = {0x82, 0x10, 0xF1, 0x21, 0x01, 0xA5};                //запрос диагностических данных
unsigned char readDTCByStatus[]                    = {0x84, 0x10, 0xF1, 0x18, 0x00, 0x00, 0x00, 0x9D};    //запрос кодов ошибок
unsigned char startcoolfan[]                       = {0x84, 0x10, 0xF1, 0x30, 0x0A, 0x06, 0x01, 0xC6};
unsigned char stopcoolfan[]                        = {0x83, 0x10, 0xf1, 0x30, 0x0A, 0x00, 0xBE};
unsigned char clearerrors[]                        = {0x83, 0x10, 0xF1, 0x14, 0x00, 0x00, 0x98};
unsigned char statusfan[]                          = {0x83, 0x10, 0xF1, 0x30, 0x0A, 0x01, 0xBF};

byte ds_check = 1;
byte val_heat = 1;
byte Spd = 1;
byte To = 1;
byte Toon = 0;
byte Gaz = 1;
short obr = 1;
float u = 1;
float FuelRateKm = 1;
float Fuelhoure = 1;
byte bot_long = 0;
int light_sensor = 0;
int lt_time = 0;
float celsius = 0;

byte eepromi;
byte eeprom1;
byte eeprom2;
int light_sensor_summ = 0;
byte val_coolfan_stat = 0;

byte kol_er = 0;

int yeartime;
byte monthtime;
byte daytime;
byte hourtime;
byte minutetime;
byte secondtime;
byte clockinit = 0;
byte clockfirst = 1;

byte eepromltst = 0;
byte eepromlton = 1;
byte eepromltoff = 1;
byte eeprombllight = 0;
byte eepromfan = 0;
byte eepromf1 = 0;
byte eepromf2 = 0;
byte eepromcool = 0;
byte eepromcooloff = 0;
byte eepromcoolon = 0;


byte bottom = 0;
byte Spd1 = 0;
byte To1 = 0;
byte Gaz1 = 0;
short obr1 = 0;
float u1 = 0;
float FuelRateKml = 0;
float Fuelhoure1 = 0;

byte i = 0;
unsigned char buffer[BUFFER_SIZE];                                      //буфер для приема сообщений с тачки
unsigned char buffer_errors [buffer_errors_size];
byte bufSize = 0;

uint8_t clr[8] = {B00000, B00000, B00000, B00000, B00000, B00000, B00000, B00000};

uint8_t l_h[8] = {B10000, B10001, B11010, B00100, B01000, B10101, B00111, B00101};  // Знак расход в час
uint8_t l1_100[8] = {B00100, B00100, B00100, B00111, B00000, B10111, B10101, B10111}; // Знак расхода на 100 старший
uint8_t l2_100[8] = {B00010, B00100, B01000, B10000, B00000, B11100, B10100, B11100}; // Знак расхода на 100 младший
// uint8_t load_5[8] = {B11100,B11100,B11100,B11111,B11111,B11111,B11111,B11111};
uint8_t temp[8] = {B11000, B11000, B00000, B00111, B00100, B00100, B00111, B00000}; // Знак температуры

float p = 3.1415926;

void setup(void) {

  Serial.begin(9600);

  Serial.print("Инициализация....");

 
  // Use this initializer if you're using a 1.8" TFT

  tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab
  
Serial.println("Initialized");

  uint16_t time = millis();

  tft.fillScreen(ST7735_BLACK);
  tft.setRotation(3);


  eeprominit();
/*  // set up the LCD's number of columns and rows:
  tft.begin(16, 2);
  //  tft.init();
  //  tft.backlight();*/

  //pinMode(14, OUTPUT);
  Serial.begin(10400);
  Wire.begin();
 rtc.begin();

  /*tft.createChar(1, clr);
  tft.createChar(3, l1_100);
  tft.createChar(4, l2_100);
  tft.createChar(5, l_h);
  tft.createChar(6, temp);      //Максимум до восьми пользовательских символов  (0 - 7 нумерация)*/




  if (! rtc.isrunning()) {
    tft.setCursor(0, 0);
    tft.setTextColor(ST7735_GREEN);
    tft.setTextSize(2);
    tft.print("RTC is NOT");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(2015, 5, 29, 13, 55, 0));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }
  pinMode(backlight, OUTPUT);
 // pinMode(FAN_HEAT, OUTPUT);
  //pinMode(ON_LIGHT, OUTPUT);
 // digitalWrite(FAN_HEAT, HIGH); // Выключить печку
 // digitalWrite(ON_LIGHT, LOW); // Выключить автосвет
  analogWrite(backlight, 150); //Начальный уровень подсветки дисплея

  clockfirst = 1;
  tft.fillScreen(ST7735_BLACK);
  initcon();

  // tft.fillScreen(ST7735_BLACK);
}

void loop()
{

  //  Serial.write(startCommunication, 5);
  //  delay(30);

  Serial.write(readDataByLocalIdentifier_RLI_ASS, 6);     // Запрос на прием диагностических данных
  bott_150ms();


  //-----------------------------------------------------------Чтение данных из порта---------------------------------//
  readbuf();

  if (buffer[10] == 0x61) {             // Положительный ответ (buffer[10] == 0x61)           //
    Spd1 = buffer[29];                                      // Скорость авто                                      //
    Gaz1 = buffer[22];                                      // Положение дросельной заслонки                      //
    To1 = buffer[20] - 40;                                  // Температура ОЖ                                     //
    obr1 = buffer[23] * 40;                                 // Обороты двигателя                                  //
    u1 = 5.2 + buffer[30] * 0.05;                           // Напряжение бортовой сети                           //
    FuelRateKml = ((buffer[41] << 8) | buffer[40]) / 128.0; // Средний расход топлива на км                       //
    Fuelhoure1 = ((buffer[39] << 8) | buffer[38]) / 50.0;   // Средний расход топлива в час                       //

  }                                                                                                                //
  //------------------------------------------------------------------------------------------------------------------//

  //---------показания расхода топлива литров на 100км и скорости если скорость больше 0--------------------------

  if (Spd1 > 0)
  {
    if (Spd1 != Spd)
    {
      Spd = Spd1;
      tft.setCursor(11, 1);
      tft.print(char(1));
      if (Spd < 100) tft.print (char(1));
      if (Spd < 10) tft.print (char(1));
      tft.print(Spd);
      tft.print("S");
    }

    if ( FuelRateKm != FuelRateKml)
    {
      FuelRateKm = FuelRateKml;
      tft.setCursor(4, 1);
      if (FuelRateKm < 100) tft.print(char(1));
      if (FuelRateKm < 10) tft.print(char(1));
      tft.print(FuelRateKm, 1);
      tft.print(char(3));
      tft.print(char(4));
      tft.print(char(1));
    }

  }

  //--------------------часы и расход топлива в час если скорость равно 0----------------
  if (Spd1 == 0)
  {

    DateTime now = rtc.now();
    tft.setCursor(11, 1);
    if (now.hour() < 10) tft.print ("0");
    tft.print(now.hour(), DEC);
    tft.print(":");
    if (now.minute() < 10) tft.print ("0");
    tft.print(now.minute(), DEC);

    /*
        int val = analogRead(A1);
        tft.setCursor(11, 1);
        if (val < 1000) tft.print(char(1));
        if (val < 100) tft.print(char(1));
        tft.print(val);
    */

    if (Fuelhoure != Fuelhoure1)
    {
      Fuelhoure = Fuelhoure1;
      tft.setCursor(4, 1);
      if (Fuelhoure < 100) tft.print(char(1));
      if (Fuelhoure < 10) tft.print(char(1));
      tft.print(Fuelhoure, 1);
      tft.print(char(5));
      tft.print(char(1));
    }
  }

  //------------температура салона или положение дросельной заслонки если она больше 0%-----------------------------------
  if (Gaz1 == 0)
  {
    dallas_read();
    tft.setCursor(0, 1);
    if ((celsius > -10) && (celsius < 100)) tft.print (char(1));
    if ((celsius < 10) && (celsius >= 0)) tft.print (char(1));
    tft.print(celsius, 0);
    tft.print(char(6));       //Символ температуры
    tft.print(char(1));
  } else if (Gaz1 != Gaz)
  {
    Gaz = Gaz1;
    tft.setCursor(0, 1);
    tft.print(char(1));
    if (Gaz < 10) tft.print (char(1));
    tft.print(Gaz);
    tft.print("%");
  }

  //-----------------------------------показания оборотов-----------------------------------------------------------
  if (obr1 != obr)
  {
    obr = obr1;
    tft.setCursor(6, 0);
    if (obr < 1000) tft.print(char(1));
    if (obr < 100)
    {
      tft.print(char(1));
      tft.print(char(1));
      obr = 0;
    }
    tft.print (obr);
  }

  //-------------------------------------показания температуры двигателя------------------------------------------------------
  if ((To1 != To))
  {
    To = To1;
    tft.setCursor(0, 0);
    if ((To > -10) && (To < 100)) tft.print (char(1));
    if ((To < 10) && (To >= 0)) tft.print (char(1));
    tft.print(To);
    tft.print(char(6));       //Символ температуры
    tft.print(char(1));
  }


  //----------------------------------------------показания напряжения------------------------------------------
  if (u1 != u)
  {
    u = u1;
    tft.setCursor(11, 0);
    if (u < 10) tft.print (char(1));
    tft.print(u, 1);
    tft.print("V");
  }






  //-----------------процедура включения вентилятора печки салона----------------------
 // salon_fan_on();                                                                   //
  //-----------------------------------------------------------------------------------

  //-----------------процедура автосвета-----------------------------------------------
  //auto_and_backlight();                                                             //
  //-----------------------------------------------------------------------------------

  //----- процедура принудительного включения вентилятора радиатора ------------------
  checkcoolfan();                                                                  //
  //----------------------------------------------------------------------------------


  //-------------------------------------опрос кнопок------------------------------------------
  bottoms();
  // if (bottom == 111) alarm_OIL(); //--Если лампочка масла горит длительное время-------------

  if (bottom == 21) time_5sec();  //------------краткое нажатие кнопки вверх-------------------

  if (bottom == 32) setupmenu(); //--------длительное нажатие кнопки ввниз---------------------

  if (bottom == 31) control_stat(); //-----------краткое нажатие кнопки ввниз------------------

  if (bottom == 22) check_errors(); //----------длительное нажатие кнопки вверх----------------



}

////////////////////////////////////////////////END LOOP///////////////////////////////////////

//---------------------показ часов продолжительностью 5 секунд-------------------------------
void time_5sec()
{
  bottom = 0;
  tft.fillScreen(ST7735_BLACK);
  for (int t_v = 0; t_v < 30; t_v++) //-----продолжительности показа часов при кратком нажатии вверх--------
  {
    clockRTC();
    bott_150ms();
  }

  initcon();
}

void light_sensor_read()
{
  for (int summ = 1; summ <= 10; summ ++)
  {

    light_sensor_summ = light_sensor_summ + (analogRead(A7));
    delay(1);
  }
  light_sensor = light_sensor_summ / 10;
  light_sensor_summ = 0;
}

/*void auto_and_backlight()
{
  //-------------показания датчика освещенности и включение света и приглушение подсветки с интервалом 10 сек---------------------
  eepromltst = EEPROM.read(eepautolightstat);

  //light_sensor = analogRead(A7); //----чтение показания датчика освещенности---------
  eepromlton = EEPROM.read(eepautolighton);

  eepromltoff = EEPROM.read(eepautolightoff);

  eeprombllight = EEPROM.read(eepbacklight);

  /*
  tft.setCursor(0, 1);
  tft.print(eepromltoff);
  tft.setCursor(6, 1);
  tft.print(light_sensor);
  tft.setCursor(11, 1);
  tft.print(eepromlton);
  tft.setCursor(0, 0);
  tft.print(eepromltst);
  
  light_sensor_read();

  if (light_sensor > (eepromlton * 4))
  {
    lt_time = lt_time + 1;
    if (lt_time == 25)     //-------------задержка времени включения
    {
      //  lt_time = 0;
      analogWrite (backlight, eeprombllight); //-----притушить подсветку дисплея согласно переменной
      beep();
      if (eepromltst == 1 && obr1 > 600) digitalWrite(ON_LIGHT, HIGH);              //-----включить свет
    }
  }



  if (light_sensor < (eepromltoff * 4))
  {
    lt_time = lt_time + 1;
    if (lt_time == 25)       //-------------задержка времени выключения
    {
      // lt_time = 0;
      beep();
      analogWrite (backlight, 150);   //----максимальная яркость дисплея
      if (eepromltst == 1) digitalWrite(ON_LIGHT, LOW);          //----выключить свет
    }
  }

  if ((light_sensor > (eepromltoff * 4)) && (light_sensor < (eepromlton * 4))) lt_time = 0;
  if (lt_time > 30000) lt_time = 0;
}

/*void salon_fan_on()
{
  //-------- Если температура салона или температура двигателя выше заданных включить печку, ----
  //--------------если это разрешено иначе включить печку постоянно---------------------
  eepromfan = EEPROM.read(eepheatfanon);
  if (eepromfan == 1)
  {
    eepromf1 = EEPROM.read(eepheatfan1);
    eepromf2 = EEPROM.read(eepheatfan2);
    val_heat = val_heat + 1;

    if (val_heat == 20) val_heat = 1;

    if (((celsius >= eepromf1 && celsius < 80) || To >= eepromf2) && val_heat == 1)
    {
      val_heat = 0;
      digitalWrite(FAN_HEAT, LOW);
      beep();
    }

  }
  if (eepromfan == 0) digitalWrite (FAN_HEAT, LOW);
}


void alarm_OIL()
{
  bottom = 0;
  if ( obr1 > 500)
  {
    int alarm_n = 10; //---продолжительность сигнализации------------
    do
    {

      tft.fillScreen(ST7735_BLACK);
      tft.setCursor(2, 0);
      tft.print("LOW Pressure");
      tft.setCursor(6, 1);
      tft.print("OIL");
      analogWrite(backlight, 0);
      long_beep();
      analogWrite(backlight, 255);
      delay(500);
      alarm_n = alarm_n - 1;
    } while (alarm_n != 0);
    initcon();
  }

}
*/
void long_beep()
{
  digitalWrite(buzz, HIGH);
  delay(500);
  digitalWrite(buzz, LOW);
}

void control_stat()
{
  bottom = 0;
  tft.fillScreen(ST7735_BLACK);
  // int val_light = digitalRead(ON_LIGHT); //----считывание выхода света--------------

  tft.setCursor(0, 0);
  tft.print("Salon");
  tft.setCursor(6, 0);
  if (val_heat == 0) tft.print("ON");
  if (val_heat != 0) tft.print("OFF");
  tft.setCursor(0, 1);
  tft.print("Cool");
  tft.setCursor(5, 1);
  if (val_coolfan_stat == 1) tft.print("ON");
  if (val_coolfan_stat == 0) tft.print("OFF");
  tft.setCursor(11, 0);
  tft.print("Light");
  // tft.setCursor(12, 1);
  light_sensor_read();
  tft.setCursor(11, 1);
  if (light_sensor < 1000) tft.print(char(1));
  if (light_sensor < 100) tft.print(char(1));
  tft.print(light_sensor);
  //  if (val_light == 1) tft.print("ON");
  //  if (val_light == 0) tft.print("OFF");
  delay(5000); //-----продолжительность показа состояния выходов-------
  initcon();

}

//--------------------включение/выключение вентилятора радиатора если разрешено----------------
void checkcoolfan()
{

  eepromcool = EEPROM.read(eepcoolfanstat);
  if ((eepromcool == 1) && (To1 != Toon))
  {
    eepromcooloff = EEPROM.read(eepcoolfanoff);
    eepromcoolon = EEPROM.read(eepcoolfanon);
    Toon = To1;
    if (Toon >= eepromcoolon && val_coolfan_stat == 0)
    {
      val_coolfan_stat = 1;
      Serial.write(startcoolfan, 8);
      beep();
      tft.setCursor(4, 0);
      tft.print("*");
      // delay(25);
    }
    if (Toon <= eepromcooloff && val_coolfan_stat == 1)
    {
      val_coolfan_stat = 0;
      Serial.write(stopcoolfan, 7);
      beep();
      tft.setCursor(4, 0);
      tft.print(char(1));
      // delay(25);
    }
  }
}

//-----------------------снятие показаний датчика температуры------------------------------
void dallas_read()
{

  byte i;
  byte type_s = 0;
  byte data[12];
  byte addr[8];

  if ( !ds.search(addr)) {
    ds.reset_search();
    bott_150ms();
    bott_150ms();
    return;
  }

  ds.reset();
  ds.select(addr);       // Выбираем адрес
  //ds.write (0xCC);
  ds.write(0x44);     // Производим замер
  delay(50);

  do
  {
    ds_check = digitalRead(14);
    bottoms();
    delay(50);
  } while (ds_check == 0);



  //  bott_500ms();
  //  bott_500ms();
  ds.reset();
  ds.select(addr);
  //ds.write (0xCC);
  ds.write(0xBE);         // Считываем оперативную память датчика

  for ( i = 0; i < 9; i++) {
    data[i] = ds.read();  // Заполняем массив считанными данными
  }

  // Данные о температуре содержатся в первых двух байтах, переведем их в одно значение и преобразуем в шестнадцатиразрядное число
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3;
    if (data[7] == 0x10) {
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  }
  else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw & ~7;
    else if (cfg == 0x20) raw = raw & ~3;
    else if (cfg == 0x40) raw = raw & ~1;
  }
  celsius =  (float)raw / 16.0;
}

void clockRTC()
{
  DateTime now = rtc.now();
  tft.setCursor(3, 0);
  if (now.day() < 10) tft.print ("0");
  tft.print(now.day(), DEC);
  tft.print(".");
  if (now.month() < 10) tft.print ("0");
  tft.print(now.month(), DEC);
  tft.print(".");
  tft.print(now.year(), DEC);
  tft.setCursor(4, 1);
  if (now.hour() < 10) tft.print ("0");
  tft.print(now.hour(), DEC);
  tft.print(":");
  if (now.minute() < 10) tft.print ("0");
  tft.print(now.minute(), DEC);
  tft.print(":");
  if (now.second() < 10) tft.print ("0");
  tft.print(now.second(), DEC);

  if (bottom == 32) setupmenu();
}



//--------------------процедура установки связи с ЭБУ-------------------------------------
void initcon()
{


  do
  {
    Serial.write(stopCommunication, 5);
    bott_150ms();
    Serial.write(startCommunication, 5);
    bott_150ms();
    readbuf();
    if (clockfirst == 1)
    {
      /*
      dallas_read();
      tft.setCursor(12, 1);
      if ((celsius > -10) && (celsius < 100)) tft.print (char(1));
      if ((celsius < 10) && (celsius >= 0)) tft.print (char(1));
      tft.print(celsius, 0);
      tft.print(char(6));       //Символ температуры
      */
      clockRTC();
    }
  } while (buffer[18] != 0xC1);

  beep();
  if (clockfirst == 1)
  {
    delay(500);
    clockfirst = 2;
  }
  Spd = 1;
  To = 1;
  Gaz = 1;
  obr = 1;
  u = 1;
  FuelRateKm = 1;
  Fuelhoure = 1;
  lt_time = 0;

  //  eepromltst = EEPROM.read(eepautolightstat);
  //  eepromlton = EEPROM.read(eepautolighton) * 4;
  //  eepromltoff = EEPROM.read(eepautolightoff) * 4;
  //  eeprombllight = EEPROM.read(eepbacklight);
  //  eepromfan = EEPROM.read(eepheatfanon);
  //  eepromf1 = EEPROM.read(eepheatfan1);
  //  eepromf2 = EEPROM.read(eepheatfan2);
  //  eepromcool = EEPROM.read(eepcoolfanstat);
  //  eepromcooloff = EEPROM.read(eepcoolfanoff);
  //  eepromcoolon = EEPROM.read(eepcoolfanon);

  tft.fillScreen(ST7735_BLACK);

}

//----------------процедура чтения данных из буфера последовательного порта------------------
void readbuf()
{
  bufSize = 0;
  if (Serial.available() > 0)
  {
    bufSize = Serial.available();                                                                               //
    for (i = 0; i < bufSize; i++)
      buffer[i] = Serial.read();
  }
}

// -------------------------процедура проверки на наличие ошибок------------------------------
void check_errors()
{
  bottom = 0;

  initcon();
  Serial.write(readDTCByStatus, 8);     // Запрос на прием диагностических данных
  delay(200);
  readbuf();
  if (buffer[11] == 0x58);
  {
    kol_er = buffer[12];
    tft.setCursor(0, 0);
    tft.print("Err:");
    if (kol_er != 0)
    {
      bottom = 0;
      clockinit = 20;

      int p = 10;
      int h = 0;
      for (i = 0; i < kol_er; i++)
      {
        p = p + 3;
        buffer_errors[h] = buffer[p];
        buffer_errors[h + 1] = buffer[p + 1];
        h = h + 2;
      }

      tft.setCursor(4, 0);
      tft.print(kol_er);
      tft.setCursor(6, 0);
      tft.print("P");
      if (buffer_errors[0] < 16) tft.print("0");
      tft.print(buffer_errors[0], HEX);
      tft.print(buffer_errors[1], HEX);

      if (kol_er > 1 )
      {
        tft.setCursor(0, 1);
        tft.print("P");
        if (buffer_errors[2] < 16) tft.print("0");
        tft.print(buffer_errors[2], HEX);
        tft.print(buffer_errors[3], HEX);
      }

      if (kol_er > 2)
      {
        tft.setCursor(6, 1);
        tft.print("P");
        if (buffer_errors[4] < 16) tft.print("0");
        tft.print(buffer_errors[4], HEX);
        tft.print(buffer_errors[5], HEX);
      }
      do
      { tft.setCursor(12, 0);
        tft.print("Igno");
        tft.setCursor(12, 1);
        tft.print(char(1));
        tft.print(char(1));
        tft.print(char(1));
        tft.print(char(1));
        bott_500ms();

        tft.setCursor(12, 1);
        if (kol_er > 3) tft.print ("Next");
        else tft.print(" Del");
        tft.setCursor(12, 0);
        tft.print(char(1));
        tft.print(char(1));
        tft.print(char(1));
        tft.print(char(1));
        bott_500ms();

        if ((bottom == 32) && (kol_er > 3)) next_errors();
        if ((bottom == 32) && (kol_er <= 3)) clear_errors();
        //    if (bottom == 31) clockinit = clockinit + 1;
        //if (bottom == 21) clockinit = clockinit - 1;
        if (bottom == 22) clockinit = 55;

      } while (clockinit == 20);
      bottom = 0;
      clockinit = 0;
    }
    else
    {
      tft.setCursor(5, 0);
      tft.print(kol_er);
      delay(2000);
    }
  }
  initcon();
}

//---------------------процедура удаления ошибок--------------------------------
void clear_errors()
{
  bottom = 0;
  clockinit = 55;
  initcon();
  Serial.write(clearerrors, 7);
  tft.fillScreen(ST7735_BLACK);

  tft.setCursor(1, 0);
  tft.print("Errors DELETE");
  delay(1000);

}

void next_errors()
{
  bottom = 0;
  tft.fillScreen(ST7735_BLACK);

  if (kol_er > 3 )
  {
    tft.setCursor(0, 0);
    tft.print("P");
    if (buffer_errors[6] < 16) tft.print("0");
    tft.print(buffer_errors[6], HEX);
    tft.print(buffer_errors[7], HEX);
  }
  if (kol_er > 4 )
  {
    tft.setCursor(6, 0);
    tft.print("P");
    if (buffer_errors[8] < 16) tft.print("0");
    tft.print(buffer_errors[8], HEX);
    tft.print(buffer_errors[9], HEX);
  }
  if (kol_er > 5 )
  {
    tft.setCursor(0, 1);
    tft.print("P");
    if (buffer_errors[10] < 16) tft.print("0");
    tft.print(buffer_errors[10], HEX);
    tft.print(buffer_errors[11], HEX);
  }
  if (kol_er > 6 )
  {
    tft.setCursor(6, 1);
    tft.print("P");
    if (buffer_errors[12] < 16) tft.print("0");
    tft.print(buffer_errors[12], HEX);
    tft.print(buffer_errors[13], HEX);
  }
  do
  { tft.setCursor(12, 0);
    tft.print("Igno");
    tft.setCursor(12, 1);
    tft.print(char(1));
    tft.print(char(1));
    tft.print(char(1));
    tft.print(char(1));
    bott_500ms();

    tft.setCursor(12, 1);
    tft.print(" Del");
    tft.setCursor(12, 0);
    tft.print(char(1));
    tft.print(char(1));
    tft.print(char(1));
    tft.print(char(1));
    bott_500ms();

    if (bottom == 32) clear_errors();
    //    if (bottom == 31) clockinit = clockinit + 1;
    //if (bottom == 21) clockinit = clockinit - 1;
    if (bottom == 22) clockinit = 55;

  } while (clockinit == 20);
  bottom = 0;
  //clockinit = 0;
}


//---------------процедура короткого сигнала----------------------------------------
void beep()
{
  digitalWrite(buzz, HIGH);
  delay(50);
  digitalWrite(buzz, LOW);
}

//-----------------процедура опроса кнопок и тревожного входа низкого давления масла----------
void bottoms()
{
  int val = analogRead(A1);

  if (val < 250)
  {
    bottom = 1;
    if (bot_long == 1) beep();
    if (bot_long == 20) long_beep();
    bot_long = bot_long + 1;
  }

  if (val > 410 && val < 540)       // для машины
    // if (val > 320 && val < 420)       // для программатора
  {
    bottom = 2;
    if (bot_long == 1) beep();
    if (bot_long == 20) long_beep();
    bot_long = bot_long + 1;
  }

  if (val > 580 && val < 700)       // для машины
    // if (val > 430 && val < 530)       // для программатора
  {
    bottom = 3;
    if (bot_long == 1) beep();
    if (bot_long == 20) long_beep();
    bot_long = bot_long + 1;
  }

  if ((bottom == 1) && (bot_long > 25))
  {
    bot_long = 0;
    bottom == 111;
  }

  if ((bottom == 1) && (val > 840))
  {
    if (bot_long < 20)
    {
      bot_long = 0;
      bottom = 11;
    }
    if (bot_long >= 20)
    {
      bot_long = 0;
      bottom = 12;
    }
  }

  if ((bottom == 2) && (val > 840))
  {
    if (bot_long < 20)
    {
      bot_long = 0;
      bottom = 21;
    }
    if (bot_long >= 20)
    {
      bot_long = 0;
      bottom = 22;
    }
  }

  if ((bottom == 3) && (val > 840))
  {
    if (bot_long < 20)
    {
      bot_long = 0;
      bottom = 31;
    }
    if (bot_long >= 20)
    {
      bot_long = 0;
      bottom = 32;
    }
  }


}

//----------------------выбор меню установки----------------------------------
void setupmenu()
{
  clockinit = 1;
  do
  {

    //bottoms();
    if (clockinit == 1) setclock();

    if (clockinit == 2) setdate();

    /*if (clockinit == 3) autolight_on();

    if (clockinit == 4) autolight_level();
*/
    if (clockinit == 3) coolfan_on();

    if (clockinit == 4) coolfan_engine();
/*
    if (clockinit == 7) heatfan_on();

    if (clockinit == 8) heatfan_level();
*/
    if (clockinit == 5) backlight_level();

    //   if (clockinit == 10) beep_on();

    if (bottom == 22) clockinit = 55;

    if ((clockinit < 1) && (clockinit != 55)) clockinit = 9;

    if ((clockinit > 9) && (clockinit != 55)) clockinit = 1;


    bott_150ms();

  } while (clockinit < 50);
  initcon();
}
//-------------------меню установки часов-----------------------------------------
void setclock()
{
  read_datetime();
  bottom = 0;
  tft.fillScreen(ST7735_BLACK);

  do
  {
    tft.setCursor(0, 0);
    tft.print ("Set Clock");
    tft.setCursor (2, 1);
    if (hourtime < 10) tft.print (char(1));
    tft.print(hourtime, DEC);
    tft.print(":");
    if (minutetime < 10) tft.print ("0");
    tft.print(minutetime, DEC);

    bott_150ms();
    if (bottom == 32) setclockon();
    if (bottom == 31) clockinit = clockinit + 1;
    if (bottom == 21) clockinit = clockinit - 1;
    if (bottom == 22) clockinit = 55;
  } while (clockinit == 1);
  bottom = 0;
  //  tft.fillScreen(ST7735_BLACK);
  //  DateTime now = rtc.now();

}

//--------------------установка часов времени-----------------------------------------
void setclockon()
{
  bottom = 0;
  clockinit = 1;
  do
  {

    tft.setCursor(2, 1);
    tft.print(char(1));
    tft.print(char(1));

    bott_500ms();

    tft.setCursor(2, 1);
    if (hourtime < 10) tft.print("0");
    tft.print(hourtime);

    bott_500ms();

    if (bottom == 31)
    {
      bottom = 0;
      hourtime = hourtime + 1;
      if (hourtime > 24) hourtime = 0;
    }
    if (bottom == 21)
    {
      bottom = 0;
      hourtime = hourtime - 1;
      if (hourtime < 0) hourtime = 23;
    }
    if (bottom == 32) setminuteon();;
    if (bottom == 22) clockinit = 55;
  } while (clockinit < 50);
  bottom = 0;
  rtc.adjust(DateTime(yeartime, monthtime, daytime, hourtime, minutetime, 0));
  clockinit = 1;
}

//---------------------установка минут времени-------------------------------------
void setminuteon()
{
  bottom = 0;
  clockinit = 1;
  do
  {

    tft.setCursor(5, 1);
    tft.print(char(1));
    tft.print(char(1));

    bott_500ms();

    tft.setCursor(5, 1);
    if (minutetime < 10) tft.print("0");
    tft.print(minutetime);

    bott_500ms();

    if (bottom == 31)
    {
      bottom = 0;
      minutetime = minutetime + 1;
      if (minutetime > 59) minutetime = 0;
    }
    if (bottom == 21)
    {
      bottom = 0;
      minutetime = minutetime - 1;
      if (minutetime < 0) minutetime = 59;
    }

    if ((bottom == 32) || (bottom == 22)) clockinit = 55;
  } while (clockinit < 50);
  bottom = 0;



}

//--------------------меню установки числа, месяца, года------------------------------
void setdate()
{
  read_datetime();
  bottom = 0;
  tft.fillScreen(ST7735_BLACK);
  do
  {

    tft.setCursor(0, 0);
    tft.print ("Set Date");
    tft.setCursor (2, 1);
    if (daytime < 10) tft.print ("0");
    tft.print(daytime, DEC);
    tft.print(".");
    if (monthtime < 10) tft.print ("0");
    tft.print(monthtime, DEC);
    tft.print(".");
    tft.print(yeartime, DEC);

    bott_150ms();
    if (bottom == 32) setdateon();
    if (bottom == 31) clockinit = clockinit + 1;
    if (bottom == 21) clockinit = clockinit - 1;
    if (bottom == 22) clockinit = 55;
  } while (clockinit == 2);
  bottom = 0;
  //    tft.fillScreen(ST7735_BLACK);

}

//----------------установка даты дня---------------------------------------------
void setdateon()
{
  bottom = 0;
  do
  {

    tft.setCursor(2, 1);
    tft.print(char(1));
    tft.print(char(1));
    bott_500ms();
    tft.setCursor(2, 1);
    if (daytime < 10) tft.print("0");
    tft.print(daytime);
    bott_500ms();
    if (bottom == 31)
    {
      bottom = 0;
      daytime = daytime + 1;
      if (daytime > 31) daytime = 1;
    }
    if (bottom == 21)
    {
      bottom = 0;
      daytime = daytime - 1;
      if (daytime < 1)daytime = 31;
    }
    if (bottom == 32) setmonthon();
    if (bottom == 22) clockinit = 55;
  } while (clockinit < 50);
  bottom = 0;
  DateTime now = rtc.now();

  hourtime = now.hour();
  minutetime = now.minute();
  secondtime = now.second();
  rtc.adjust(DateTime(yeartime, monthtime, daytime, hourtime, minutetime, 0));
  clockinit = 2;
}


//-----------------------установка месяца------------------------------
void setmonthon()
{
  bottom = 0;
  do
  {
    tft.setCursor(5, 1);
    tft.print(char(1));
    tft.print(char(1));
    bott_500ms();
    tft.setCursor(5, 1);
    if (monthtime < 10) tft.print ("0");
    tft.print(monthtime);
    bott_500ms();
    if (bottom == 31)
    {
      bottom = 0;
      monthtime = monthtime + 1;
      if (monthtime > 12) monthtime = 1;
    }
    if (bottom == 21)
    {
      bottom = 0;
      monthtime = monthtime - 1;
      if (monthtime < 1) monthtime = 12;
    }
    if (bottom == 32) setyearon();

    if (bottom == 22) clockinit = 55;
  } while (clockinit < 50);
  bottom = 0;
  //clockinit = 2;

}
//----------------------установка года------------------
void setyearon()
{
  bottom = 0;
  do
  {
    tft.setCursor(8, 1);
    tft.print(char(1));
    tft.print(char(1));
    tft.print(char(1));
    tft.print(char(1));
    bott_500ms();
    tft.setCursor(8, 1);
    tft.print(yeartime);
    bott_500ms();
    if (bottom == 31)
    {
      bottom = 0;
      yeartime = yeartime + 1;
    }
    if (bottom == 21)
    {
      bottom = 0;
      yeartime = yeartime - 1;
      if (yeartime < 2000) yeartime = 2000;
    }
    if ((bottom == 22) || (bottom == 32)) clockinit = 55;
  } while (clockinit < 50);
  bottom = 0;

}
//-------------------------меню установки функции включения автосвет-------------------
/*void autolight_on()
{
  bottom = 0;
  tft.fillScreen(ST7735_BLACK);
  tft.setCursor(0, 0);
  tft.print ("Autolight");
  tft.setCursor (13, 0);
  tft.print("ON");
  tft.setCursor(13, 1);
  tft.print("OFF");
  eepromi = EEPROM.read(eepautolightstat);
  do
  {
    if (eepromi == 1)
    {
      tft.setCursor(12, 1);
      tft.print(char(1));
      tft.setCursor(12, 0);
      tft.print(">");
    }
    if (eepromi == 0)
    {
      tft.setCursor(12, 0);
      tft.print(char(1));
      tft.setCursor(12, 1);
      tft.print(">");
    }



    bott_500ms();
    if (bottom == 32) set_autolight_stat();
    if (bottom == 31) clockinit = clockinit + 1;
    if (bottom == 21) clockinit = clockinit - 1;
    if (bottom == 22) clockinit = 55;
  } while (clockinit == 3);
  bottom = 0;
  if (eepromi == 0) digitalWrite(ON_LIGHT, LOW);
  EEPROM.write(eepautolightstat, eepromi);
}
//------------------------установка включения функции автосвет--------------------
void set_autolight_stat()
{
  bottom = 0;
  do
  {
    tft.setCursor(12, 0);
    tft.print(char(1));
    tft.setCursor(12, 1);
    tft.print(char(1));
    bott_500ms();
    if (eepromi == 1)
    {

      tft.setCursor(12, 0);
      tft.print(">");
    }
    if (eepromi == 0)
    {

      tft.setCursor(12, 1);
      tft.print(">");
    }
    bott_500ms();
    if (bottom == 31) eepromi = 0;
    if (bottom == 21) eepromi = 1;
    if ((bottom == 22) || (bottom == 32)) clockinit = 55;
  } while (clockinit == 3);
  bottom = 0;
  clockinit = 3;
}

//----------------------------меню установки порога автосвет--------------------------------
void autolight_level()
{
  bottom = 0;
  tft.fillScreen(ST7735_BLACK);
  tft.setCursor(0, 0);
  tft.print ("Autolight LEVEL");

  eeprom1 = EEPROM.read(eepautolightoff);
  eeprom2 = EEPROM.read(eepautolighton);
  tft.setCursor(0, 1);
  if ((eeprom1 * 4) < 1000) tft.print (char(1));
  if ((eeprom1 * 4) < 100) tft.print (char(1));
  tft.print(eeprom1 * 4);
  tft.setCursor(12, 1);
  if ((eeprom2 * 4) < 1000) tft.print(char(1));
  if ((eeprom2 * 4) < 100) tft.print(char(1));
  tft.print(eeprom2 * 4);

  do
  {
    //light_sensor = analogRead(A7);
    light_sensor_read();
    tft.setCursor(6, 1);
    if (light_sensor < 1000) tft.print(char(1));
    if (light_sensor < 100) tft.print(char(1));
    tft.print(light_sensor);
    bott_500ms();
    if (bottom == 32) set_autolight_off();
    if (bottom == 31) clockinit = clockinit + 1;
    if (bottom == 21) clockinit = clockinit - 1;
    if (bottom == 22) clockinit = 55;
  } while (clockinit == 4);
  bottom = 0;
  EEPROM.write(eepautolightoff, eeprom1);
  EEPROM.write(eepautolighton, eeprom2);

}

//--------------Установка порога выключения света----------------
void set_autolight_off()
{
  bottom = 0;
  do
  {
    //light_sensor = analogRead(A7);
    light_sensor_read();
    tft.setCursor(6, 1);
    if (light_sensor < 1000) tft.print(char(1));
    if (light_sensor < 100) tft.print(char(1));
    tft.print(light_sensor);
    //  tft.fillScreen(ST7735_BLACK);
    tft.setCursor(0, 1);
    tft.print(char(1));
    tft.setCursor(1, 1);
    tft.print(char(1));
    tft.setCursor(2, 1);
    tft.print(char(1));
    tft.setCursor(3, 1);
    tft.print(char(1));
    bott_500ms();
    tft.setCursor(0, 1);
    if ((eeprom1 * 4) < 1000) tft.print (char(1));
    if ((eeprom1 * 4) < 100) tft.print (char(1));

    tft.print(eeprom1 * 4);
    bott_500ms();
    if (bottom == 31)
    {
      bottom = 0;
      eeprom1 = eeprom1 + 5;
      if (eeprom1 >= 250) eeprom1 = 250;
    }
    if (bottom == 21)
    {
      bottom = 0;
      eeprom1 = eeprom1 - 5;
      if (eeprom1 <= 5) eeprom1 = 5;
    }
    if (bottom == 32) set_autolight_on();
    if (bottom == 22) clockinit = 55;
  } while (clockinit == 4);
  bottom = 0;
  clockinit = 4;
}

void set_autolight_on()
{
  bottom = 0;
  if (eeprom1 >= eeprom2) eeprom2 = eeprom1 + 10;
  do
  {
    //light_sensor = analogRead(A7);
    light_sensor_read();
    tft.setCursor(6, 1);
    if (light_sensor < 1000) tft.print(char(1));

    tft.print(light_sensor);
    //  tft.fillScreen(ST7735_BLACK);
    tft.setCursor(12, 1);
    tft.print(char(1));
    tft.setCursor(13, 1);
    tft.print(char(1));
    tft.setCursor(14, 1);
    tft.print(char(1));
    tft.setCursor(15, 1);
    tft.print(char(1));
    bott_500ms();
    tft.setCursor(12, 1);
    if ((eeprom2 * 4) < 1000) tft.print(char(1));
    if ((eeprom2 * 4) < 100) tft.print(char(1));

    tft.print(eeprom2 * 4);
    bott_500ms();

    if (bottom == 31)
    {
      bottom = 0;
      eeprom2 = eeprom2 + 5;
      if (eeprom2 >= 250) eeprom2 = 250;
    }
    if (bottom == 21)
    {
      bottom = 0;
      eeprom2 = eeprom2 - 5;
      if (eeprom2 <= 5) eeprom2 = 5;
      if (eeprom1 >= eeprom2) eeprom2 = eeprom1 + 5;
    }

    if ((bottom == 22) || (bottom == 32)) clockinit = 55;
  } while (clockinit == 4);
  bottom = 0;
}
*/
//-----------меню установки вентилятора радиатора-----------------------
void coolfan_on()
{
  bottom = 0;
  tft.fillScreen(ST7735_BLACK);
  tft.setCursor(0, 0);
  tft.print("Radiator");
  tft.setCursor(2, 1);
  tft.print("FAN");
  tft.setCursor(13, 0);
  tft.print("ON");
  //  tft.setCursor(15,0)
  //  tft.print(char(6));
  tft.setCursor(13, 1);
  tft.print("OFF");
  //  tft.setCursor(15,1);
  // tft.print(char(6));
  eepromi = EEPROM.read(eepcoolfanstat);
  do
  {
    if (eepromi == 1)
    {
      tft.setCursor(12, 1);
      tft.print(char(1));
      tft.setCursor(12, 0);
      tft.print(">");
    }
    if (eepromi == 0)
    {
      tft.setCursor(12, 0);
      tft.print(char(1));
      tft.setCursor(12, 1);
      tft.print(">");
    }



    bott_500ms();
    if (bottom == 32) set_coolfan_stat();
    if (bottom == 31) clockinit = clockinit + 1;
    if (bottom == 21) clockinit = clockinit - 1;
    if (bottom == 22) clockinit = 55;
  } while (clockinit == 5);
  bottom = 0;

  EEPROM.write(eepcoolfanstat, eepromi);
}

//-------------------Установка принудительного включения вентилятора радиатора ON OFF---------
void set_coolfan_stat()
{
  bottom = 0;
  do
  {
    tft.setCursor(12, 0);
    tft.print(char(1));
    tft.setCursor(12, 1);
    tft.print(char(1));
    bott_500ms();
    if (eepromi == 1)
    {

      tft.setCursor(12, 0);
      tft.print(">");
    }
    if (eepromi == 0)
    {

      tft.setCursor(12, 1);
      tft.print(">");
    }
    bott_500ms();


    if (bottom == 31) eepromi = 0;
    if (bottom == 21) eepromi = 1;
    if ((bottom == 22) || (bottom == 32)) clockinit = 55;
  } while (clockinit == 5);
  bottom = 0;
  clockinit = 5;
}
//--------------------меню установки порогов включения и выключения вентилятора радиатора--------
void coolfan_engine()
{
  bottom = 0;
  tft.fillScreen(ST7735_BLACK);
  tft.setCursor(0, 0);
  tft.print("Radiator");
  tft.setCursor(2, 1);
  tft.print("FAN");
  tft.setCursor(9, 0);
  tft.print("OFF");
  tft.setCursor(15, 0);
  tft.print(char(6));
  tft.setCursor(10, 1);
  tft.print("ON");
  tft.setCursor(15, 1);
  tft.print(char(6));
  eeprom1 = EEPROM.read(eepcoolfanoff);

  eeprom2 = EEPROM.read(eepcoolfanon);
  tft.setCursor(13, 0);
  tft.print(eeprom1);

  tft.setCursor(12, 1);
  if (eeprom2 < 100) tft.print(char(1));
  tft.print(eeprom2);
  do {

    bott_150ms();
    if (bottom == 32) coolfan_engine_off();
    if (bottom == 31) clockinit = clockinit + 1;
    if (bottom == 21) clockinit = clockinit - 1;
    if (bottom == 22) clockinit = 55;
  } while (clockinit == 6);
  bottom = 0;
  EEPROM.write(eepcoolfanoff, eeprom1);
  EEPROM.write(eepcoolfanon, eeprom2);
}
//-----------------------------------------------------------------------------
void coolfan_engine_off()
{
  bottom = 0;
  do
  {
    tft.setCursor(13, 0);
    tft.print(char(1));
    tft.print(char(1));
    bott_500ms();

    tft.setCursor(13, 0);
    tft.print(eeprom1);
    bott_500ms();

    if (bottom == 32) coolfan_engine_on();
    if (bottom == 31)
    {
      bottom = 0;
      eeprom1 = eeprom1 + 1;
      if (eeprom1 > 99) eeprom1 = 99;

    }
    if (bottom == 21)
    {
      bottom = 0;
      eeprom1 = eeprom1 - 1;
      if (eeprom1 < 70) eeprom1 = 70;
    }
    if (bottom == 22) clockinit = 55;
  } while (clockinit == 6);
  bottom = 0;
  clockinit = 6;
}
//------------------------------------------------------------------------------
void coolfan_engine_on()
{
  bottom = 0;
  if ((eeprom1 + 1) >= eeprom2) eeprom2 = eeprom1 + 1;
  do
  {

    tft.setCursor(12, 1);
    tft.print(char(1));
    tft.print(char(1));
    tft.print(char(1));
    bott_500ms();

    tft.setCursor(12, 1);
    if (eeprom2 < 100) tft.print(char(1));
    tft.print(eeprom2);
    bott_500ms();

    if (bottom == 31)
    {
      bottom = 0;
      eeprom2 = eeprom2 + 1;
      if (eeprom2 > 105) eeprom2 = 105;

    }
    if (bottom == 21)
    {
      bottom = 0;
      eeprom2 = eeprom2 - 1;

      if (eeprom2 < 75) eeprom2 = 75;
      if ((eeprom1 + 1) >= eeprom2) eeprom2 = eeprom1 + 1;
    }
    if ((bottom == 22) || (bottom == 32)) clockinit = 55;
  } while (clockinit == 6);
  bottom = 0;
}

/*void heatfan_on()
{
  bottom = 0;
  tft.fillScreen(ST7735_BLACK);
  tft.setCursor(0, 0);
  tft.print("Salon");
  tft.setCursor(1, 1);
  tft.print("FAN");
  tft.setCursor (13, 0);
  tft.print("ON");
  tft.setCursor(13, 1);
  tft.print("OFF");
  eepromi = EEPROM.read(eepheatfanon);
  do
  {
    if (eepromi == 1)
    {
      tft.setCursor(12, 1);
      tft.print(char(1));
      tft.setCursor(12, 0);
      tft.print(">");
    }

    if (eepromi == 0)
    {
      tft.setCursor(12, 0);
      tft.print(char(1));
      tft.setCursor(12, 1);
      tft.print(">");
    }



    bott_150ms();
    if (bottom == 32) set_heatfan_on();
    if (bottom == 31) clockinit = clockinit + 1;
    if (bottom == 21) clockinit = clockinit - 1;
    if (bottom == 22) clockinit = 55;
  } while (clockinit == 7);
  bottom = 0;

  EEPROM.write(eepheatfanon, eepromi);
}

void set_heatfan_on()
{
  bottom = 0;
  do
  {
    tft.setCursor(12, 0);
    tft.print(char(1));
    tft.setCursor(12, 1);
    tft.print(char(1));
    bott_500ms();
    if (eepromi == 1)
    {

      tft.setCursor(12, 0);
      tft.print(">");
    }
    if (eepromi == 0)
    {

      tft.setCursor(12, 1);
      tft.print(">");
    }
    bott_500ms();

    if (bottom == 31) eepromi = 0;
    if (bottom == 21) eepromi = 1;
    if ((bottom == 22) || (bottom == 32)) clockinit = 55;
  } while (clockinit == 7);
  bottom = 0;
  clockinit = 7;
}

void heatfan_level()
{
  bottom = 0;
  tft.fillScreen(ST7735_BLACK);
  tft.setCursor(0, 0);
  tft.print("Salon");
  tft.setCursor(1, 1);
  tft.print("FAN");
  tft.setCursor(9, 0);
  tft.print("Car");
  tft.setCursor(15, 0);
  tft.print(char(6));
  tft.setCursor(6, 1);
  tft.print("Engine");
  tft.setCursor(15, 1);
  tft.print(char(6));
  eeprom1 = EEPROM.read(eepheatfan1);

  eeprom2 = EEPROM.read(eepheatfan2);
  tft.setCursor(13, 0);
  if (eeprom1 < 10) tft.print(char(1));
  tft.print(eeprom1);
  tft.setCursor(13, 1);
  tft.print(eeprom2);
  do {


    bott_150ms();
    if (bottom == 32) heatfan_level_01();
    if (bottom == 31) clockinit = clockinit + 1;
    if (bottom == 21) clockinit = clockinit - 1;
    if (bottom == 22) clockinit = 55;
  } while (clockinit == 8);
  bottom = 0;
  EEPROM.write(eepheatfan1, eeprom1);
  EEPROM.write(eepheatfan2, eeprom2);
}

void heatfan_level_01()
{
  bottom = 0;
  do
  {
    tft.setCursor(13, 0);
    tft.print(char(1));
    tft.print(char(1));
    bott_500ms();

    tft.setCursor(13, 0);
    if (eeprom1 < 10) tft.print(char(1));
    tft.print(eeprom1);
    bott_500ms();

    if (bottom == 32) heatfan_level_02();
    if (bottom == 31)
    {
      bottom = 0;
      eeprom1 = eeprom1 + 1;
      if (eeprom1 > 35) eeprom1 = 35;

    }
    if (bottom == 21)
    {
      bottom = 0;
      eeprom1 = eeprom1 - 1;
      if (eeprom1 < 0) eeprom1 = 0;
    }
    if (bottom == 22) clockinit = 55;
  } while (clockinit == 8);
  bottom = 0;
  clockinit = 8;
}

void heatfan_level_02()
{
  bottom = 0;
  do
  {
    tft.setCursor(13, 1);
    tft.print(char(1));
    tft.print(char(1));
    bott_500ms();

    tft.setCursor(13, 1);
    tft.print(eeprom2);
    bott_500ms();

    if (bottom == 31)
    {
      bottom = 0;
      eeprom2 = eeprom2 + 1;
      if (eeprom2 > 90) eeprom2 = 90;

    }
    if (bottom == 21)
    {
      bottom = 0;
      eeprom2 = eeprom2 - 1;

      if (eeprom2 < 10) eeprom2 = 10;

    }
    if ((bottom == 22) || (bottom == 32)) clockinit = 55;
  } while (clockinit == 8);
  bottom = 0;
}
*/
void backlight_level()
{
  bottom = 0;
  tft.fillScreen(ST7735_BLACK);
  tft.setCursor(0, 0);
  tft.print ("Backlight LCD");
  tft.setCursor(9, 1);
  tft.print("%");

  eepromi = EEPROM.read(eepbacklight);
  tft.setCursor(5, 1);
  if (eepromi < 100) tft.print(char(1));
  if (eepromi < 10) tft.print(char(1));
  tft.print(eepromi);
  do
  {

    bott_150ms();
    if (bottom == 32) set_backlight_level();
    if (bottom == 31) clockinit = clockinit + 1;
    if (bottom == 21) clockinit = clockinit - 1;
    if (bottom == 22) clockinit = 55;
  } while (clockinit == 9);
  bottom = 0;

  EEPROM.write(eepbacklight, eepromi);
}

void set_backlight_level()
{
  bottom = 0;
  do
  {
    //  tft.fillScreen(ST7735_BLACK);
    tft.setCursor(5, 1);
    tft.print(char(1));
    tft.setCursor(6, 1);
    tft.print(char(1));
    tft.setCursor(7, 1);
    tft.print(char(1));
    bott_500ms();

    tft.setCursor(5, 1);
    if (eepromi < 100) tft.print(char(1));
    if (eepromi < 10) tft.print(char(1));
    tft.print(eepromi);
    bott_500ms();

    if (bottom == 31)
    {
      bottom = 0;
      eepromi = eepromi + 5;
      if (eepromi > 100) eepromi = 100;
    }
    if (bottom == 21)
    {
      bottom = 0;
      eepromi = eepromi - 5;
      if (eepromi <= 5) eepromi = 5;
    }
    if ((bottom == 22) || (bottom == 32)) clockinit = 55;
    analogWrite (backlight, eepromi);
  } while (clockinit == 9);
  bottom = 0;
  clockinit = 9;
}

//-------------одноразовая запись исходных данных по умолчанию в EEPROM если он пуст------------
void eeprominit()
{
 /* eepromi = EEPROM.read(eepautolightstat);
  if ((eepromi == 0xFF)) EEPROM.write(eepautolightstat, 1);

  eepromi = EEPROM.read(eepautolightoff);
  if (eepromi == 0xFF) EEPROM.write(eepautolightoff, 150);

  eepromi = EEPROM.read(eepautolighton);
  if (eepromi == 0xFF) EEPROM.write(eepautolighton, 200);
*/
  eepromi = EEPROM.read(eepcoolfanstat);
  if ((eepromi == 0xFF)) EEPROM.write(eepcoolfanstat, 1);

  eepromi = EEPROM.read(eepcoolfanoff);
  if (eepromi == 0xFF) EEPROM.write(eepcoolfanoff, 93);

  eepromi = EEPROM.read(eepcoolfanon);
  if (eepromi == 0xFF) EEPROM.write(eepcoolfanon, 97);

 /* eepromi = EEPROM.read(eepheatfanon);
  if ((eepromi == 0xFF)) EEPROM.write(eepheatfanon, 1);

  eepromi = EEPROM.read(eepheatfan1);
  if (eepromi == 0xFF) EEPROM.write(eepheatfan1, 25);

  eepromi = EEPROM.read(eepheatfan2);
  if (eepromi == 0xFF) EEPROM.write(eepheatfan2, 70);
*/
  eepromi = EEPROM.read(eepbacklight);
  if (eepromi == 0xFF) EEPROM.write(eepbacklight, 10);
}

void read_datetime()
{
  DateTime now = rtc.now();
  yeartime = now.year();
  monthtime = now.month();
  daytime = now.day();
  hourtime = now.hour();
  minutetime = now.minute();
  secondtime = now.second();
}
void bott_150ms()
{
  bottoms();
  delay(50);
  bottoms();
  delay(50);
  bottoms();
  delay(50);
}

void bott_500ms()
{
  for ( int ms = 0; ms < 8; ms++)
  {
    bottoms();
    delay(50);
  }
}