void Kalendar()
{
  int N=31;//переменная числа дней в месяце
//int mon=1;
//int date=23;
//int dow=6;

int a1=0;
 boolean sun=0;
if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12){N=31;}else {if(mon==2){N=28;}else{N=30;}}//условия определения числа дней в месяцах
  int D = date;//число месяца
  int Dn=dow;
  if(Dn==0){Dn=7;}//день недели определяем и переводим в интервал 1-7
  int Dn1=Dn;
  for(int i=D-1;i>=1;i--)
  {Dn=Dn-1;
  if(Dn==0){Dn=7;}
 
 
  }//определяем день недели для первого числа (от 1 до 7 результат пн.-вс.)
  int k=Dn-2;
   
    display.setRotation(4);
    display.fillScreen(GxEPD_WHITE); 
    display.setTextColor(GxEPD_BLACK);
    display.setFont();
    DrawBattery( 0, 20);
DrawRSSI(95, 20, wifi_signal);
int xk=3;
int yk=200;
//display.drawRect( 0+xk, 0+yk,125,85, GxEPD_BLACK);
  display.setCursor(3+xk, 4+yk);
   display.println(utf8rus("Пн"));
          // display.print("Mo");
           display.setCursor(20+xk, 4+yk);
           display.println(utf8rus("Вт"));
           display.setCursor(37+xk, 4+yk);
           display.println(utf8rus("Ср"));
           display.setCursor(54+xk, 4+yk);
           display.println(utf8rus("Чт"));
           display.setCursor(71+xk, 4+yk);
           display.println(utf8rus("Пт"));
           //display.fillRect(85+xk, 0+yk, 18, 11, GxEPD_BLACK);//x y w h
          // display.fillRect(102+xk, 0+yk, 18, 11, GxEPD_BLACK);//x y w h
           display.fillRect(85+xk, 0+yk, 35, 87, GxEPD_RED);//x y w h***
           display.drawLine(0+xk, 13+yk, 84+xk, 13+yk, GxEPD_BLACK);//x1 y1 x2 y2
           display.setTextColor(GxEPD_WHITE);
           display.drawLine(85+xk,13+yk, 124+xk, 13+yk, GxEPD_WHITE);//x1 y1 x2 y2
           display.drawLine(102+xk, 0+yk, 102+xk, 85+yk, GxEPD_WHITE);//x1 y1 x2 y2
           display.setCursor(88+xk, 4+yk);
           display.println(utf8rus("Сб"));
           
           display.setCursor(105+xk, 4+yk);
           display.println(utf8rus("Вс"));
          display.setTextColor(GxEPD_BLACK);

      
    for(int i=0;i<6;i++){//вертикаль
    for(int j=0;j<7;j++){//горизонталь
    if(j-k+7*i<=N&&j-k+7*i>0){
      if((j==5)||(j==6))
      {//display.fillRect(j*18, i*11+10, 16, 11, GxEPD_BLACK);//x y w h
        display.setTextColor(GxEPD_WHITE);
        display.setCursor(j*17+3+1+xk, i*11+18+yk);
        display.print(j-k+7*i);
        display.setTextColor(GxEPD_BLACK);
         sun=1;
      }
      else
      {display.setCursor(j*17+3+1+xk, i*11+18+yk);
    
       display.print(j-k+7*i);
       sun=0;
      }
      }
       //

    if(j-k+7*i==D){ 
       if(sun==1)
       {display.drawRect( j*17+1+xk, i*11+9+7+yk,15,11, GxEPD_WHITE);
       }
       else{
        display.drawRect( j*17+1+xk, i*11+9+7+yk,15,11, GxEPD_BLACK);
       }
      display.setTextColor(GxEPD_BLACK);
     sun=0;
      } // 
     
    }
    }
display.drawRect( 0+xk, 0+yk,123,87, GxEPD_BLACK);

display.drawLine(10+xk, 25, 110+xk, 25, GxEPD_RED);//x1 y1 x2 y2
display.drawLine(10+xk, 132, 110+xk, 132, GxEPD_RED);//x1 y1 x2 y2
display.drawLine(10+xk, 63, 110+xk, 63, GxEPD_RED);//x1 y1 x2 y2
display.drawLine(20+xk, 40, 100+xk, 40, GxEPD_RED);//x1 y1 x2 y2
//***********************ДАТА***************************************
    
   display.setFont(&FreeMonoBold9pt7b);
  // display.setCursor(135, 15);
    display.setCursor(38,  38);
            
         //   display.print(date);
         //  display.print(".");
         //  if(mon<10){display.print("0");}
          // display.print(mon);
          // display.print(".");
          display.print(years);

//DisplayConditionsSection(40, 180,"09d", SmallIcon);
DisplayConditionsSection(30, 180, WxConditions[0].Icon, SmallIcon);
display.setCursor(65, 172);
display.setFont(&FreeMonoBold9pt7b);
display.setTextColor(GxEPD_RED);
display.print(WxConditions[0].Temperature);
display.setCursor(65, 192);
display.setTextColor(GxEPD_BLACK);
display.print(WxConditions[0].Humidity);

/*  display.setFont(&FreeMonoBold18pt7b);
          // display.setCursor(136, 60);

           display.setCursor(xk+7, 187);
            if(CurrentHour<10){ display.setCursor(xk+18, 187);}
          display.print(CurrentHour);//время с нтп часы
     display.print(":");
     if(CurrentMin<10){display.print("0");}
    display.print(CurrentMin );//минуты
*/
    
       
const char* monrus[] = { "ЯНВАРЬ", "ФЕВРАЛЬ", "МАРТ", "АПРЕЛЬ", "МАЙ", "ИЮНЬ", "ИЮЛЬ", "АВГУСТ", "СЕНТЯБРЬ", "ОКТЯБРЬ", "НОЯБРЬ", "ДЕКАБРЬ" };
int curmon[]={27,20,37,24,43,37,37,25,12,19,25,19};
const char* wek[] = { "Понедельн","Вторник","Среда","Четверг","Пятница","Суббота","Воскресен"};
int curwek[]={8,19,31,19,19,19,8};
  display.setFont();  

if(Dn1>5){
  display.setTextColor(GxEPD_RED);
}else
{
  display.setTextColor(GxEPD_BLACK);
}

 display.setTextSize(2);
// display.setCursor(38,  30);
//  display.print(years);
 //mon=12;
  display.setCursor(xk+curmon[mon-1],45);
 display.println(utf8rus(monrus[mon-1]));
// dow=7;

   display.setCursor(xk+curwek[dow-1],140);
   display.println(utf8rus(wek[dow-1]));

 


  display.setCursor(21,73);
 display.setTextSize(7);
 if(date<10){ display.print(utf8rus("0"));}
  display.print(date);
   display.setTextSize(1);
          display.update();
//***********************************************************************************************************************
// опрос кнопок 10с перед сном
  for (int i = 0; i < 200; i++) {
  // покинуть цикл при достижении 100
  delay (100);
  if ((i == 70)||(i == 80)||(i == 90)) testSpeaker2();//три писка перед уходом в сон
  if (i == 100) break;
  bool gpio_get_level_38 = digitalRead(38);
   if (gpio_get_level_38 == 1)
       {testSpeaker();
       // Serial.println("GxepdPage4");
        Kalendar();
        break;
        //GxepdPage4();
       }
     bool gpio_get_level_37 = digitalRead(37);  
      if (gpio_get_level_37 == 1)
       {testSpeaker();
        GxepdPage5();
        break;
       }
       bool gpio_get_level_39 = digitalRead(39);  
      if (gpio_get_level_39 == 1)
       {testSpeaker();
        GxepdPage2();
        break;
       }
}
//SleepPage();
}


     void DrawRSSI(int x, int y, int rssi) //график силы вай-фай
{
  int WIFIsignal = 0;
  int xpos = 1;
  for (int _rssi = -100; _rssi <= rssi; _rssi = _rssi + 20) {
    if (_rssi <= -20)  WIFIsignal = 15; //            <-20dbm displays 5-bars
    if (_rssi <= -40)  WIFIsignal = 12; //  -40dbm to  -21dbm displays 4-bars
    if (_rssi <= -60)  WIFIsignal = 9; //  -60dbm to  -41dbm displays 3-bars
    if (_rssi <= -80)  WIFIsignal = 6; //  -80dbm to  -61dbm displays 2-bars
    if (_rssi <= -100) WIFIsignal = 3;  // -100dbm to  -81dbm displays 1-bar
    display.fillRect(x + xpos * 4, y - WIFIsignal, 2, WIFIsignal, GxEPD_BLACK);
    xpos++;
  }
}

void DrawBattery(int x, int y) {
  uint8_t percentage = 100;
  esp_adc_cal_characteristics_t adc_chars;
  esp_adc_cal_value_t val_type = esp_adc_cal_characterize(ADC_UNIT_1, ADC_ATTEN_DB_11, ADC_WIDTH_BIT_12, 1100, &adc_chars);
  if (val_type == ESP_ADC_CAL_VAL_EFUSE_VREF) {
    Serial.printf("eFuse Vref:%u mV", adc_chars.vref);
    vref = adc_chars.vref;
  }
 
//  voltage=2.99;
  if (voltage > 2 ) { // Only display if there is a valid reading
 //   Serial.println("\nVoltage = " + String(voltage));
    //percentage = 2836.9625 * pow(voltage, 4) - 43987.4889 * pow(voltage, 3) + 255233.8134 * pow(voltage, 2) - 656689.7123 * voltage + 632041.7303;
     percentage = (voltage-2.8)*100/1.40;
    // Serial.println("\npercentage = " + String(percentage));
    // percentage = percentage/1.40; 
    // Serial.println("\npercentage = " + String(percentage));
   //  percentage = percentage*100;
  //    Serial.println("\npercentage = " + String(percentage));
    if (voltage >= 4.10) percentage = 100;
    if (voltage <= 2.80) percentage = 0;  // orig 3.5
     display.fillRect(x , y - 14, 40, 15,GxEPD_WHITE );
    display.drawRect(x + 2, y - 14, 30, 15,GxEPD_BLACK);
    display.fillRect(x + 32, y - 10, 4, 7,GxEPD_BLACK);
    if (voltage >= 3.00)
    {
      display.fillRect(x + 4, y - 12, 26 * percentage / 100.0, 11,GxEPD_BLACK);
      // display.fillRect(x + 4, y - 12, 26 * percentage / 100.0, 11,GxEPD_RED);
    }else
    {
      display.fillRect(x + 4, y - 12, 26 * percentage / 100.0, 11,GxEPD_RED);
    }
    
    display.setTextColor(GxEPD_BLACK);
    display.setFont();
    display.setCursor(x + 40, y-15 );
    display.print( String(percentage) + "% "); 
    display.setCursor(x + 40, y-5 );
    display.print( String(voltage, 1) + "v");
  }
}
