И снова битва с энкодером!

Во! А у коллеги поди голый энкодер (каким я их всегда покупаю).

Пины подтянуты внешними резисторами 10к, так что пуллап не нужен. Или нужен? Хотя я н понимаю, зачем…

Во как! А зачем было скрывать? Чего мы ещё не знаем, а должны бы?

Давай-те как рисуйте схему, родимую, так не пойдёт.

может всё таки библу?
Вон у Гайвера:

/*
   Пример работы с энкодером с прерыванием. Максимальная чёткость работы
   в любом быдлокоде!
*/

#define CLK 2
#define DT 3
#define SW 4

#include "GyverEncoder.h"
Encoder enc1(CLK, DT, SW);

void setup() {
  Serial.begin(9600);
  attachInterrupt(0, isr, CHANGE);    // прерывание на 2 пине! CLK у энка
}

void isr() {
  enc1.tick();  // отработка в прерывании
}

void loop() {
  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");
}

Что касается нестабильности, то может это потому что в обработчике прерывания clk считывается в тот момент, когда дребезг еще не закончился.
Если нестабильность более характерна только для одного направления вращения, то попробуй все-таки if (clk < data) поменять на if (data)

Рисую… щас будет…

Да стабильность срабатывания отличная. Только показатель рос независимо от направления вращения. Поменял местами провода CLK и Data - все заработало. Пока не пойму, почему.

А ты случайно не перепутал выводы энкодера?
Имеется ввиду:
clk и GND
или
data и GND
а то симптомы очень похожи.

Нет. Энкодеры ноунейм, конечно, но специально смотрел распиновку. GND везде (!) - средний вывод. Других картинок не встретилось.

Пользуюсь вот этой библиотекой и никогда никаких вопросов не возникало:

Рекомендую!

2 лайка

Не требует прерываний, работает по таблице состояний, срабатывает четко даже при смене направления. Есть возможность использовать с двухщелчковыми энкодерами. Забрал в копилку :+1:

ЗЫ: только документация куцая ))

А нет под рукой раздолбанного энкодера проверить? Я свой “экспериментальный” задевал куда-то. На исправном отлично.

Я ими вообще не пользуюсь, поэтому лежат только новые ))

Пользуюсь с 2016-го.) И не только с Ардуино/AVR.

1 лайк

Стараюсь все неисправные детали сразу выкидывать. Поэтому у меня такого нет.
Но, если поверите на слово, работала эта библиотека с энкодером у которого был дребезг контактов. Справлялась, но периодически было “как бы пропуск поворота”. Заменил энкодер и всё заработало “штатно”.

В коем веке человек решил с работой энкодера разобраться, а тут - “библу” предлагают…))

1 лайк

согласен, неспортивно!

1 лайк

Так пусть и разбирается по библиотеке - там метод process() 3 строки всего!

2 лайка

Не согласен! Надо исключительно по даташиту разбираться, иначе “незачот”!)))

Ну, дело хозяйское. Обычно сначала смотришь как у людей, а потом, если не устраивает, пишешь по своему.