Во! А у коллеги поди голый энкодер (каким я их всегда покупаю).
Пины подтянуты внешними резисторами 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 везде (!) - средний вывод. Других картинок не встретилось.
Пользуюсь вот этой библиотекой и никогда никаких вопросов не возникало:
Рекомендую!
Не требует прерываний, работает по таблице состояний, срабатывает четко даже при смене направления. Есть возможность использовать с двухщелчковыми энкодерами. Забрал в копилку
ЗЫ: только документация куцая ))
А нет под рукой раздолбанного энкодера проверить? Я свой “экспериментальный” задевал куда-то. На исправном отлично.
Я ими вообще не пользуюсь, поэтому лежат только новые ))
Пользуюсь с 2016-го.) И не только с Ардуино/AVR.
Стараюсь все неисправные детали сразу выкидывать. Поэтому у меня такого нет.
Но, если поверите на слово, работала эта библиотека с энкодером у которого был дребезг контактов. Справлялась, но периодически было “как бы пропуск поворота”. Заменил энкодер и всё заработало “штатно”.
В коем веке человек решил с работой энкодера разобраться, а тут - “библу” предлагают…))
согласен, неспортивно!
Так пусть и разбирается по библиотеке - там метод process() 3 строки всего!
Не согласен! Надо исключительно по даташиту разбираться, иначе “незачот”!)))
Ну, дело хозяйское. Обычно сначала смотришь как у людей, а потом, если не устраивает, пишешь по своему.