такой?Кто знает как ?
#include <Math.h>
#include <Wire.h>
#include <GyverOLED.h>
GyverOLED <SSD1306_128x64, OLED_NO_BUFFER> oled;
#define WindSensorPin (2)
volatile unsigned long Rotations;
volatile unsigned long ContactBounceTime;
float WindSpeed;
void setup() {
Serial.begin(9600);
pinMode (WindSensorPin, INPUT);
attachInterrupt(digitalPinToInterrupt(WindSensorPin), isr_rotation, FALLING);
Serial.println ("Wind Speed Test");
Serial.println ("Rotations\tM/S");
  oled.init();
  oled.flipV(0);
  oled.clear();
  oled.setScale(2);
  oled.clear();
  oled.setCursor(10, 2);
  oled.print ("M/S");
  oled.setCursor(42, 4);
  oled.print(WindSpeed);
  delay (3000);
}
void loop() {
  Rotations = 0;
  sei();
  delay (3000);
  cli();
  WindSpeed = Rotations*0.12;
   delay (3000);
  Serial.print(Rotations); Serial.print("\t\t");
  Serial.print(WindSpeed);
}
void isr_rotation() {
if ((millis()-ContactBounceTime) > 15){
    Rotations++;
    ContactBounceTime = millis();
  }
}#include <Math.h>
#include <Wire.h>
#include <GyverOLED.h>
GyverOLED <SSD1306_128x64, OLED_NO_BUFFER> oled;
#define WindSensorPin (2)
volatile unsigned long Rotations;
volatile unsigned long ContactBounceTime;
float WindSpeed;
void setup() {
Serial.begin(9600);
pinMode (WindSensorPin, INPUT);
attachInterrupt(digitalPinToInterrupt(WindSensorPin), isr_rotation, FALLING);
Serial.println ("Wind Speed Test");
Serial.println ("Rotations\tM/S");
  oled.init();
}
void loop() {
  Rotations = 0;
  sei();
  delay (3000);
  cli();
  WindSpeed = Rotations*0.12;
   delay (3000);
  Serial.print(Rotations); Serial.print("\t\t");
  Serial.print(WindSpeed);
  oled.flipV(0);
  oled.clear();
  oled.setScale(2);   
  oled.clear();
  oled.setCursor(10, 2);
  oled.print ("M/S");
  oled.setCursor(42, 4); 
  oled.print(Rotations);
  delay (3000);
}
void isr_rotation() {
if ((millis()-ContactBounceTime) > 15){
    Rotations++;
    ContactBounceTime = millis();
  }
}#define OLED_SOFT_BUFFER_64     // Буфер на стороне МК
#include <GyverOLED.h>          // Библиотека дисплея
GyverOLED<SSD1306_128x64> oled; // Обьект дисплея
#include <GyverButton.h>      // Либа кнопок
GButton up(3, HIGH_PULL);     // Кнопки
GButton down(4, HIGH_PULL);
GButton ok(2, HIGH_PULL);
#define ITEMS 24               // Общее кол во пунктов (больше 8 - нужно несколько страниц)
// Битмап с картинкой стрелочки (Если нужен)
const uint8_t ptr_bmp[] PROGMEM = {
  0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0xFF, 0xFF, 0x7E, 0x3C, 0x18,
};
void setup() {
  oled.init();           // Инциализация дисплея
  oled.setContrast(255); // Макс. яркость
}
void loop() {
  static int8_t pointer = 0; // Переменная указатель
  /* Кнопки */
  up.tick();                 // Опрос кнопок
  down.tick();
  ok.tick();
  if (up.isClick() or up.isHold()) {                // Если кнопку нажали или удерживают
    pointer = constrain(pointer - 1, 0, ITEMS - 1); // Двигаем указатель в пределах дисплея
  }
  if (down.isClick() or down.isHold()) {
    pointer = constrain(pointer + 1, 0, ITEMS - 1);
  }
  if (ok.isClick()) {   // Нажатие на ОК - переход в пункт меню
    switch (pointer) {  // По номеру указателей располагаем вложенные функции (можно вложенные меню)
      case 0: func(); break;  // По нажатию на ОК при наведении на 0й пункт вызвать функцию
      case 1: break;
      case 2: break;
      case 3: break;
      case 4: break;
      case 5: break;
      case 6: break;
      case 7: break;
        // И все остальные
    }
  }
  /* меню */
  oled.clear();           // Очищаем буфер
  oled.home();            // Курсор в левый верхний угол
  if (pointer < 8) {      // Первая страница
    oled.print            // Вывод всех пунктов
    (F(
       "  Parameter 0:\n" // Не забываем про '\n' - символ переноса строки
       "  Parameter 1:\n"
       "  Parameter 2:\n"
       "  Parameter 3:\n"
       "  Parameter 4:\n"
       "  Parameter 5:\n"
       "  Parameter 6:\n"
       "  Parameter 7:\n"
     ));
  } else if (pointer < 16) {// Вторая страница
    oled.print
    (F(
       "  Parameter 8:\n"
       "  Parameter 9:\n"
       "  Parameter 10:\n"
       "  Parameter 11:\n"
       "  Parameter 12:\n"
       "  Parameter 13:\n"
       "  Parameter 14:\n"
       "  Parameter 15:\n"
     ));
  } else {                  // Последняя страница
    oled.print
    (F(
       "  Parameter 16:\n"
       "  Parameter 17:\n"
       "  Parameter 18:\n"
       "  Parameter 19:\n"
       "  Parameter 20:\n"
       "  Parameter 21:\n"
       "  Parameter 22:\n"
       "  Parameter 23:\n"
     ));
  }
  printPointer(pointer);  // Вывод указателя
  oled.update();          // Выводим кадр на дисплей
}
void printPointer(uint8_t pointer) {
  // Символьный указатель - лучший выбор в многостраничном меню
  // Указатель в начале строки
  oled.setCursor(0, pointer);
  oled.print(">");
  // Можно еще в конце
  /*oled.setCursor(20, pointer);
    oled.print("<");*/
  // Указатель в виде прямоугольной рамки со скругленными углами
  /*oled.roundRect(0, pointer * 8, 127, (pointer * 8) + 6);*/
  // Указатель в виде битмапа (картинки)
  /*oled.drawBitmap(0, pointer * 8, ptr_bmp, 10, 8);*/
}
/* пример вложеной функции, которую можно вызвать из под меню */
void func(void) {
  oled.clear();
  oled.home();
  oled.print(F("Press OK to return"));
  oled.update();
  while (1) {
    ok.tick();
    if (ok.isClick()) return; // return возвращает нас в предыдущее меню
  }
}void loop() {
  static boolean scr;
  static int8_t pointer = 0; // Переменная указатель
  /* Кнопки */
  up.tick(); // Опрос кнопок
  down.tick();
  ok.tick();
  if (up.isClick() or up.isHold()) { // Если кнопку нажали или удерживают
    scr = 0; //обновили экран
    pointer = constrain(pointer - 1, 0, ITEMS - 1); // Двигаем указатель в пределах дисплея
  }
  if (down.isClick() or down.isHold()) {
    scr = 0; //обновили экран
    pointer = constrain(pointer + 1, 0, ITEMS - 1);
  }
  if (ok.isClick()) { // Нажатие на ОК - переход в пункт меню
    scr = 0; //обновили экран
    switch (pointer) { // По номеру указателей располагаем вложенные функции (можно вложенные меню)
      case 0: func(); break; // По нажатию на ОК при наведении на 0й пункт вызвать функцию
      case 1: break;
      case 2: break;
      case 3: break;
      case 4: break;
      case 5: break;
      case 6: break;
      case 7: break;
        // И все остальные
    }
  }
if (!scr) {
  scr = 1; сбросили флаг обновления экрана
  /* меню */
  oled.clear(); // Очищаем буфер
  oled.home(); // Курсор в левый верхний угол
  if (pointer < 8) { // Первая страница
    oled.print // Вывод всех пунктов
    (F(
       " Parameter 0:\n" // Не забываем про '\n' - символ переноса строки
       " Parameter 1:\n"
       " Parameter 2:\n"
       " Parameter 3:\n"
       " Parameter 4:\n"
       " Parameter 5:\n"
       " Parameter 6:\n"
       " Parameter 7:\n"
     ));
  } else if (pointer < 16) {// Вторая страница
    oled.print
    (F(
       " Parameter 8:\n"
       " Parameter 9:\n"
       " Parameter 10:\n"
       " Parameter 11:\n"
       " Parameter 12:\n"
       " Parameter 13:\n"
       " Parameter 14:\n"
       " Parameter 15:\n"
     ));
  } else { // Последняя страница
    oled.print
    (F(
       " Parameter 16:\n"
       " Parameter 17:\n"
       " Parameter 18:\n"
       " Parameter 19:\n"
       " Parameter 20:\n"
       " Parameter 21:\n"
       " Parameter 22:\n"
       " Parameter 23:\n"
     ));
  }
  printPointer(pointer); // Вывод указателя
  oled.update(); // Выводим кадр на дисплей
 }
}Ну мне пара таких попадались. Интересно, чем поможет Вам такая информация?Кто-то встречался с тем, что дисплеи умирали сами собой?
