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"); } }