Друзья, простите, сваливаю на работу на сутки. Там только кастрированный Линукс, наш сайт он не берет из-за версии браузера, а установить новую невозможно. Таймаут.
Однозначно не скажу, но есть предположение, что это что-то типа фильтра получается..
Для более надёжного подавления дребезга.
Но это 100% моё ИМХО!
Гм.. Значит тут враньё?
Или я где-то банально заблудился?
У нас уже была тема про энкодер, прерывания и со срачем на 200 сообщений…
ХА! А у ТС уже была тема с энкодером и такой обработкой! И там ему помогло как раз поменять местами выводы
ага, проблема была что оно только увеличивалось. Когда выводы поменял - стало только уменьшаться.
Наверное, именно это ему и было нужно
Не, ребяты, я пас.
Опять два дня разбираться, почему клиенту неудобно спать стоя…
Ну и сам подумай - ты всегда будешь входить в прерывание по одному событию. А их у тебя должно быть ДВА.
Тут уж действительно проще просто в loop’e читать…
Ну так, в этом loop() отчего бы и не работать?
А если loop как простыня,. огромный , длится десятки миллисекунд, а то и сотни…
Или вообще с delay() на секунду - другую))))
За такое надо розги применять к скетчеписателю)
Ладно если в прерывании переменную инкрементировать нужно, а если что-то по существеннее - всё равно будешь в loop обрабатывать. И получается разница не велика.
Да и loop нужно проектировать так, чтобы сильно долго один проход не задерживался. Например, можно каждый “проход” в лупе читать состояния концевиков, датчики и тд и тп, а можно это делать через интервалы и тд и тп…
)))
Да я ведь шучу. Просто сколько видел скетчей от новичков, и , особенно для Меги, так , зачастую это что-то грандиозное, кучи датчиков, реле , с десяток
библиотек, огромный loop))
Потому что, когда крутите налево, у Вас в прерывании encA “упало“, т.е. “0”, а encB в “1”. А когда крутите направо, в прерывании encA “упало“, т.е. “0“, а encB тоже в “0“.
В результате налево clk<dt — 0<1 — true и все работает, а направо clk>dt — 0>0 — false и не работает.
Надо не сравнивать clk и dt, а в прерывании по пину A считывать состояние пина B. Или наоборот. Т.е.
void ENCODER()
{
if (digitalRead(pin_encB))
enc++;
else
enc--;
}
Спасибо, логику уловил! Попробую!
А ещё надо было учитывать какой у вас энкодедер и как подключен. Потому прошлый раз перемена мест и сработала
Corp, гигантское спасибо! Запахало!
В том и проблема. Экономлю, покупаю ноуноймы… А они разные, падлы. Плюнул, взял десяток одной партии, теперь только с ними и вожусь.