Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

Partyzan
2021-11-21 22:48:52

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().
Хоча мабуть є кращий спосіб...

vvr
2021-11-21 21:55:28

вы обрабатываете энкодер с помощью какой то библиотеки.
какой  - вы не указали.

пока то, что вы написали, ни о чём.

Partyzan
2021-11-21 20:34:51

Чи можлива коректна робота такого варіанту?


if (enc2.isClick())
{
  if (enc2.isLeft())
   {
    k++;
    LCD.setCursor(0, 0);LCD.print (k);
   }
}

Натискаючи на енкодер можна крутилкою змінювати значення.

Підвал форуму