вопрос по библиотеке RotaryEncoder
- Войдите на сайт для отправки комментариев
Сб, 16/01/2016 - 12:32
здравствуйте дорогие форумчане
нашел библиотеку RotaryEncoder для работы с энкодером библиотека понравилась работой без "тормозов"
да и аналоговые выхода заняты вместо цифровых
на библиотеку сылка https://yadi.sk/d/vtDkM8DJn6YkR
пример с библиотеки ниже
// ----- // InterruptRotator.ino - Пример для библиотеки RotaryEncoder. // Этот класс реализован для использования с самой среде программирования. // Copyright (C) Маттиас Хертелем http://www.mathertel.de // Эта работа лицензируется в соответствии с лицензией BSD в стиле. См http://www.mathertel.de/License.aspx // Дополнительная информация о: http://www.mathertel.de/Arduino // ----- // 18.01.2014 созданный Маттиасом Хертел // ----- // Этот пример проверяет состояние датчика вращения в функции частоты (). // Текущая позиция печатается на выходе при изменении. // Установка оборудования: // Присоединить энкодер с выходными контактами на A2 и A3. // Общая контакт должен быть подключен к земле. #include <RotaryEncoder.h> // Настроить RoraryEncoder для штырей A2 и A3: RotaryEncoder кодер (А2, А3); недействительными установки () { Serial.begin (57600); Serial.println ("пример SimplePollRotator для библиотеки RotaryEncoder."); // Вы, возможно, придется изменить следующие 2 строки при использовании других выводов, чем А2 и А3 PCICR | = (1 << PCIE1); // Это позволяет Pin прерывания по изменению 1, который охватывает контакты аналоговый вход или порт C. PCMSK1 | = (1 << PCINT10) | (1 << PCINT11); // Это позволяет прерывание для штифта 2 и 3 порта С } // настроить() // Обработчик прерываний служба по Изменить PIN прерывания 1 // Эта процедура будет вызываться только о любом изменении сигнала на A2 и A3: именно там, где нам нужно проверить. ISR (PCINT1_vect) { encoder.tick (); // Просто позвонить галочку (), чтобы проверить состояние. } // Прочитать текущую позицию кодера и распечатать при изменении. недействительными цикл () { статическая INT пос = 0; INT newPos = encoder.getPosition (); если (поз! = newPos) { Serial.print (newPos); Serial.println (); пос = newPos; // Просто чтобы показать, что длительные процедуры долго не сломать энкодер: // Когда newPos 66 выводе будет заморозить, но наработанные позиции будут признаны даже когда не опрошено. // Прерывание по-прежнему работает. // Выход правильно 6.6 секунд. если (== newPos 66) задержка (6600); } // если } // Цикл () // Конец
здравствуйте дорогие форумчане
нашел библиотеку RotaryEncoder для работы с энкодером библиотека понравилась работой без "тормозов"
да и аналоговые выхода заняты вместо цифровых
Поздравляем с находкой!
Только непонятно, что делает в названии топика слово "вопрос". В самом топике никакого вопроса нет :(
оёёё извините случайно создал 2 темы вот онаже ну уже провереная и с вопросом!
http://arduino.ru/forum/programmirovanie/vopros-po-biblioteke-rotaryencoder-0
Здравствуйте дорогие форумчане!
Нашел библиотеку RotaryEncoder для работы с энкодером, библиотека понравилась работой "без тормозов".
И еще, аналоговые выхода заняты вместо цифровых.
Вот ссылка на библиотеку https://yadi.sk/d/vtDkM8DJn6YkR
Пример с библиотеки ниже:
проблема в том что я не могу обнулить переменную храняшую в себе позицию энкодера
пытался переписать библиотеку у меня не вышло
проблема в том что я не могу обнулить переменную храняшую в себе позицию энкодера
А что setPosition(0) не работает?
[/quote]
А что setPosition(0) не работает?
[/quote]
нет не помогает
вот ответ от компилятора
Ответ - это прекрасно, только хотелось бы и вопрос (код) видеть. Судя по "ответу" - у Вас просто в коде ошибка.
Ответ - это прекрасно, только хотелось бы и вопрос (код) видеть. Судя по "ответу" - у Вас просто в коде ошибка.
немного стесьняусь но всеже с удовольствием он только пронктируется это будит (звуковой генератор)
Дык правильно ругается. setPosition - метод класса RotaryEncoder, а Вы его зачем-то как самостоятельную функцию используете. У Вас же есть переменная encoder. Вот и пишите encoder.setPosition(0)
спасибо вам огромное урок понят получается если переменная обявлена в библиотеке то просто из кода она не поменяется а менять надо с упоминанием того что она с библиотеки!
СПАСИБО!!!!! +++++
подскажите еще немного по моему коду как переменую val разлажить на еденицы,десятки,сотни,тысячи
для отображения на экране но сома переменая должна быть не тронута для функции Tone(val)
подскажите еще немного по моему коду как переменую val разлажить на еденицы,десятки,сотни,тысячи
для отображения на экране но сома переменая должна быть не тронута для функции Tone(val)
Берёте переменную и вытаскиваете из неё:
единицы - это остаток от деления оригинальной переменной на 10
десятки - это остаток от деления на 10 оригинальной переменной, предварительно поделённой на 10
сотни - это остаток от деления на 10 оригинальной переменной, предварительно поделённой на 100
тысямч - это остаток от деления на 10 оригинальной переменной, предварительно поделённой на 100
и т.д.
Решил вернуться к эксперементам над энкодером
подключено так
при компиляции ругается на строку RotaryEncoder encoder(A4, A5);
знаний хватает на то, что понимаю видимо как в примере так нельзя указывать чтение из аналоговых пинов, возможно потому что плата duemilanova
нужна подсказка как разрешить проблему...
З.Ы. примеры и библиотека - тут
а в коде поменяли
на свой
а в коде поменяли
на свой
ну конечно поменял...
такое чувство, что бибилиотеке "не нравится" мой ардуино
ну или что-то не так с библиотекой...посмотрел код инициализации вроде бы все логично и понятно
отпишусь по результату...видимо конфликт библиотек был...установил новую среду 1.6.7 и все заработало как надо
уважаемый коллективный разум может быть подскажете по коду
все работает, но принцип не такой как мне нужно, мне требуется, чтобы значения не уходили в отрицательные значения, то не ниже 0