Ви не увійшли.
GyverEncoder.h
Зараз код має вигляд:
void loop()
{
  //enc2.tick();
  enc2.setTickMode(AUTO);
  if (enc2.isLeft()&&state=="Radio") 
   {
    LCD.clear();LCD.setCursor(0, 0);LCD.print (k);
    k++;
    s="MP3";
   }
   if (enc2.isRight()&&state=="Radio") 
    {
     LCD.clear();LCD.setCursor(0, 0);LCD.print (k);
     k--;
     s="MP3";
    }
   if (enc2.isLeft()&&state=="MP3") 
   {
    LCD.clear();LCD.setCursor(0, 1);LCD.print (z);
    z++;
    s="Radio";
   }
   if (enc2.isRight()&&state=="MP3") 
    {
     LCD.clear();LCD.setCursor(0, 1);LCD.print (z);
     z--;
     s="Radio";
    }
   if (enc2.isClick())
    {
     state=s;
     if (state=="Radio"){LCD.clear();LCD.setCursor(0, 0);LCD.print (k);}
     if (state=="MP3"){LCD.clear();LCD.setCursor(0, 1);LCD.print (z);}
    }
}
Перемикання працює якщо enc2.setTickMode(AUTO), але в цьому варіанті коли крутиш енкодер, то наявні пропуски, тобто на якийсь градус повернув і не завжди змінює число на екрані.
Якщо ставити enc2.tick(), то чітко змінюються дані на екрані, без пропусків. Але при натисканні на енкодер наявне перемикання як має бути і все, більше реакції на енкодер не має...
Доповнення. Таки запрацювало як потрібно. Потрібно було винести умову &&state== з перевірки події на енкодері в окрему умову IF, а вже в ній робити enc2.isRight()/enc2.isLeft().
Хоча мабуть є кращий спосіб...
вы обрабатываете энкодер с помощью какой то библиотеки.
какой  - вы не указали.
пока то, что вы написали, ни о чём.
Чи можлива коректна робота такого варіанту?
if (enc2.isClick())
 {
  if (enc2.isLeft()) 
   {
    k++;
    LCD.setCursor(0, 0);LCD.print (k);
   }
 }
Натискаючи на енкодер можна крутилкою змінювати значення.