#include <GyverButton.h>
#define MIN_PIN 5  // Пин минутной кнопки
#define HUR_PIN 4  // Пин часовой кнопки
GButton MinBut(MIN_PIN);
GButton HourBut(HUR_PIN);
#include <microWire.h>
#include <microDS3231.h>
MicroDS3231 rtc;
#include <GyverHacks.h>
#define REPLACE_FASTLED
#include <microLED.h>
#define LED_PIN 6 // Пин дата от ленты
#define NUM_LEDS 114 // 4*7*4 +2  Кол-во светодиодов
#define ORDER_GRB  // Тип ленты
#define COLOR_DEBTH 3   // цветовая глубина: 1, 2, 3 (в байтах)
//#include <DS3232RTC.h>
//#include <TimeLib.h>
//#include <Time.h>
//#include <Wire.h>
//#include <OneWire.h>
#include <DallasTemperature.h>
//#include <FastLED.h>
//#include <iarduino_RTC.h>
//iarduino_RTC time(RTC_DS1302,12,10,11);
//iarduino_RTC time(RTC_DS3231);
#include <iarduino_Pressure_BMP.h>
iarduino_Pressure_BMP sensor(0x76);
//#define NUM_LEDS 114 // 4*7*4 +2  Кол-во светодиодов
//#define COLOR_ORDER GRB  // Тип ленты
//#define DST_PIN 2  // Define DST adjust button pin
// сигнальный провод подключен к 2 пину на Arduino
#define ONE_WIRE_BUS_2 2
// настроим библиотеку 1-Wire для связи с датчиком
OneWire oneWire_out(ONE_WIRE_BUS_2);
// создадим объект для работы с библиотекой DallasTemperature
DallasTemperature sensors(&oneWire_out);
//CRGB leds[NUM_LEDS]; // Define LEDs strip
  LEDdata leds[NUM_LEDS];  // буфер ленты типа LEDdata (размер зависит от COLOR_DEBTH)
  microLED strip(leds, NUM_LEDS, LED_PIN);  // объект лента
// 0,0,0,0
// 1,1,1,1
//  1 2 3 4 5 6 7 8 9 10111213141516171819202122232425262728
byte digits[14][28] = {{0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, // Digit 0
  {0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1}, // Digit 1
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, // Digit 2
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1}, // Digit 3
  {1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1}, // Digit 4
  {1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1}, // Digit 5
  {1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, // Digit 6
  {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1}, // Digit 7
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, // Digit 8
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1}, // Digit 9 | 2D Array for numbers on 7 segment
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // Digit *0
  {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, // Digit C
  {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // Digit -
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};  // Digit
bool Dot = true;  //переменная для точек
//bool DST = false; //DST state
bool TempShow = true;  //переменная для температуры
bool PressShow = true; //переменная для давления
//bool DateShow = true;//переменная для даты
int last_digit = 0;
//управление цветом
//int ledColor = 0x00FFFF; // Color used (in hex)
//long ledColor = CRGB::Aqua; // Color used (in hex)
myGrad.colors[] = mAqua;
//long ledColor = CRGB::MediumVioletRed;
//Random colors i picked up
//массив цветов, для рандом при включенном режиме cylon(); ledColor =  ColorTable[random(16)];
long ColorTable[16] = {
  CRGB::Amethyst,
  CRGB::Aqua,
  CRGB::Blue,
  CRGB::Chartreuse,
  CRGB::DarkGreen,
  CRGB::DarkMagenta,
  CRGB::DarkOrange,
  CRGB::DeepPink,
  CRGB::Fuchsia,
  CRGB::Gold,
  CRGB::GreenYellow,
  CRGB::LightCoral,
  CRGB::Tomato,
  CRGB::Salmon,
  CRGB::Red,
  CRGB::Orchid
};
void setup() {
  Serial.begin(9600);
  setADCrate(1);
//  time.begin();
  //  запуск датчиков
  sensor.begin(); //датчики
  sensors.begin();//датчик уличной температуры
  Wire.begin();
//  FastLED.addLeds<WS2812B, LED_PIN, RGB>(leds, NUM_LEDS);
//  LEDS.setBrightness(75); // Установка яркости
strip.setBrightness(75);
  //  pinMode(DST_PIN, INPUT_PULLUP); // Define DST adjust button pin
  pinMode(MIN_PIN, INPUT_PULLUP); // Define Minutes adjust button pin
  pinMode(HUR_PIN, INPUT_PULLUP); // Define Hours adjust button pin
  pinMode(A3, OUTPUT); //контакт GND барометра
//  digitalWrite(A3, LOW);//подача земли на барометр
setPin(A3, LOW);
  //  pinMode(8, OUTPUT); //контакт GND датчика осв
  pinMode(9, OUTPUT); //контакт VCC датчика осв
  //  digitalWrite(8, LOW);//подача земли на датчик осв
//  digitalWrite(9, HIGH);//подача питания на датчик осв
setPin(9, HIGH);
  //  pinMode(A2, OUTPUT); //контакт GND часов
  //  pinMode(A1, OUTPUT); //контакт VCC часов
  //  digitalWrite(A2, LOW);//подача земли на часы
  //  digitalWrite(A1, HIGH);//подача питания на часы
  //  pinMode(A6, OUTPUT); //контакт GND уличного термометра, на общей земле сейчас
  //  pinMode(A7, OUTPUT); //контакт VCC уличного термометра, на дополнительном питании на ножке резистора
  //  digitalWrite(A6, LOW);//подача земли на уличный термометр
  //  digitalWrite(A7, HIGH);//подача питания на уличный термометр
}
// Get time in a single number, if hours will be a single digit then time will be displayed 155 instead of 0155
int GetTime() {
//  time.gettime();
  //  tmElements_t Now;
  // RTC.read(Now);
  //time_t Now = RTC.Now();// Getting the current Time and storing it into a DateTime object
//  int hour = time.Hours;
  uint8_t hour = rtc.getHours();
//  int minute = time.minutes;
  uint8_t minute = rtc.getMinutes();
//  int second = time.seconds;
  uint8_t second = rtc.getSeconds();
  Serial.print(hour);   Serial.print(":");  // Вывод часов
  Serial.print(minute); Serial.print(":");  // Вывод минут
  Serial.print(second); Serial.println(""); // Вывод секунд
  //  if (second % 2==0) {Dot = false;}
  //    else {Dot = true;};
  Dot = second % 2;
  return (hour * 100 + minute);
};
int GetSecond() { //функция запроса текущей секунды, результат в переменной "second"
//  time.gettime();
//  int second = time.seconds;
uint8_t second = rtc.getSeconds();
  return (second);
};
// Выбор яркости по данным датчика освещенности
void BrightnessCheck() {
//  int hour = time.Hours;
uint8_t hour = rtc.getHours();
  const byte sensorPin = A0; // контакт датчика осв
  const byte brightnessLow = 5; // низкая яркость
  const byte brightnessMid = 10; // низкая яркость
  const byte brightnessHigh = 40; // высокая яркость
  const byte brightnessDay = 60; // высокая яркость
  int sensorValue = analogRead(sensorPin); // Считывание датчика
  // int sensorValue = digitalRead(sensorPin); // Считывание датчика
  //  Serial.print("Датчик: ");Serial.println(sensorValue);
  sensorValue = map(sensorValue, 0, 1023, 0, 255);//перевод диапазона измерения
  LEDS.setBrightness(sensorValue);
  //Serial.println(hour);
  //эксперименты освещенности в зависимости от времени
  // if (hour=23||hour>=0 && hour<=7) {LEDS.setBrightness(5);}
  //     else
  //   if (sensorValue == 0) {LEDS.setBrightness(brightnessHigh);}
  //   else {LEDS.setBrightness(brightnessLow);
  //     }
  //если в комнате светло, то светит ярче, если мало света, то тусклее, в ночном режиме светит тускло
  if (sensorValue >= 221 && sensorValue <= 240) {
    LEDS.setBrightness(brightnessHigh);
    delay(1000);
  }
  else if (sensorValue >= 241 && sensorValue <= 252) {
    LEDS.setBrightness(brightnessMid);
    delay(1000);
  }
  else if (sensorValue >= 253) {
    LEDS.setBrightness(brightnessLow);
    delay(1000);
  }
  else if (sensorValue <= 220) {
    LEDS.setBrightness(brightnessDay);
    delay(1000);
  }
  //          Serial.println("Датчик: ");
  //     Serial.println(sensorValue);
};
// Конвертация времени в массив, для отображения на дисплее
void TimeToArray() {
  //   time.gettime();
  int Now = GetTime();  // Get time
  int cursor = 114; // last led number
  //Serial.print("Time is: ");Serial.println(Now);
  /*  if (DST){   // if DST is true then add one hour
     Now+=100;
    // Serial.print("DST is ON, time set to : ");Serial.println(Now);
    }; */
  //мигание светодиодов для секунд, горит цветом из установок, либо гаснет
  if (Dot) {
    leds[57] = ledColor;
    leds[56] = ledColor;
  }
  else  {
    leds[57] = 0x000000;
    leds[56] = 0x000000;
  };
  for (int i = 1; i <= 4; i++) {
    int digit = Now % 10; // get last digit in time
    if (i == 1) {
      //  Serial.print("Digit 4 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 86;
      for (int k = 0; k <= 27; k++) {
        // Serial.print(digits[digit][k]);
        if (digits[digit][k] == 1) {
          leds[cursor] = ledColor;
        }
        else if (digits[digit][k] == 0) {
          leds[cursor] = 0x000000;
        };
        cursor ++;
      };
      // Serial.println();
      if (digit != last_digit)
      {
        //        cylon();
        //ledColor =  ColorTable[random(16)];
        ledColor =  ColorTable[2];
      }
      last_digit = digit;
    }
    else if (i == 2) {
      // Serial.print("Digit 3 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 58;
      for (int k = 0; k <= 27; k++) {
        // Serial.print(digits[digit][k]);
        if (digits[digit][k] == 1) {
          leds[cursor] = ledColor;
        }
        else if (digits[digit][k] == 0) {
          leds[cursor] = 0x000000;
        };
        cursor ++;
      };
      // Serial.println();
    }
    else if (i == 3) {
      // Serial.print("Digit 2 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 28;
      for (int k = 0; k <= 27; k++) {
        // Serial.print(digits[digit][k]);
        if (digits[digit][k] == 1) {
          leds[cursor] = ledColor;
        }
        else if (digits[digit][k] == 0) {
          leds[cursor] = 0x000000;
        };
        cursor ++;
      };
      // Serial.println();
    }
    else if (i == 4) {
      // Serial.print("Digit 1 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 0;
      for (int k = 0; k <= 27; k++) {
        // Serial.print(digits[digit][k]);
        if (digits[digit][k] == 1) {
          leds[cursor] = ledColor;
        }
        else if (digits[digit][k] == 0) {
          leds[cursor] = 0x000000;
        };
        cursor ++;
      };
      // Serial.println();
    }
    Now /= 10;
  };
};
/*
  // функция вывода даты
  int GetDate(){
  time.gettime();
  int day=time.day;
  int month=time.month;
  Dot = false;
  return (day*100+month);
  DateToArray();};
  void DateToArray(){
  int Now = GetDate();  // Get time
  int cursor = 114; // last led number
   leds[57]=0x000000;
   leds[56]=0x000000;
  for(int i=1;i<=4;i++){
    int digit = Now % 10; // get last digit in time
    if (i==1){
    //  Serial.print("Digit 4 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 86;
      for(int k=0; k<=27;k++){
        // Serial.print(digits[digit][k]);
        if (digits[digit][k] == 1){leds[cursor]=ledColor;}
         else if (digits[digit][k]==0){leds[cursor]=0x000000;};
         cursor ++;
        };
      // Serial.println();
      if (digit != last_digit)
      {
  //        cylon();
  //        ledColor =  ColorTable[random(16)];
      }
      last_digit = digit;
      }
    else if (i==2){
      // Serial.print("Digit 3 is : ");Serial.print(digit);Serial.print(" ");
      cursor =58;
      for(int k=0; k<=27;k++){
        // Serial.print(digits[digit][k]);
        if (digits[digit][k]== 1){leds[cursor]=ledColor;}
         else if (digits[digit][k]==0){leds[cursor]=0x000000;};
         cursor ++;
        };
      // Serial.println();
      }
    else if (i==3){
      // Serial.print("Digit 2 is : ");Serial.print(digit);Serial.print(" ");
      cursor =28;
      for(int k=0; k<=27;k++){
        // Serial.print(digits[digit][k]);
        if (digits[digit][k]== 1){leds[cursor]=ledColor;}
         else if (digits[digit][k]==0){leds[cursor]=0x000000;};
         cursor ++;
        };
      // Serial.println();
      }
    else if (i==4){
      // Serial.print("Digit 1 is : ");Serial.print(digit);Serial.print(" ");
      cursor =0;
      for(int k=0; k<=27;k++){
        // Serial.print(digits[digit][k]);
        if (digits[digit][k]== 1){leds[cursor]=ledColor;}
         else if (digits[digit][k]==0){leds[cursor]=0x000000;};
         cursor ++;
        };
      // Serial.println();
      }
    Now /= 10;
  };
  };
*/
// Функция вывода температуры с датчика барометра
void TempToArray() {
  sensor.begin();
  int celsius = sensor.temperature - 1;
  Serial.println(celsius);
  int cursor = 114; // last led number
  //отключение секундных точек
  leds[57] = 0x000000;
  leds[56] = 0x000000;
  for (int i = 1; i <= 4; i++) {
    int digit = celsius % 10; // get last digit in time
    if (i == 3) {
      //      Serial.print("Digit 4 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 86;
      for (int k = 0; k <= 27; k++) {
        //        Serial.print(digits[11][k]);
        if (digits[11][k] == 1) {
          leds[cursor] = ledColor;
        }
        else if (digits[11][k] == 0) {
          leds[cursor] = 0x000000;
        };
        cursor ++;
      };
      //      Serial.println();
    }
    else if (i == 4) {
      //      Serial.print("Digit 3 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 58;
      for (int k = 0; k <= 27; k++) {
        //        Serial.print(digits[10][k]);
        if (digits[10][k] == 1) {
          leds[cursor] = ledColor;
        }
        else if (digits[10][k] == 0) {
          leds[cursor] = 0x000000;
        };
        cursor ++;
      };
      //      Serial.println();
    }
    else if (i == 1) {
      //      Serial.print("Digit 2 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 28;
      for (int k = 0; k <= 27; k++) {
        //        Serial.print(digits[digit][k]);
        if (digits[digit][k] == 1) {
          leds[cursor] = ledColor;
        }
        else if (digits[digit][k] == 0) {
          leds[cursor] = 0x000000;
        };
        cursor ++;
      };
      //      Serial.println();
    }
    else if (i == 2) {
      //      Serial.print("Digit 1 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 0;
      for (int k = 0; k <= 27; k++) {
        //        Serial.print(digits[digit][k]);
        if (digits[digit][k] == 1) {
          leds[cursor] = ledColor;
        }
        else if (digits[digit][k] == 0) {
          leds[cursor] = 0x000000;
        };
        cursor ++;
      };
      //      Serial.println();
    }
    celsius /= 10;
  };
};
// Функция вывода температуры с уличного датчика
void TempStreetToArray() {
  sensors.begin();
  //    delay(1000);
  sensors.requestTemperatures();
  if (sensors.getTempCByIndex(0) < 0) {
    int celsius = (sensors.getTempCByIndex(0) * (-1));
    Serial.println(celsius);
    int cursor = 114; // last led number
    //отключение секундных точек
    leds[57] = 0x000000;
    leds[56] = 0x000000;
    for (int i = 1; i <= 4; i++) {
      int digit = celsius % 10; // get last digit in time
      if (i == 3) {
        //      Serial.print("Digit 4 is : ");Serial.print(digit);Serial.print(" ");
        cursor = 86;
        for (int k = 0; k <= 27; k++) {
          //        Serial.print(digits[10][k]);
          if (digits[10][k] == 1) {
            leds[cursor] = ledColor;
          }
          else if (digits[10][k] == 0) {
            leds[cursor] = 0x000000;
          };
          cursor ++;
        };
        //      Serial.println();
      }
      else if (i == 1) {
        //      Serial.print("Digit 3 is : ");Serial.print(digit);Serial.print(" ");
        cursor = 58;
        for (int k = 0; k <= 27; k++) {
          //        Serial.print(digits[digit][k]);
          if (digits[digit][k] == 1) {
            leds[cursor] = ledColor;
          }
          else if (digits[digit][k] == 0) {
            leds[cursor] = 0x000000;
          };
          cursor ++;
        };
        //      Serial.println();
      }
      else if (i == 2) {
        //      Serial.print("Digit 2 is : ");Serial.print(digit);Serial.print(" ");
        cursor = 28;
        for (int k = 0; k <= 27; k++) {
          //        Serial.print(digits[digit][k]);
          if (digits[digit][k] == 1) {
            leds[cursor] = ledColor;
          }
          else if (digits[digit][k] == 0) {
            leds[cursor] = 0x000000;
          };
          cursor ++;
        };
        //      Serial.println();
      }
      else if (i == 4) {
        //      Serial.print("Digit 1 is : ");Serial.print(digit);Serial.print(" ");
        cursor = 0;
        for (int k = 0; k <= 27; k++) {
          //        Serial.print(digits[12][k]);
          if (digits[12][k] == 1) {
            leds[cursor] = ledColor;
          }
          else if (digits[12][k] == 0) {
            leds[cursor] = 0x000000;
          };
          cursor ++;
        };
        //      Serial.println();
      }
      celsius /= 10;
    };
  }
  else
  {
    int celsius = (sensors.getTempCByIndex(0));
    Serial.println(celsius);
    int cursor = 114; // last led number
    //отключение секундных точек и точек от минуса, не помню нужны ли они и для чего делал))
    leds[0] = 0x000000;
    leds[1] = 0x000000;
    leds[2] = 0x000000;
    leds[3] = 0x000000;
    leds[57] = 0x000000;
    leds[56] = 0x000000;
    for (int i = 1; i <= 4; i++) {
      int digit = celsius % 10; // get last digit in time
      if (i == 3) {
        //      Serial.print("Digit 4 is : ");Serial.print(digit);Serial.print(" ");
        cursor = 86;
        for (int k = 0; k <= 27; k++) {
          //        Serial.print(digits[10][k]);
          if (digits[10][k] == 1) {
            leds[cursor] = ledColor;
          }
          else if (digits[10][k] == 0) {
            leds[cursor] = 0x000000;
          };
          cursor ++;
        };
        //      Serial.println();
      }
      else if (i == 1) {
        //      Serial.print("Digit 3 is : ");Serial.print(digit);Serial.print(" ");
        cursor = 58;
        for (int k = 0; k <= 27; k++) {
          //        Serial.print(digits[digit][k]);
          if (digits[digit][k] == 1) {
            leds[cursor] = ledColor;
          }
          else if (digits[digit][k] == 0) {
            leds[cursor] = 0x000000;
          };
          cursor ++;
        };
        //      Serial.println();
      }
      else if (i == 2) {
        //      Serial.print("Digit 2 is : ");Serial.print(digit);Serial.print(" ");
        cursor = 28;
        for (int k = 0; k <= 27; k++) {
          //        Serial.print(digits[digit][k]);
          if (digits[digit][k] == 1) {
            leds[cursor] = ledColor;
          }
          else if (digits[digit][k] == 0) {
            leds[cursor] = 0x000000;
          };
          cursor ++;
        };
        //      Serial.println();
      }
      else if (i == 4) {
        //      Serial.print("Digit 1 is : ");Serial.print(digit);Serial.print(" ");
        cursor = 0;
        for (int k = 0; k <= 27; k++) {
          //        Serial.print(digits[13][k]);
          if (digits[13][k] == 1) {
            leds[cursor] = ledColor;
          }
          else if (digits[13][k] == 0) {
            leds[cursor] = 0x000000;
          };
          cursor ++;
        };
        //      Serial.println();
      }
      celsius /= 10;
    };
  };
};
// Функция вывода давление с барометра
void PressToArray() {
  sensor.begin();
  int davlenie = sensor.pressure;
  Serial.println(davlenie);
  int cursor = 85; // last led number
  for (int i = 86; i <= 114; i++)
  {
    leds[i] = 0x000000;
  }
  //отключение секундных точек
  leds[56] = 0x000000;
  leds[57] = 0x000000;
  for (int i = 1; i <= 3; i++) {
    int digit = davlenie % 10; // get last digit in time
    if (i == 1) {
      //      Serial.print("Digit 3 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 58;
      for (int k = 0; k <= 27; k++) {
        //        Serial.print(digits[digit][k]);
        if (digits[digit][k] == 1) {
          leds[cursor] = ledColor;
        }
        else if (digits[digit][k] == 0) {
          leds[cursor] = 0x000000;
        };
        cursor ++;
      };
      //      Serial.println();
      last_digit = digit;
    }
    else if (i == 2) {
      //      Serial.print("Digit 2 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 28;
      for (int k = 0; k <= 27; k++) {
        //       Serial.print(digits[digit][k]);
        if (digits[digit][k] == 1) {
          leds[cursor] = ledColor;
        }
        else if (digits[digit][k] == 0) {
          leds[cursor] = 0x000000;
        };
        cursor ++;
      };
      //      Serial.println();
      last_digit = digit;
    }
    else if (i == 3) {
      //      Serial.print("Digit 1 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 0;
      for (int k = 0; k <= 27; k++) {
        //        Serial.print(digits[digit][k]);
        if (digits[digit][k] == 1) {
          leds[cursor] = ledColor;
        }
        else if (digits[digit][k] == 0) {
          leds[cursor] = 0x000000;
        };
        cursor ++;
      };
      //      Serial.println();
    }
    //отключил первый символ и сдвинул регистр вправо, чтобы понятно было, какой датчик показывает температуру)
    /*    else if (i==2){
          Serial.print("Digit 1 is : ");Serial.print(digit);Serial.print(" ");
          cursor =0;
          for(int k=0; k<=27;k++){
            Serial.print(digits[digit][k]);
            if (digits[digit][k]== 1){leds[cursor]=ledColor;}
             else if (digits[digit][k]==0){leds[cursor]=0x000000;};
             cursor ++;
            };
          Serial.println();
          }*/
    davlenie /= 10;
  };
};
/*
  void DSTcheck(){
   int buttonDST = digitalRead(DST_PIN);
   if (buttonDST == HIGH){
    delay(500);
    ledColor = ColorTable[random(16)];
   };
  }
*/
/*
  //настройка времени
  void TimeAdjust(){
  int buttonH = digitalRead(HUR_PIN);
  int buttonM = digitalRead(MIN_PIN);
  if (buttonH == LOW || buttonM == LOW){
    delay(50);
     time.gettime();
  //    tmElements_t Now;
  //   RTC.read(Now);
    int hour=time.Hours;
    int minutes=time.minutes;
    int second =time.seconds;
      if (buttonH == LOW){
        if (hour== 23){hour=0;}
          else {hour += 1;};
        }else {
          if (minutes== 59){minutes=0;}
          else {minutes += 1;};
          };
   // RTC.write(Now);
  time.settime(0, minutes, hour);   }
  }
*/
void SetTime() {
  
  uint8_t hours = rtc.getHours();
  uint8_t minutes = rtc.getMinutes();
    HourBut.tick();
  if (HourBut.isClick()) {
    if (hours == 23) {
      hours = 0;
    }
    else {
      hours += 1;
    }
  }
  MinBut.tick();
  if (MinBut.isClick()) {
    if (minutes == 59) {
      minutes = 0;
    }
    else {
      minutes += 1;
    }
  }
  if (MinBut.isHold()) {
    if (minutes == 59) {
      minutes = 0;
    }
    else {
      minutes += 5;
    };
  }
  rtc.setTime(0, minutes, hours,"","","");
}
//вот эта функция отвечает за смену цветов и всяким эффектам, нужно открыть void fadeall и void cylon и открыть выше в коде))
// спецэффекты
//void fadeall() { for(int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(250); } }
/*
  void cylon () {
  static uint8_t hue = 0;
  Serial.print("x");
  // First slide the led in one direction
  for(int i = 0; i < NUM_LEDS; i++) {
    // Set the i'th led to red
    leds[i] = CHSV(hue++, 255, 255);
    // Show the leds
    FastLED.show();
    // now that we've shown the leds, reset the i'th led to black
    // leds[i] = CRGB::Black;
    fadeall();
    // Wait a little bit before we loop around and do it again
    delay(10);
  }
  Serial.print("x");
  // Now go in the other direction.
  for(int i = (NUM_LEDS)-1; i >= 0; i--) {
    // Set the i'th led to red
    leds[i] = CHSV(hue++, 255, 255);
    // Show the leds
    FastLED.show();
    // now that we've shown the leds, reset the i'th led to black
    // leds[i] = CRGB::Black;
    fadeall();
    // Wait a little bit before we loop around and do it again
    delay(10);
  }
  }
*/
void loop()  // Main loop
{
  //  DSTcheck(); // Check DST
  BrightnessCheck();
  //  TimeAdjust(); // Check to se if time is geting modified
  SetTime;
  //  TimeToArray(); // Get leds array with required configuration
  //  displayDate();
  //  TempToArray();
  //  PressToArray();
  //  if (TempShow == true)
  //  delay (5000);
  //    if (PressShow == true)
  //  delay (5000);
  //     if (DateShow == true)
  //  delay (5000);
  //очередность вывода показаний с датчиков и задержка отображения
  TimeToArray();
  strip.show();
  delay(1000);
  TimeToArray();
  strip.show();
  delay(1000);
  TimeToArray();
  strip.show();
  delay(1000);
  TimeToArray();
  strip.show();
  delay(1000);
  TimeToArray();
  strip.show();
  delay(1000);
  TempToArray();
  strip.show();
  delay(2000);
  TempStreetToArray();
  strip.show();
  delay(2000);
  PressToArray();
  strip.show();
  delay(2000);
  /*
    //  if (GetSecond()>=0 && GetSecond() <= 10 || (GetSecond()>=17 &&GetSecond()<=27) )
    //  {TimeToArray();} //вызов функции отображения времени 1
          if (GetSecond()>=16 && GetSecond()<=20 || (GetSecond()>=41 &&GetSecond()<=45))
            {TempStreetToArray();} //вызов функции отображения уличной температуры
            else if (GetSecond()>=8 && GetSecond()<=15 || (GetSecond()>=34 &&GetSecond()<=40))
              {TempToArray();} //вызов функции отображения температуры
              else if (GetSecond()>=21&& GetSecond()<=25 || (GetSecond()>=46 && GetSecond()<=50))
                {PressToArray();}//вызов функции отображения давления
                 else    {TimeToArray();} //вызов функции отображения времени
  */
  //  FastLED.show(); // Display leds array
}