Connect the encoder from the mouse to Arduino

Sdílet
Vložit
  • čas přidán 15. 09. 2017
  • The encoder from the mouse has a roller, which makes it very convenient to use in various projects. Connect it to arduino very easy!
    Sketch and schema: drive.google.com/open?id=0Bw5...
    Friends, support the channel!
    The WS2812B LEDs have become very popular because of their ease of use and connection. You can control a huge tape with just 1 pin. At the same time, you can not only transmit various colors and shades, but also build entire images! An important point is adequate nutrition. The choice of power supply must be approached very seriously, otherwise you may get malfunctions.
    Libraries and sketch test: drive.google.com/open?id=0Bw5...
    Friends, support the channel!
    Z422687519909
    U139735106020
    5168 7422 2228 7801 Privat Bank (Ukraine)
    Useful links:
    Tape WS2812B: ali.pub/1x8oim
    WS2812B matrix of different sizes: ali.pub/1x8olx
    Powerful WS2812B: ali.pub/1x8oon
    5V 3A Power Supply: ali.pub/1x8pcy
    Powerful PSU 5V 3A: ali.pub/1x8pfv
    TFT Displays: ali.pub/1ny2rc
    Arduino Mega 2560: ali.pub/1ny34r
    The cheapest Arduino Pro Mini for crafts: ali.pub/1ny2z4
    Layout: ali.pub/1ny3ae
    Jumpers: ali.pub/1ny3la
    Quality jumpers: ali.pub/1ny3j5
    The most convenient cashback:
    LetyShops: goo.gl/Ev5XgI
    The most profitable cashback on aliexpress:
    Ecomerce: goo.gl/3dDc2w
    Useful links:
    Touch button with backlight: ali.pub/1tuuns
    Micro SD Module: ali.pub/1tkx36
    Arduino Mega 2560: ali.pub/1ny34r
    Cheapest Arduino Pro Mini for crafts: ali.pub/1ny2z4
    Breadbord: ali.pub/1ny3ae
    Lintels: ali.pub/1ny3la
    Quality crosspieces: ali.pub/1ny3j5
    The most convenient cash back:
    LetyShops: goo.gl/Ev5XgI
    The most profitable cash back on aliexpress:
    Ecomerce: goo.gl/3dDc2w
  • Věda a technologie

Komentáře • 114

  • @SergiyGryb
    @SergiyGryb Před 6 lety +12

    поддерживаю подход с прерываниями. Испытано: точность срабатывания намного выше и нет пропусков тактов!

    • @UCanDo
      @UCanDo  Před 6 lety +1

      Добрый день. А можете привести код для примера? Если вас не затруднит, конечно. У меня не получилось нормально настроить прерывания. Было бы не плохо посмотреть как это реализовано у других.

    • @SergiyGryb
      @SergiyGryb Před 6 lety +2

      Да, конечно, я в своих проектах использую библиотеку RotaryEncoder, разработанную немецким товарищем, работает отлично: github.com/mathertel/RotaryEncoder . В библиотеке есть примеры, в частности - InterruptRotator.ino. Единственная сложность, которая может встретиться, это корректно настроить прерывания. Библиотека использует Pin Change Interrupt для любого порта. Необходимо знание процессора и регистров. В примере используются порты А2, А3, но можно настроить для любого порта. Могу помочь с кодом, ежели чего...

    • @UCanDo
      @UCanDo  Před 6 lety +1

      Спасибо! Как появится минутка, почитаю.

    • @SergiyGryb
      @SergiyGryb Před 6 lety +3

      Рекомендую, компактная и надежная библиотека... в свое время долго выбирал, пробовал различные варианты и библиотеки, но эта библиотека по моему мнению - лучшая из того, что я пробовал... У этого разработчика есть еще одна классная библиотека для работы с кнопками, отрабатывает кроме всего прочего длинное нажатие и двойной клик. Тоже рекомендую: OneButton :-)

    • @masterkit9517
      @masterkit9517 Před 5 lety +1

      спасибо большое!

  • @user-ob8il9cv6x
    @user-ob8il9cv6x Před 3 lety

    ) мда, реально улыбнуло) Я тоже в своё время на эти грабли наступил), покане наткнулся на вопрос с прерываниями. Такой код жесть какой тяжелый и не стабильно работающий.

  • @DIY-PropaCarlo
    @DIY-PropaCarlo Před 6 lety +1

    Полезно! вдруг займусь))

  • @user-jj2wr4rp4c
    @user-jj2wr4rp4c Před 6 lety +2

    круто!сделаю себе такую же схему.

    • @UCanDo
      @UCanDo  Před 6 lety +1

      Успехов вам!

  • @variator111
    @variator111 Před 3 lety +4

    Я бы с удовольствием глянул как сделать энкодер на основе оптического сенсора от мыши (не колесика, а того, что отслеживает перемещение). Пишут, что можно добиться высокой точности и большого числа шагов.

    • @fraeratataa
      @fraeratataa Před 2 lety +1

      на оптическом только 1 сигнальный провод

  • @Jackson_Sam
    @Jackson_Sam Před 5 lety +1

    Спасибо!

  • @f33net
    @f33net Před 6 lety +11

    Энкодер - он и в Африке энкодер и в компе он показывает каждый шаг. Другое дело, что заюзан потрёпанный энкодер с сильным дребезгом и чел по неопытности не знает как с этим бороться. Приведённый код в скетче работоспособный, но не верный. Для мышей пойдёт, но для "дрожащего" энкодера на двигателе не катит. И даже в этом скетче проверка милсов сравнением с суммой неверно, ибо милс тоже длится, а когда его стал проц читать в начале или конце не угадаешь. Более верным будет такой код:
    const int pin_A = 9;
    const int pin_B = 10;
    byte EncoderA;
    byte EncoderB;
    byte PrevEncoderA=0;
    unsigned long LoopTime;
    int EncoderPos = 0;
    void setup() {
    pinMode(pin_A, INPUT_PULLUP);
    pinMode(pin_B, INPUT_PULLUP);
    LoopTime = millis();
    }
    void loop() {
    if(millis() >= (LoopTime)){
    EncoderA = digitalRead(pin_A);
    EncoderB = digitalRead(pin_B);
    if((!EncoderA) && (PrevEncoderA)){
    if(EncoderB) {
    EncoderPos--;
    } else {
    EncoderPos++;
    };
    Serial.println(EncoderPos);
    };
    PrevEncoderA = EncoderA;
    LoopTime = millis()+2;
    };
    }

    • @UCanDo
      @UCanDo  Před 6 lety

      Вы пробовали этот код на энкодере от мышки? Вы полностью повторили код из видео, только немного в другом виде. Дело не в потрепанности а в том что Энкодеры от мышки сделаны так что ОБА выхода ВСЕГДА находятся в одинаковом положении. Разница между ними есть только в переходной момент между одним состоянием и другим. Подобным образом (как в скетче) этот переходной момент отследить невозможно. Что бы его отследить нужно выходы энкодера вешать на прерывания. Только тогда можно сделать реакцию на каждое движение энкодера от мышки.

    • @iCoteg
      @iCoteg Před 6 lety +1

      только что проверил- не работает!

    • @aerotachka
      @aerotachka Před 6 lety +1

      Как раз на прерывания их вешать не нужно. Так вы точно ничего не отследите. Функция для работы с энкодером в бесконечном цикле, и кнопка, работающая по прерываю для выхода из этого цикла. например для изменений каких либо значений в меню. А уж если нужны прерывания от энкодера, тогда ставят отдельный контроллер для работы с энкодером (энкодерами), который выдает на два выхода сигналы. Первый об изменении состояния, для вызова прерывания и второй о направлении изменения.

    • @shulginoleg6561
      @shulginoleg6561 Před 3 lety +1

      Он даже схему нормальную не может составить из нескольких элементов. Сопротивления фильтров не туда поставил, ещё учить кого то лезит!

  • @dj_granderzplay7363
    @dj_granderzplay7363 Před 6 lety +1

    А шо там с стм?

  • @user-wr7tg6mu9b
    @user-wr7tg6mu9b Před 4 lety +2

    состояние пинов при вращении в определенную сторону такое 00, 01, 11, 00, 01, 11, 00..и т.д. Можно заметить что в некоторых случаях между 00 и 11, пробегает 01, и собственно относительно этого состояния можно считать каждый шаг и направление

    • @ddosinet5240
      @ddosinet5240 Před 4 lety

      Для тех, у кого так же if (wA == 1 && wB == 1 && a1 == 0 && b1 == 0 || wA == 0 && wB == 0 && a1 == 1 && b1 == 0 || wA == 1 && wB == 0 && a1 == 1 && b1 == 1) - колесо в одну сторону, else в другую где wA и wB новые значение, a1 и b1 старые

  • @alexandrlatukhin6345
    @alexandrlatukhin6345 Před 4 lety

    Спасибо.

  • @VitaliySunny
    @VitaliySunny Před 6 lety +2

    Возможно на дорогих мышках более продвинутый энкодер стоит? Тем более что стоимость бывает разной на порядок.

    • @UCanDo
      @UCanDo  Před 6 lety +3

      Обычно используются два типа энкодеров: оптические и механические. Оптические еще сложнее применить.

  • @Grumbumbes
    @Grumbumbes Před 3 lety

    Попробовал, схема рабочая (вместо резисторов и конденсаторов использовал внутренние подтягивающие резисторы ардуины). Но не совсем понятно, как энкодер определяет в какую сторону его вращают. Ведь (если я правильно понимаю) при каждом щелчке энкодера, оба контакта одновременно замыкаются, а при следующем, одновременно размыкаются. Поясните пожалуйста этот момент.

    • @UCanDo
      @UCanDo  Před 3 lety +1

      Контакты энкодера замыкаются/размыкаются не одновременно, а последовательно. Если вращать в одну сторону, то сначала срабатывает 1-й контакт, потом 2-й. Если вращать в противоположную сторону то сначала срабатывает 2-й, потом 1-й. Именно эта последовательность в срабатывании и определяет направление вращения энкодера

  • @SnuggleOverloadTV
    @SnuggleOverloadTV Před 4 lety

    Муха прилетела и пощикотала. Такая милая! 5:26

  • @user-bl2bt7nu3b
    @user-bl2bt7nu3b Před 2 lety +1

    спасибо

  • @MegaSlota
    @MegaSlota Před 2 lety

    На клавиатуре регулятор громкости с подобным энкодером как у мышки. Начал подглючивать, заказал TTC с али, а он регулирует через отсечку с шагом в 4 единицы громкости, вместо 2 как в оригинале. Подскажите, какой нужен правильный энкодер? Как на алике различить "модные" TTC, ALPS, KAILH, NONAME, чтобы они срабатывали каждый шаг?

    • @UCanDo
      @UCanDo  Před 2 lety +1

      Они просто немного по-разному сделаны, программно обрабатываются по-разному и из-за этого не взаимозаменяемы. Увы, не могу подсказать какой вам нужен.

  • @didymus3411
    @didymus3411 Před 2 lety

    можете пояснить про фильтры(2 конденсатора и резистора) почему именно такие значения и как понять какие в данной работе частоты помех надо срезать?

    • @UCanDo
      @UCanDo  Před 2 lety

      Конденсатор выполняет функцию плавного изменения состояния пина. Так как заряд на нем удерживается то это полностью (или почти полностью) сглаживает «скачки», превращая сигнал в плавную синусоиду. Резистор влияет на «скорость» формирования этой синусоиды.
      Да и емкость конденсатора на это влияет.
      Очень рекомендую посмотреть видеоуроки от Джереми Блюма, он это подробно объясняет

    • @didymus3411
      @didymus3411 Před 2 lety

      @@UCanDo Круто, спасибо за ответ

  • @user-se3bq5sx7q
    @user-se3bq5sx7q Před 11 měsíci

    Помогите мне, кото знает как соединить энкодер 3pin в мышку, где энкодер 4pin датчик холла в нём, барабан крутится над датчиком и происходит сигнал вращения. Мышка bloody A90 модель энкодер LK E13

  • @aerotachka
    @aerotachka Před 6 lety +1

    Спокойно можно сделать, чтобы ловился каждый шаг. Вот прямо сейчас кручу энкодер от старой мыши, с ужасным дребезгом. STM32 и экран от Nokiа 5110 для контроля . Счетчик считает четко назад и вперед. Просто потому, что я сам писал код, полностью понимая что происходит в этом энкодере. В энкодере оба контакта при вращении в принципе не могут одновременно принимать одинаковое состояние. Какой то раньше, а какой то позже. Всегда.

    • @UCanDo
      @UCanDo  Před 6 lety

      Вы не первый такой: "вот, у меня все работает!"... Как говорится: КОД В СТУДИЮ! Тогда и посмотрим. :)
      Я говорил о том что стандартные способы на Ардуино не работают. Что бы ловился каждый шаг нужно либо очень высокая частота опроса (не менее 200 раз в секунду, иначе будут глюки) либо вешать на прерывания. В первом случае это сложно реализовать. Любая задержка и энкодер уже неправильно считывается (как направление так и шаги). На прерываниях код получится очень сложный. Я так и не нашел в сети нормальной реализации опроса енкодера на прерываниях (для Ардуино).
      У вас не Ардуино. У вас STM. А это и высокая скорость, и возможность любой пин на прерывание повешать. Но я бы все же просил бы вас поделиться кодом. Интересно на него взглянуть и научиться чему-то новому и полезному! Сам сейчас начал изучать STM.

    • @aerotachka
      @aerotachka Před 6 lety +1

      //переменные
      uint8_t enc_status=0; // последнее устойчивое состояние энкодера
      uint8_t enc_statusprev= 0;// предыдущее устойчивое состояние энкодера
      // устойчивых состояний два: 0x0 и 0x3
      uint8_t enc_statuslast; // последнее состояние перед устойчивым
      // может принимать значение 0x1 и 0x2, определяет направление
      uint16_t enc_counter = 32768;// счетчик
      while (1)
      {
      //читаем состояние энкодера в переменную, сдвигая значение первого пина влево
      enc_status = HAL_GPIO_ReadPin(GPIOB, ENC_YELLOW_Pin);
      enc_status

    • @aerotachka
      @aerotachka Před 6 lety

      Кстати, тот вывод, который должен быть средним у энкодера от мыши крайний слева, если смотреть со стороны колеса у меня во всяком случае.

    • @ruslan_ww8114
      @ruslan_ww8114 Před 5 lety

      @@aerotachka У STMки скорость 72мгц. Поставьте в конце бесконечного цикла hal_delay(20); и проверьте будут ли глюки, я думаю будут

    • @aerotachka
      @aerotachka Před 5 lety

      @@ruslan_ww8114 во первых у стмки столько, сколько выставить умножителями и предделителями.
      На 4мгц все прекрасно работает.
      Во вторых delay(20) это период 20 милисекуднд, то есть частота 50 Герц. Ардуино разве работает на частоте сети? 😂

  • @user-dg4td4dj8e
    @user-dg4td4dj8e Před 4 lety +2

    Сделай электронную линейки

  • @user-yq4if4oy7p
    @user-yq4if4oy7p Před 6 lety

    Здравствуйте! А можно ли к ардуино подключить лазерную мышку в качестве линейного датчика? Спасибо.

    • @UCanDo
      @UCanDo  Před 6 lety +1

      Мышку, думаю, можно подключить. Если она PS/2 то без проблем подключить можно, с USB будет по-сложнее. А зачем именно мышку? В чем суть устройства? Как именно она (как датчик) должна работать?

    • @user-yq4if4oy7p
      @user-yq4if4oy7p Před 6 lety

      Правильно отрезной станок для проволоки. Нужен датчик для определения длинны прошедшей проволоки чтобы отрубывать куски зоданой длинны. И есть несколько мышек. Вот и возник вопрос можно ли замерять длинну таким образом.

    • @UCanDo
      @UCanDo  Před 6 lety +1

      На сколько он должен быть точным? +- 0.1 мм или +-5 мм?
      Если очень точный нужен, то я бы разобрал принтер, там есть оптопара и сегментированный диск (не знаю как он называется). Диск поставить на ролик движения проволоки, а оптопарой ловить повороты. Так можно очень точно отследить размеры. Если высокая точность не нужна то можно и энкодер от мышки использовать. Энкодер поставить на ролик и отслеживать повороты.

    • @arielvolog
      @arielvolog Před 6 lety

      на канале Radiosoft есть обзор работы с мышью, получение данных, разбор даташита

  • @Elektrostal1
    @Elektrostal1 Před 6 lety +1

    а смысл этого экзерсиса?

    • @orkoteg09
      @orkoteg09 Před 6 lety +2

      - знакомство с энкодерами (не кнопками едиными можно клацать)
      - использование энкодера
      - 2-я жизнь мертвым мышкам

  • @PostoiParovoz
    @PostoiParovoz Před 3 lety +1

    Почему резисторы 10кОм?

    • @UCanDo
      @UCanDo  Před 3 lety

      Это не важно, можно использовать любые на 4.7 - 50 кОм.
      Резисторы выполняют роль подтяжки

    • @PostoiParovoz
      @PostoiParovoz Před 3 lety

      @@UCanDo спасибо

  • @Made_in_the_USSR
    @Made_in_the_USSR Před 5 lety

    Как сделать чтобы была одна ардуино и два энкодера?Выводить информацию на один дисплей

    • @UCanDo
      @UCanDo  Před 5 lety

      Подключите энкодеры на разные Пины, для каждого энкодера используйте разные части кода.

  • @iCoteg
    @iCoteg Před 6 lety +3

    7:15 с энкодером от мышки не сделаешь? а как оно тогда в мышке работает? могу заделиться кодом. там очень все просто!

    • @UCanDo
      @UCanDo  Před 6 lety

      На прерываниях можно сделать.
      Что-то заговорился и сам себя запутал. Да, можно сделать, но только на прерываниях. Именно так и работает мышка. Там стоит МК который все и обрабатывает.
      Код можете выложить. Кому-то точно пригодится.

    • @iCoteg
      @iCoteg Před 6 lety +1

      зачем прерывания? без всяких прерываний. прерывания используются только для того, чтобы не занимать процессорное время на пустые проверки состояния энкодера. а энкодер от колеса мыши выдает последовательность, отличную от той, которую выдает "нормальный" энкодер. там весь прикол в логике. и на прерываниях все-равно придется столкнуться именно с логикой.

    • @UCanDo
      @UCanDo  Před 6 lety

      Приведите, пожалуйста, пример кода который бы работал на каждый поворот ролика

    • @iCoteg
      @iCoteg Před 6 lety +1

      тут я призадумался: как лучше это сделать? может вы знаете сервисы специально для этого? вот ссылка на дропбокс: www.dropbox.com/s/jxj29z2dwvnqbli/mouse_wheel.ino?dl=0
      но вся беда в том, что это директория с рабочими файлами и я могу однажды забыть и переименовать или переместить файл ((

    • @UCanDo
      @UCanDo  Před 6 lety

      На ГуглДиске выкладывайте. Через браузер. Тогда все файлы и папки останутся (пока вы их сами не удалите).
      Посмотрел я ваш код. Сразу встречный вопрос: Вы его проверяли на енкодере ОТ МЫШКИ? А чем отличается ваш код от моего? Вы делаете все тот же:
      aState = digitalRead(OUTPUT_A);
      bState = digitalRead(OUTPUT_B);
      Но этот способ НЕ работает с энкодерами от мышек. Точнее этот способ НЕ считывает каждый поворот. Если у вас работает - то вы исключение, и у вас на руках нестандартный, редкий енкодер. Вы просто повторили точно тот же код что и в видео, обычный, стандартный код, который, кстати, даже не со всеми энкодерами нормально работает. В видео я приводил усовершенствованный код который работает со всеми енкодерами. Ну кроме мышек конечно.
      Вы знаете как устроен энкодер от мышки? Он сделан по другому принципу. Не так как обычно сделаны енкодеры.
      В обычных енкодерах есть разность между положениями. То есть можно просто сравнить какой из выводов изменился:
      if(aPrevState != aState || bPrevState != bState) {...
      ...
      if(aPrevState != aState) { ...
      ....
      Но в мышках энкодеры другие. Их выводы ВСЕГДА находятся в одинаковом положении. И каждый поворот ролика меняет состояние обоих выводов. То есть оба выхода А и В ВСЕГДА одинаковы - либо HIGH либо LOW. И меняются на каждом повороте ролика. Разница между выводами появляется только в момент поворота. Один из выводов раньше переключает свое состояние, другой позже. Разница во времени - микросекунды. За которые оба вывода опять становятся в одинаковое положение (либо HIGH либо LOW). Отловить такое обычным digitalRead невозможно. Только прерываниями.

  • @user-to1ue6ed3s
    @user-to1ue6ed3s Před 3 lety +1

    А можно с помощью такого энкодера управлять шд в лево и в прово крутить энкодером

    • @UCanDo
      @UCanDo  Před 3 lety +1

      Энкодер можно использовать любой. В любом случае без дополнительной электроники не обойтись. А эта электроника будет считывать энкодер и управлять мотором

    • @user-to1ue6ed3s
      @user-to1ue6ed3s Před 3 lety +1

      @@UCanDo а можно по подробнее или ссылкой где копать

    • @UCanDo
      @UCanDo  Před 3 lety

      Для управлением мотора нужен ДРАЙВЕР ШАГОВОГО ДВИГАТЕЛЯ.
      Их есть очень много. Какие-то качественные, какие-то не очень. Выбор большой.
      Драйвером управляет МИКРОКОНТРОЛЛЕР в котором содержится прошивка (программа), которая будет выполнять все необходимые действия.
      Это в двух словах.
      Хм... даже и не знаю что вам порекомендовать. Могу предположить что вы в электронике и программировании не разбираетесь, иначе бы не задавали такие базовые вопросы. А то что вам нужно - подразумевает умение работать с микроконтроллерами и уметь писать прошивки.
      Если планируете изучать эту тему (программирование микроконтроллеров) то советую начать с видеоуроков от Джереми Блюма. Он очень хорошо объясняет.
      Попробуете, наберетесь опыта.
      А дальше нужно смотреть какой драйвер брать для шагового двигателя. Дешёвые - полное г... а самые лучшие стоят не дёшево.
      У меня на канале есть видео об управлении Шаговым Двигателем: czcams.com/video/COd41BZ_XpM/video.html

  • @nikich3d
    @nikich3d Před 6 lety +7

    Спасибо за видео Как раз куча неисправных мышек есть

  • @smoop2671
    @smoop2671 Před 6 lety +1

    А зачем эти резисторы нужны? Почему нельзя просто напрямую подключить?

    • @UCanDo
      @UCanDo  Před 6 lety

      Это подтягивающие резисторы, они нужны для формирования четких логических 0 и 1. Без них работа будет непредсказуемой.

  • @Phantoms60
    @Phantoms60 Před 3 lety +1

    а что делать если колесо срабатывает только при очень сильном нажатии на него? давить нужно со всей силы ,а при обычном нажатии не работает .

    • @UCanDo
      @UCanDo  Před 3 lety +1

      Не срабатывает нажатие или вращение?
      Если нажатие, то нужно заменить кнопку, она износилась. Если вращение то скорее всего нужно почистить колесико от грязи и мусора

    • @Phantoms60
      @Phantoms60 Před 3 lety

      @@UCanDo не срабатывает нажатие при обычном нажатии , если со всей силы надавить на него ,тогда срабатывает .

    • @Phantoms60
      @Phantoms60 Před 3 lety

      @@UCanDo вот две фотки , ibb.co/3BkwgvP
      ibb.co/1vnVSMZ Реально решить проблему с этой кнопкой без выпаивания и замены? может она разбирается ?

    • @UCanDo
      @UCanDo  Před 3 lety +1

      @@Phantoms60 Разобрать и почистить вы ее можете попробовать, вот только проработает это все не долго. Может несколько дней, может несколько месяцев. Все равно в итоге будете менять.

    • @Phantoms60
      @Phantoms60 Před 3 lety

      @@UCanDo а как ее разобрать?

  • @user-kq1qn7en8i
    @user-kq1qn7en8i Před 6 lety +1

    только в скетче постоянно проверяется состояние, помоему по прерыванию меньше будет загружен процессор

    • @UCanDo
      @UCanDo  Před 6 lety

      Если у вас получится сделать обработку по прерыванию, то напишите здесь ссылку на скетч. Что бы и другие могли использовать ваш пример.

    • @user-kq1qn7en8i
      @user-kq1qn7en8i Před 6 lety

      устанавливаем в шапке скетча вх1 на int1, вх2 на int2, далее по обработке прерываний определяем какое из них произошло раньше оно и определяет направление.

    • @UCanDo
      @UCanDo  Před 6 lety

      Пожалуйста, сделайте пример.
      В теории оно все просто. У меня, на пример, не получилось сделать.

    • @user-kq1qn7en8i
      @user-kq1qn7en8i Před 6 lety

      czcams.com/video/GjWooyEbzZs/video.html
      а вообще в ютубе много по ардуино, этот пост я нашел по запросу "ардуино прирывания энкодер"
      czcams.com/video/gRSYxXbjnCg/video.html
      в этом без прерываний, но более понятно,
      оптимально если совместить запоминание состояний с прерываниями

    • @UCanDo
      @UCanDo  Před 6 lety

      Хм. Я понимаю как работает энкодер. В моем видео применяется точно такой же код, как и у Паяльник TV (последняя ссылка). По крайней мере принцип тот же: очень точно отлавливаются каждый "тик" энкодера.
      Все стандартные примеры работают только при отлавливании каждого второго шага энкодера. То есть в стандартных примерах отлавливание поворотов происходит через 1 шаг, каждый второй, а не каждый шаг.
      В первом примере (ссылка на канал arduinoLab) хоть и применено прерывание, но остается все та же проблема: отслеживается не каждый шаг енкодера, а через один. Для того что бы отследить каждый шаг, нужно оба вывода вешать на прерывания. Прерывания делать по Изменению.
      Я пробовал делать на двух прерываниях, но ничего не вышло. В сети примеров не нашел. Именно по этому я и попросил вас привести рабочий пример работы на прерываниях с подсчетом каждого шага. А просто как работать с энкодером - показано и в моем видео.

  • @mr.youngpower277
    @mr.youngpower277 Před 3 lety +1

    А можно наоборот к мышке нормальный большой энкодер подключить?

    • @UCanDo
      @UCanDo  Před 3 lety +1

      Думаю да. Энкодеры бывают разных типов, главное выбрать енкодер подходящего типа

  • @user-rw4vf6uz4m
    @user-rw4vf6uz4m Před 5 lety

    Че это вообще такое зачем оно надо

    • @UCanDo
      @UCanDo  Před 5 lety

      Это интересно тем, кто занимается программированием микроконтроллеров, и для проектов использует различные подручные запчасти

  • @serovsergey5888
    @serovsergey5888 Před 5 lety +1

    Отвратительный алгоритм обработки энкодера. Используйте код Грэя
    robocraft.ru/blog/electronics/590.html

    • @UCanDo
      @UCanDo  Před 5 lety +1

      Используемый мной код позволяет уловить каждый такт энкодера. Предложенный вами код делает то же самое?

    • @serovsergey5888
      @serovsergey5888 Před 5 lety +1

      @@UCanDo , конечно. Иначе зачем бы он вообще нужен был?)

    • @UCanDo
      @UCanDo  Před 5 lety +1

      Сейчас у меня нет под рукой подходящего энкодера чтобы протестировать пример. В сети гуляет множество примеров работы с энкодерами, но подавляющее большинство имеют один недостаток: срабатыванием через шаг. Предложенный вами мне не встречался. Возьму на заметку

    • @serovsergey5888
      @serovsergey5888 Před 5 lety

      @@UCanDo Алекс Гайвер недавно выложил обновленные библиотеки для работы с энкодером. Говорит что у него не было пропусков шагов. К тому же его библиотеки работают с несколькими типами энкодеров. (Сам пока в железе не проверял)

  • @user-in3xn7ye6y
    @user-in3xn7ye6y Před 4 lety +1

    раскажи лучше как энкодер (какую ногу куда) к микроволновки подключить. родной развалился а аналогов ненайду

  • @StatistPL
    @StatistPL Před rokem

    Ну серьезно ... прерывания придумали 2000 лет назад..... Зачем покупать Феррари и потом толкать ее пешком? Любое изменение на одном из двух пинов вызывает функцию прерывания, смотришь что произошло выставляешь флаг а забываешь. 4 строки примитивного кода. 6 если убивать дребезг. Ну. К чему городить этот огород.

    • @UCanDo
      @UCanDo  Před rokem

      Можете привести пример?

    • @StatistPL
      @StatistPL Před rokem

      @@UCanDo
      volatile uint8_t LED_COUNT=0;
      volatile bool RotVec = false;
      volatile bool FlagLedUpdate = false;
      #define MAXLEDCOUNT 254
      #define PINA 5 //Arduino INT 0 Pin
      #define PINB 4 //Arduino INT 1 Pin
      void setup() {
      pinMode(PINA, INPUT_PULLUP);
      pinMode(PINB, INPUT_PULLUP);
      attachInterrupt(digitalPinToInterrupt(PINA), CbInq, CHANGE);
      attachInterrupt(digitalPinToInterrupt(PINB), CbInq, CHANGE);
      interrupts();
      }
      void CbInq() {
      noInterrupts();
      bool InqP1 = digitalRead(PINA);
      bool InqP2 = digitalRead(PINB);
      if( ( (RotVec && ((InqP1 && InqP2) || (!InqP1 && InqP2))) || (!RotVec && (!InqP1 && !InqP2)) ) && LED_COUNT0){
      LED_COUNT--; FlagLedUpdate=true;
      }
      RotVec=InqP1;
      interrupts();
      }
      void loop() {
      if(FlagLedUpdate){
      //установка яркости из LED_COUNT
      FlagLedUpdate=false;
      }
      }

    • @StatistPL
      @StatistPL Před rokem

      Использовать под такую херню как энкодер аппаратные прерывания INT0 и INT1 жаба душит... конечно, но Ардуина не слишком умна чтобы работать с программными прерываниями PCINTx. Видимо разработчики IDE не особо рассчитывают, что кто-то будет работать с прерываниями.... собственно так оно и получается. Для работы PCINTx есть отдельная либа "PinChangeInterrupt", например.... чтобы не использовать аппаратные прерывания. Объем кода в редакторе это не меняет, но сам факт необходимости отдельно либы для PCINTx меня откровенно удивляет.

    • @StatistPL
      @StatistPL Před rokem

      noInterrupts(); и interrupts(); из прерывания можно убрать, в теории... если аппаратный дребезг надежный. Но я бы не стал, ради предсказуемости результата.