void GxepdPage4()
{

  int Dn=dow;
  if(p==1)
  {Dn=Dn+3;
   if(Dn>6)Dn=Dn-7;
  }
  
  if(Dn==0){Dn=7;}//день недели определяем и переводим в интервал 1-7
 



    display.setRotation(4);
  display.fillScreen(GxEPD_WHITE);
  display.setTextColor(GxEPD_BLACK);
 display.setFont();
  
  
// DisplayWeatherIcon(64, 100);                  // Display weather icon    scale = Large;
  DrawBattery( 0, 21);
//DrawRSSI(105, 21, wifi_signal);
  display.setTextColor(GxEPD_RED);
 clok(70, 19);
  display.setTextColor(GxEPD_BLACK);
  
display.drawLine(10,25, 128, 25, GxEPD_BLACK);//x1 y1 x2 y2
 display.drawLine(127, 25, 127, 295, GxEPD_BLACK);//x1 y1 x2 y2
//display.drawLine(0, 40, 120, 40, GxEPD_BLACK);//x1 y1 x2 y2
//display.drawLine(0, 70, 120, 70, GxEPD_BLACK);//x1 y1 x2 y2
for (int i=0;i<3;i++)
{int index =i;
  if(p==1) index =i+3;

DisplayForecastWeather3(0, 55, index,Dn);//x,y,index ,день недели
Dn++;
if(Dn>7)Dn=1;
}



//display.drawLine(0, 230, 120, 230, GxEPD_BLACK);//x1 y1 x2 y2
//display.drawLine(64, 170, 64, 230, GxEPD_BLACK);//x1 y1 x2 y2
  display.update();
//***************** опрос клавиш **********************************  
    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();
        if(p==0){p=1; }
          else
          {p=0; }
         GxepdPage42();
          break;
       }
      bool gpio_get_level_37 = digitalRead(37);  
      if (gpio_get_level_37 == 1)
       {testSpeaker();
       kalen=1;
       GxepdPage2();
       // Kalendar();
         break;
       }
       bool gpio_get_level_39 = digitalRead(39);  
      if (gpio_get_level_39 == 1)
       {testSpeaker();
        GxepdPage2();
         break;
       }
    }
 
 //**************************************************************///////////////////////////////////////////////////////////////  

}
void GxepdPage42()
{

  int Dn=dow;
  if(p==1)
  {Dn=Dn+3;
   if(Dn>6)Dn=Dn-7;
  }
  
  if(Dn==0){Dn=7;}//день недели определяем и переводим в интервал 1-7
 



    display.setRotation(4);
  display.fillScreen(GxEPD_WHITE);
  display.setTextColor(GxEPD_BLACK);
 display.setFont();
  
  
// DisplayWeatherIcon(64, 100);                  // Display weather icon    scale = Large;
  DrawBattery( 0, 21);
//DrawRSSI(105, 21, wifi_signal);
  display.setTextColor(GxEPD_RED);
 clok(70, 19);
  display.setTextColor(GxEPD_BLACK);
  
display.drawLine(10,25, 128, 25, GxEPD_BLACK);//x1 y1 x2 y2
 display.drawLine(127, 25, 127, 295, GxEPD_BLACK);//x1 y1 x2 y2
//display.drawLine(0, 40, 120, 40, GxEPD_BLACK);//x1 y1 x2 y2
//display.drawLine(0, 70, 120, 70, GxEPD_BLACK);//x1 y1 x2 y2
for (int i=0;i<3;i++)
{int index =i;
  if(p==1) index =i+3;

DisplayForecastWeather3(0, 55, index,Dn);//x,y,index ,день недели
Dn++;
if(Dn>7)Dn=1;
}



//display.drawLine(0, 230, 120, 230, GxEPD_BLACK);//x1 y1 x2 y2
//display.drawLine(64, 170, 64, 230, GxEPD_BLACK);//x1 y1 x2 y2
  display.update();
//***************** опрос клавиш **********************************  
    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");
        if(p==0){p=1; }
          else
          {p=0; }
         GxepdPage4();
         break;
       }
      bool gpio_get_level_37 = digitalRead(37);  
      if (gpio_get_level_37 == 1)
       {testSpeaker();
       // Kalendar();
       GxepdPage2();
        break;
       }
       bool gpio_get_level_39 = digitalRead(39);  
      if (gpio_get_level_39 == 1)
       {testSpeaker();
        GxepdPage2();
        break;
       }
    }
 
 //**************************************************************  

}
//***************************************************************************************************
void DisplayForecastWeather3(int x, int y, int index,int Dn) {
  int fwidth = 90;//высота 
 const char* wek[] = { "П","В","С","Ч","П","С","В","н","т","р","т","т","б","с"};
 if(index>2)
 {y = y +45+ fwidth * (index-3);
 }
 else
{y = y +45+ fwidth * index;
}
x=x+10;
//**************День недели*************************
if(Dn<6)
{display.fillRect(0, y-29-38-7 , 10,y+9-3,GxEPD_BLACK);
}
else
{
 display.fillRect(0, y-29-38-7 , 10,y+9-3,GxEPD_RED); 
}
display.setFont();
display.setTextColor(GxEPD_WHITE);
display.setCursor(2,y-40+3);
 display.print(utf8rus(wek[Dn-1]));
display.setCursor(2,y-30+3);
display.print(utf8rus(wek[Dn-1+7]));

//*********************
 DisplayConditionsSection(x+30-3 , y-48 , WxForecast[index].Icon, SmallIcon);//вывод иконки погоды
  display.setTextColor(GxEPD_RED);
  display.setFont();
display.setTextSize(2);
static char outstr[15];
  display.setCursor(62,y-24-46);
  dtostrf(WxForecast[index].day,5, 1, outstr);
 display.print(outstr);
   display.setTextColor(GxEPD_BLACK);
 display.setCursor(62,y-4-48);
  dtostrf(WxForecast[index].night,5, 1, outstr);
 display.print(outstr);
 display.setTextSize(1);
  display.drawLine(0, y+15, 128, y+15, GxEPD_WHITE);//x1 y1 x2 y2
 display.drawLine(10, y+15, 128, y+15, GxEPD_BLACK);//x1 y1 x2 y2

 // drawString(x + fwidth / 2, y + 30, String(ConvertUnixTime(WxForecast[index].Dt + WxConditions[0].Timezone).substring(0, 5)), CENTER);
 // drawString(x + fwidth / 2, y + 125, String(WxForecast[index].High, 0) + "°/" + String(WxForecast[index].Low, 0) + "°", CENTER);
 display.setTextColor(GxEPD_BLACK);
 display.setFont();
 display.setTextSize(1);
 display.setCursor(82-60,y-45+15+5);
 int h=WxForecast[index].Humidity;
 display.print(h);//WxForecast[index].Humidity   
  display.setCursor(96-60,y-45+15+5);
  display.print("%");
 display.setCursor(82-60,y-45+30);
 h=WxForecast[index].Pressure*1000/1333;//WxForecast[index].Pressure
 display.print(h);
 display.setCursor(102-60,y-45+30);
  display.print("mm");
  display.setCursor(82-60,y-45+45-5);
  if(WxForecast[index].Windspeed>7)
  {display.setTextColor(GxEPD_RED);
  }
  else
  { display.setTextColor(GxEPD_BLACK);
  }
  display.print(WxForecast[index].Windspeed);//WxForecast[index].Windspeed  WxForecast[index].Winddir
  display.setCursor(108-60,y-45+45-5);
  display.print("m/s");
  display.setTextColor(GxEPD_BLACK);
//******************************************************************************************
DisplayDisplayWindSection(x+30+58, y-12, WxForecast[index].Winddir,WxForecast[index].Windspeed, 16);//роза ветров
  
}

void DisplayDisplayWindSection(int x, int y, float angle, float windspeed, int Cradius) {
  arrow(x, y, Cradius-7, angle, 5, 15); // Show wind direction on outer circle of width and length
 display.setFont();
  int dxo, dyo, dxi, dyi;
  display.drawCircle(x, y, Cradius, GxEPD_BLACK);       // Draw compass circle
  display.drawCircle(x, y, Cradius + 1, GxEPD_BLACK);   // Draw compass circle
  display.drawCircle(x, y, Cradius * 0.7, GxEPD_BLACK); // Draw compass inner circle
  for (float a = 0; a < 360; a = a + 22.5) {
    dxo = Cradius * cos((a - 90) * PI / 180);
    dyo = Cradius * sin((a - 90) * PI / 180);
    //if (a == 45)  drawString(dxo + x + 15, dyo + y - 18, TXT_NE, CENTER);
   // if (a == 135) drawString(dxo + x + 20, dyo + y - 2,  TXT_SE, CENTER);
  //  if (a == 225) drawString(dxo + x - 20, dyo + y - 2,  TXT_SW, CENTER);
  //  if (a == 315) drawString(dxo + x - 15, dyo + y - 18, TXT_NW, CENTER);
    dxi = dxo * 0.9;
    dyi = dyo * 0.9;
    display.drawLine(dxo + x, dyo + y, dxi + x, dyi + y, GxEPD_BLACK);
    dxo = dxo * 0.7;
    dyo = dyo * 0.7;
    dxi = dxo * 0.9;
    dyi = dyo * 0.9;
    display.drawLine(dxo + x, dyo + y, dxi + x, dyi + y, GxEPD_BLACK);
  }
   display.setTextColor(GxEPD_RED);
  drawString(x-2, y - Cradius - 9,     TXT_N, CENTER);
      drawString(x-2, y + Cradius +3,     TXT_S, CENTER);
  drawString(x - Cradius - 9, y - 3, TXT_W, CENTER);
  drawString(x + Cradius + 5, y - 3, TXT_E, CENTER);

 // drawString(x + 3, y + 50, String(angle, 0) + "°", CENTER);
  display.setFont();
  
 
  drawString(35, y + 17, WindDegToOrdinalDirection(angle), CENTER);
  display.setTextColor(GxEPD_BLACK);
 // display.setFont(OpenSans24B);
//  drawString(x + 3, y - 18, String(windspeed, 1), CENTER);
 // display.setFont(OpenSans12B);
 // drawString(x, y + 25, ( "m/s"), CENTER);
}

String WindDegToOrdinalDirection(float winddirection) {
  if (winddirection >= 348.75 || winddirection < 11.25)  return TXT_N;
  if (winddirection >=  11.25 && winddirection < 33.75)  return TXT_NNE;
  if (winddirection >=  33.75 && winddirection < 56.25)  return TXT_NE;
  if (winddirection >=  56.25 && winddirection < 78.75)  return TXT_ENE;
  if (winddirection >=  78.75 && winddirection < 101.25) return TXT_E;
  if (winddirection >= 101.25 && winddirection < 123.75) return TXT_ESE;
  if (winddirection >= 123.75 && winddirection < 146.25) return TXT_SE;
  if (winddirection >= 146.25 && winddirection < 168.75) return TXT_SSE;
  if (winddirection >= 168.75 && winddirection < 191.25) return TXT_S;
  if (winddirection >= 191.25 && winddirection < 213.75) return TXT_SSW;
  if (winddirection >= 213.75 && winddirection < 236.25) return TXT_SW;
  if (winddirection >= 236.25 && winddirection < 258.75) return TXT_WSW;
  if (winddirection >= 258.75 && winddirection < 281.25) return TXT_W;
  if (winddirection >= 281.25 && winddirection < 303.75) return TXT_WNW;
  if (winddirection >= 303.75 && winddirection < 326.25) return TXT_NW;
  if (winddirection >= 326.25 && winddirection < 348.75) return TXT_NNW;
  return "?";
}

void arrow(int x, int y, int asize, float aangle, int pwidth, int plength) {
  float dx = (asize - 10) * cos((aangle - 90) * PI / 180) + x; // calculate X position
  float dy = (asize - 10) * sin((aangle - 90) * PI / 180) + y; // calculate Y position
  float x1 = 0;         float y1 = plength;
  float x2 = pwidth / 2;  float y2 = pwidth / 2;
  float x3 = -pwidth / 2; float y3 = pwidth / 2;
  float angle = aangle * PI / 180 - 135;
  float xx1 = x1 * cos(angle) - y1 * sin(angle) + dx;
  float yy1 = y1 * cos(angle) + x1 * sin(angle) + dy;
  float xx2 = x2 * cos(angle) - y2 * sin(angle) + dx;
  float yy2 = y2 * cos(angle) + x2 * sin(angle) + dy;
  float xx3 = x3 * cos(angle) - y3 * sin(angle) + dx;
  float yy3 = y3 * cos(angle) + x3 * sin(angle) + dy;
  display.fillTriangle(xx1, yy1, xx3, yy3, xx2, yy2, GxEPD_RED);
}
