Официальный сайт компании Arduino по адресу arduino.cc
энкодер и ускорение
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Добрый день!
Вопрос в следующем.
Есть обычная крутилка- энкодер.
нужно точно задавать значения в диапазоне от 0 до 10000 только при помощи энкодера.
Все дело в том что шаг мне нужен 1 для точной настройки, но сами понимаете 10тыс импульсов ручками не накрутишь.
Я хочу попытаться сделать нечто вроде при активном изменении прибавлять не по 1 а с каким нибудь коэффициентом.
я пытался при помощи millis() как то вырулить но не получается потому что нет ясного понимания как это реализовать.
Если крутить постоянно то разница между t1 и millis() равна примерно 103мс; Где t1 это когда я в последний раз крутил ручку..
Думаю может как то нужно еще привязаться к посчету - сколько раз я *быстро* крутил ручку и потом только вводить коэффициент.
Подскажите кто что думает на эту тему
Еще момент - бесконечно *быстро* тоже не получится рукой вращать, ведь нужно через менее чем оборот перехватывать крутилку
сделайте как делают все, нажимаешь кнопку энкодера и идёт с ускорением раз в 100, повторное нажатие возвращает в нормальный режим
ua6em - у меня кнопка это уже вход в меню для настройки скорости вращения двигателя. повторная кнопка -выход из меню
вот код он работает но не так мягко как хотелось бы. возникают сложности допустим когда я докрутил до 3253 и нужно докрутить до 3270 и тут неожиданно получаю перелет на 50... может по мягче как сделать можно.
Есть два типа нажатий - длительное и короткое, задействуйте длительное более 2 секунд на вход в меню а короткое на включение ускорения, одно короткое включил, другое короткое выключил, влево вправо скорректировали (обычная процедура настройки частоты)
Эргономика должна быть эргономной )))
Вообще-то еще проще. У вас 0 до 10000. Но лучше 0000-9999. Так что лучше сделать так . по часовой -против от 0 до 9 тысяча, потом кнопка от 0 до 9 сотен , от 0 до 9 десяток, от 0 до 9 единиц и потом щелчек и число введено.
Как вариант поворот может быть выбирать от 0 до 9 и <- (вернуться на разряд назад)
Можно коэффициент увеличивать с каждым импульсом энкодера на величину коэффициента, а уменьшать через временной период, тоже на коэффициентно, но деленный на делитель. Тогда при правильном подборе временного периода, при быстром кручении коэффициент будет увеличиваться и уменьшатся при замедлении соответственно.
Можно коэффициент увеличивать с каждым импульсом энкодера на величину коэффициента, а уменьшать через временной период, тоже на коэффициентно, но деленный на делитель.
Проще говоря , не линейную сделать шкалу ,а логарифмическую. Ну как номиналы резисторов.
https://goo.gl/dafAIk
1,2,3,5,7,10,15,22,33,47,68,100,150,220,330,470,680,1000,1500,2200,3300,4700,6800,9999
спасибо за ответы. все таки сделал по примеру Nosferatu. Требуется оперативность в изменении скорости. в целом нормально вышло.
Я делаю с ускорением иногда. Код из моей либы.
Там два варианта. Если задае калбек то он определяет когда и на сколько ускорятся,, это чтоб либу не переписывать под каждый случай. Если он не задан - то после 32 быстрых такта, т.е быстрей 10мсек инкремент становится 100 вместо 1. Первый небыстрый такт возвращает инкремент в 1. Это переменная d, в единицу она установлена до фрагмента.
Использую такое давно, а нажатие, двойное нажатие, долгое нажатие и удержание нажатым при вращении используются для разных других тем. Кстати удобство работы с энкодером сильно зависит от диаметра ручки, попробуйте разные.
Logik да вы правы. у меня примерно так же получилось и насчет ручки Вы правы. купил ручку и приспособил. стало в разы лучше крутить
Энкодер можно крутить и в нажатом состоянии. В ненажатом - у меня прибавляются/отнимаются единицы, а в нажатом - сотни.
или по нажатию кнопки выбирать разряд который меняем
fsdb
а где код,я тоже хочу.
Может кто проверял уже, в курсе поддерживает ли вот это библиотека : https://www.pjrc.com/teensy/td_libs_Encoder.html
Ускорение ?
Пока проверить нет возможности
selevo - практика показала что практичней сделать кнопки. не нужно постоянно крутить, а ускорение привязал к времени удерживания кнопки