#include <GyverOLED.h>
GyverOLED<SSD1306_128x64, OLED_NO_BUFFER> oled;

#include "GyverEncoder.h"
#define ENCODER_CLK 2
#define ENCODER_DT 11
#define ENCODER_SW 12
Encoder enc1(ENCODER_CLK, ENCODER_DT, ENCODER_SW);

//Переключатель 
#define switchPin_Rotation_Free 5
#define switchPin_Rotation_Cyclic 4


void setup() 
{
  // put your setup code here, to run once:

  Serial.begin(9600);

  //Энкодер
  attachInterrupt(0, isr, CHANGE);    // прерывание на 2 пине! CLK у энка
  
  oled.init();        // инициализация
  oled.clear();       // очистка
  oled.setScale(1);   // масштаб текста (1..4)
  
  //oled.home();        // курсор в 0,0
  //oled.print("Режим:"); //1 строка 6 символов
  //oled.setCursor(60, 0);
  //oled.print("Свободный");
  //oled.setCursor(0, 1);
  //oled.print("012345678901234567890123456789"); //20 символов хорошо видно
  ////oled.setCursor(0, 2);
  ////oled.print(""); //20 символов хорошо видно
  //oled.setCursor(0, 3);
  //oled.print("Вращение - Вправо"); //20 символов хорошо видно
  //oled.setCursor(0, 4);
  //oled.print("Вращение - Влево"); //20 символов хорошо видно
  //oled.setCursor(0, 5);
  //oled.print("Режим - Свободный"); //20 символов хорошо видно
  //oled.setCursor(0, 6);
  ////oled.print("Режим - Принудительный"); //20 символов хорошо видно
  //oled.print("Режим - Цикличный"); //20 символов хорошо видно
  //oled.setCursor(0, 7);
  //oled.print("Режим - Программный"); //20 символов хорошо видно
  
  //delay(5000); //1000 миллисекунд в 1 секунде
  //oled.clear();       // очистка


  //Переключатель Энкодер - Потенциометр
  pinMode(switchPin_Rotation_Free, INPUT_PULLUP);  // Set the switch pin as an input with a pullup resistor
  pinMode(switchPin_Rotation_Cyclic, INPUT_PULLUP); // Set the switch pin as an input with a pullup resistor
}

void isr() //Функция Энкодера
{
  enc1.tick();  // отработка в прерывании
}

void loop() 
{
  // put your main code here, to run repeatedly:


  enc1.tick();  // отработка
  //if (enc1.isRight()) Serial.println("Right");         // если был поворот
  //if (enc1.isLeft()) Serial.println("Left");
  //if (enc1.isRightH()) Serial.println("Right holded"); // если было удержание + поворот
  //if (enc1.isLeftH()) Serial.println("Left holded");


  
if (digitalRead(switchPin_Rotation_Free) == HIGH && digitalRead(switchPin_Rotation_Cyclic) == HIGH) 
{
  //switchPin_Rotation_Programmed
  
  oled.home();        // курсор в 0,0
  oled.print("Режим:"); //1 строка 6 символов
  oled.setCursor(60, 0);
  oled.print("Программный          ");
}

if (digitalRead(switchPin_Rotation_Free) == LOW && digitalRead(switchPin_Rotation_Cyclic) == HIGH) 
{  
  //switchPin_Rotation_Free

  oled.home();        // курсор в 0,0
  oled.print("Режим:"); //1 строка 6 символов
  oled.setCursor(60, 0);
  oled.print("Свободный          ");  

  if (enc1.isRight()) // если был поворот направо
  {    
    oled.setCursor(0, 3);
    oled.print("Вращение - Вправо      "); //20 символов хорошо видно 
    Serial.println("Right");   
    //delay(10000);
  }      
  if (enc1.isLeft()) // если был поворот налево
  {    
    oled.setCursor(0, 3);
    oled.print("Вращение - Влево       "); //20 символов хорошо видно  
    Serial.println("Left"); 
    //delay(10000);
  }
  else 
  {
    //oled.setCursor(0, 3);
    //oled.print("                       "); //20 символов хорошо видно   
    //Serial.println("None");
  }

  //oled.setCursor(0, 3);
  //oled.print("Вращение - Вправо"); //20 символов хорошо видно
  //oled.setCursor(0, 4);
  //oled.print("Вращение - Влево"); //20 символов хорошо видно
  
}

if (digitalRead(switchPin_Rotation_Free) == HIGH && digitalRead(switchPin_Rotation_Cyclic) == LOW) 
{
  //switchPin_Rotation_Cyclic

  oled.home();        // курсор в 0,0
  oled.print("Режим:"); //1 строка 6 символов
  oled.setCursor(60, 0);
  oled.print("Цикличный          ");  
}

if (digitalRead(switchPin_Rotation_Free) == LOW && digitalRead(switchPin_Rotation_Cyclic) == LOW)
{
  //NONE

  oled.home();        // курсор в 0,0
  oled.print("Режим:"); //1 строка 6 символов
  oled.setCursor(60, 0);
  oled.print("Отсутствует          ");  
}

if (digitalRead(ENCODER_SW) == LOW)
{  
  oled.setCursor(0, 5);
  oled.print("Тест ENCODER_SW LOW     "); //20 символов хорошо видно
}

if (digitalRead(ENCODER_SW) == HIGH)
{
  oled.setCursor(0, 5);
  oled.print("Тест ENCODER_SW HIGH    "); //20 символов хорошо видно
}

}
A4988