Тёмный
No video :(

Connect the encoder from the mouse to Arduino 

Home Made
Подписаться 100 тыс.
Просмотров 86 тыс.
50% 1

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.c...
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.c...
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

Опубликовано:

 

22 авг 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 114   
@SergiyGryb
@SergiyGryb 6 лет назад
поддерживаю подход с прерываниями. Испытано: точность срабатывания намного выше и нет пропусков тактов!
@UCanDo
@UCanDo 6 лет назад
Добрый день. А можете привести код для примера? Если вас не затруднит, конечно. У меня не получилось нормально настроить прерывания. Было бы не плохо посмотреть как это реализовано у других.
@SergiyGryb
@SergiyGryb 6 лет назад
Да, конечно, я в своих проектах использую библиотеку RotaryEncoder, разработанную немецким товарищем, работает отлично: github.com/mathertel/RotaryEncoder . В библиотеке есть примеры, в частности - InterruptRotator.ino. Единственная сложность, которая может встретиться, это корректно настроить прерывания. Библиотека использует Pin Change Interrupt для любого порта. Необходимо знание процессора и регистров. В примере используются порты А2, А3, но можно настроить для любого порта. Могу помочь с кодом, ежели чего...
@UCanDo
@UCanDo 6 лет назад
Спасибо! Как появится минутка, почитаю.
@SergiyGryb
@SergiyGryb 6 лет назад
Рекомендую, компактная и надежная библиотека... в свое время долго выбирал, пробовал различные варианты и библиотеки, но эта библиотека по моему мнению - лучшая из того, что я пробовал... У этого разработчика есть еще одна классная библиотека для работы с кнопками, отрабатывает кроме всего прочего длинное нажатие и двойной клик. Тоже рекомендую: OneButton :-)
@masterkit9517
@masterkit9517 5 лет назад
спасибо большое!
@variator111
@variator111 3 года назад
Я бы с удовольствием глянул как сделать энкодер на основе оптического сенсора от мыши (не колесика, а того, что отслеживает перемещение). Пишут, что можно добиться высокой точности и большого числа шагов.
@fraeratataa
@fraeratataa 2 года назад
на оптическом только 1 сигнальный провод
@f33net
@f33net 7 лет назад
Энкодер - он и в Африке энкодер и в компе он показывает каждый шаг. Другое дело, что заюзан потрёпанный энкодер с сильным дребезгом и чел по неопытности не знает как с этим бороться. Приведённый код в скетче работоспособный, но не верный. Для мышей пойдёт, но для "дрожащего" энкодера на двигателе не катит. И даже в этом скетче проверка милсов сравнением с суммой неверно, ибо милс тоже длится, а когда его стал проц читать в начале или конце не угадаешь. Более верным будет такой код: 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 7 лет назад
Вы пробовали этот код на энкодере от мышки? Вы полностью повторили код из видео, только немного в другом виде. Дело не в потрепанности а в том что Энкодеры от мышки сделаны так что ОБА выхода ВСЕГДА находятся в одинаковом положении. Разница между ними есть только в переходной момент между одним состоянием и другим. Подобным образом (как в скетче) этот переходной момент отследить невозможно. Что бы его отследить нужно выходы энкодера вешать на прерывания. Только тогда можно сделать реакцию на каждое движение энкодера от мышки.
@iCoteg
@iCoteg 6 лет назад
только что проверил- не работает!
@aerotachka
@aerotachka 6 лет назад
Как раз на прерывания их вешать не нужно. Так вы точно ничего не отследите. Функция для работы с энкодером в бесконечном цикле, и кнопка, работающая по прерываю для выхода из этого цикла. например для изменений каких либо значений в меню. А уж если нужны прерывания от энкодера, тогда ставят отдельный контроллер для работы с энкодером (энкодерами), который выдает на два выхода сигналы. Первый об изменении состояния, для вызова прерывания и второй о направлении изменения.
@shulginoleg6561
@shulginoleg6561 3 года назад
Он даже схему нормальную не может составить из нескольких элементов. Сопротивления фильтров не туда поставил, ещё учить кого то лезит!
@user-wr7tg6mu9b
@user-wr7tg6mu9b 4 года назад
состояние пинов при вращении в определенную сторону такое 00, 01, 11, 00, 01, 11, 00..и т.д. Можно заметить что в некоторых случаях между 00 и 11, пробегает 01, и собственно относительно этого состояния можно считать каждый шаг и направление
@ddosinet5240
@ddosinet5240 4 года назад
Для тех, у кого так же 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 старые
@user-bl2bt7nu3b
@user-bl2bt7nu3b 2 года назад
спасибо
@user-ob8il9cv6x
@user-ob8il9cv6x 4 года назад
) мда, реально улыбнуло) Я тоже в своё время на эти грабли наступил), покане наткнулся на вопрос с прерываниями. Такой код жесть какой тяжелый и не стабильно работающий.
@nikich3d
@nikich3d 7 лет назад
Спасибо за видео Как раз куча неисправных мышек есть
@SnuggleOverloadTV
@SnuggleOverloadTV 4 года назад
Муха прилетела и пощикотала. Такая милая! 5:26
@DIY-PropaCarlo
@DIY-PropaCarlo 7 лет назад
Полезно! вдруг займусь))
@user-jj2wr4rp4c
@user-jj2wr4rp4c 7 лет назад
круто!сделаю себе такую же схему.
@UCanDo
@UCanDo 7 лет назад
Успехов вам!
@Jackson_Sam
@Jackson_Sam 5 лет назад
Спасибо!
@aerotachka
@aerotachka 6 лет назад
Спокойно можно сделать, чтобы ловился каждый шаг. Вот прямо сейчас кручу энкодер от старой мыши, с ужасным дребезгом. STM32 и экран от Nokiа 5110 для контроля . Счетчик считает четко назад и вперед. Просто потому, что я сам писал код, полностью понимая что происходит в этом энкодере. В энкодере оба контакта при вращении в принципе не могут одновременно принимать одинаковое состояние. Какой то раньше, а какой то позже. Всегда.
@UCanDo
@UCanDo 6 лет назад
Вы не первый такой: "вот, у меня все работает!"... Как говорится: КОД В СТУДИЮ! Тогда и посмотрим. :) Я говорил о том что стандартные способы на Ардуино не работают. Что бы ловился каждый шаг нужно либо очень высокая частота опроса (не менее 200 раз в секунду, иначе будут глюки) либо вешать на прерывания. В первом случае это сложно реализовать. Любая задержка и энкодер уже неправильно считывается (как направление так и шаги). На прерываниях код получится очень сложный. Я так и не нашел в сети нормальной реализации опроса енкодера на прерываниях (для Ардуино). У вас не Ардуино. У вас STM. А это и высокая скорость, и возможность любой пин на прерывание повешать. Но я бы все же просил бы вас поделиться кодом. Интересно на него взглянуть и научиться чему-то новому и полезному! Сам сейчас начал изучать STM.
@aerotachka
@aerotachka 6 лет назад
//переменные 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 6 лет назад
Кстати, тот вывод, который должен быть средним у энкодера от мыши крайний слева, если смотреть со стороны колеса у меня во всяком случае.
@ruslan_ww8114
@ruslan_ww8114 5 лет назад
@@aerotachka У STMки скорость 72мгц. Поставьте в конце бесконечного цикла hal_delay(20); и проверьте будут ли глюки, я думаю будут
@aerotachka
@aerotachka 5 лет назад
@@ruslan_ww8114 во первых у стмки столько, сколько выставить умножителями и предделителями. На 4мгц все прекрасно работает. Во вторых delay(20) это период 20 милисекуднд, то есть частота 50 Герц. Ардуино разве работает на частоте сети? 😂
@VitaliySunny
@VitaliySunny 7 лет назад
Возможно на дорогих мышках более продвинутый энкодер стоит? Тем более что стоимость бывает разной на порядок.
@UCanDo
@UCanDo 7 лет назад
Обычно используются два типа энкодеров: оптические и механические. Оптические еще сложнее применить.
@user-dg4td4dj8e
@user-dg4td4dj8e 4 года назад
Сделай электронную линейки
@alexandrlatukhin6345
@alexandrlatukhin6345 4 года назад
Спасибо.
@Grumbumbes
@Grumbumbes 3 года назад
Попробовал, схема рабочая (вместо резисторов и конденсаторов использовал внутренние подтягивающие резисторы ардуины). Но не совсем понятно, как энкодер определяет в какую сторону его вращают. Ведь (если я правильно понимаю) при каждом щелчке энкодера, оба контакта одновременно замыкаются, а при следующем, одновременно размыкаются. Поясните пожалуйста этот момент.
@UCanDo
@UCanDo 3 года назад
Контакты энкодера замыкаются/размыкаются не одновременно, а последовательно. Если вращать в одну сторону, то сначала срабатывает 1-й контакт, потом 2-й. Если вращать в противоположную сторону то сначала срабатывает 2-й, потом 1-й. Именно эта последовательность в срабатывании и определяет направление вращения энкодера
@user-se3bq5sx7q
@user-se3bq5sx7q Год назад
Помогите мне, кото знает как соединить энкодер 3pin в мышку, где энкодер 4pin датчик холла в нём, барабан крутится над датчиком и происходит сигнал вращения. Мышка bloody A90 модель энкодер LK E13
@dj_granderzplay7363
@dj_granderzplay7363 7 лет назад
А шо там с стм?
@iCoteg
@iCoteg 6 лет назад
7:15 с энкодером от мышки не сделаешь? а как оно тогда в мышке работает? могу заделиться кодом. там очень все просто!
@UCanDo
@UCanDo 6 лет назад
На прерываниях можно сделать. Что-то заговорился и сам себя запутал. Да, можно сделать, но только на прерываниях. Именно так и работает мышка. Там стоит МК который все и обрабатывает. Код можете выложить. Кому-то точно пригодится.
@iCoteg
@iCoteg 6 лет назад
зачем прерывания? без всяких прерываний. прерывания используются только для того, чтобы не занимать процессорное время на пустые проверки состояния энкодера. а энкодер от колеса мыши выдает последовательность, отличную от той, которую выдает "нормальный" энкодер. там весь прикол в логике. и на прерываниях все-равно придется столкнуться именно с логикой.
@UCanDo
@UCanDo 6 лет назад
Приведите, пожалуйста, пример кода который бы работал на каждый поворот ролика
@iCoteg
@iCoteg 6 лет назад
тут я призадумался: как лучше это сделать? может вы знаете сервисы специально для этого? вот ссылка на дропбокс: www.dropbox.com/s/jxj29z2dwvnqbli/mouse_wheel.ino?dl=0 но вся беда в том, что это директория с рабочими файлами и я могу однажды забыть и переименовать или переместить файл ((
@UCanDo
@UCanDo 6 лет назад
На ГуглДиске выкладывайте. Через браузер. Тогда все файлы и папки останутся (пока вы их сами не удалите). Посмотрел я ваш код. Сразу встречный вопрос: Вы его проверяли на енкодере ОТ МЫШКИ? А чем отличается ваш код от моего? Вы делаете все тот же: aState = digitalRead(OUTPUT_A); bState = digitalRead(OUTPUT_B); Но этот способ НЕ работает с энкодерами от мышек. Точнее этот способ НЕ считывает каждый поворот. Если у вас работает - то вы исключение, и у вас на руках нестандартный, редкий енкодер. Вы просто повторили точно тот же код что и в видео, обычный, стандартный код, который, кстати, даже не со всеми энкодерами нормально работает. В видео я приводил усовершенствованный код который работает со всеми енкодерами. Ну кроме мышек конечно. Вы знаете как устроен энкодер от мышки? Он сделан по другому принципу. Не так как обычно сделаны енкодеры. В обычных енкодерах есть разность между положениями. То есть можно просто сравнить какой из выводов изменился: if(aPrevState != aState || bPrevState != bState) {... ... if(aPrevState != aState) { ... .... Но в мышках энкодеры другие. Их выводы ВСЕГДА находятся в одинаковом положении. И каждый поворот ролика меняет состояние обоих выводов. То есть оба выхода А и В ВСЕГДА одинаковы - либо HIGH либо LOW. И меняются на каждом повороте ролика. Разница между выводами появляется только в момент поворота. Один из выводов раньше переключает свое состояние, другой позже. Разница во времени - микросекунды. За которые оба вывода опять становятся в одинаковое положение (либо HIGH либо LOW). Отловить такое обычным digitalRead невозможно. Только прерываниями.
@smoop2671
@smoop2671 6 лет назад
А зачем эти резисторы нужны? Почему нельзя просто напрямую подключить?
@UCanDo
@UCanDo 6 лет назад
Это подтягивающие резисторы, они нужны для формирования четких логических 0 и 1. Без них работа будет непредсказуемой.
@Phantoms60
@Phantoms60 4 года назад
а что делать если колесо срабатывает только при очень сильном нажатии на него? давить нужно со всей силы ,а при обычном нажатии не работает .
@UCanDo
@UCanDo 4 года назад
Не срабатывает нажатие или вращение? Если нажатие, то нужно заменить кнопку, она износилась. Если вращение то скорее всего нужно почистить колесико от грязи и мусора
@Phantoms60
@Phantoms60 4 года назад
@@UCanDo не срабатывает нажатие при обычном нажатии , если со всей силы надавить на него ,тогда срабатывает .
@Phantoms60
@Phantoms60 4 года назад
@@UCanDo вот две фотки , ibb.co/3BkwgvP ibb.co/1vnVSMZ Реально решить проблему с этой кнопкой без выпаивания и замены? может она разбирается ?
@UCanDo
@UCanDo 4 года назад
@@Phantoms60 Разобрать и почистить вы ее можете попробовать, вот только проработает это все не долго. Может несколько дней, может несколько месяцев. Все равно в итоге будете менять.
@Phantoms60
@Phantoms60 4 года назад
@@UCanDo а как ее разобрать?
@user-to1ue6ed3s
@user-to1ue6ed3s 3 года назад
А можно с помощью такого энкодера управлять шд в лево и в прово крутить энкодером
@UCanDo
@UCanDo 3 года назад
Энкодер можно использовать любой. В любом случае без дополнительной электроники не обойтись. А эта электроника будет считывать энкодер и управлять мотором
@user-to1ue6ed3s
@user-to1ue6ed3s 3 года назад
@@UCanDo а можно по подробнее или ссылкой где копать
@UCanDo
@UCanDo 3 года назад
Для управлением мотора нужен ДРАЙВЕР ШАГОВОГО ДВИГАТЕЛЯ. Их есть очень много. Какие-то качественные, какие-то не очень. Выбор большой. Драйвером управляет МИКРОКОНТРОЛЛЕР в котором содержится прошивка (программа), которая будет выполнять все необходимые действия. Это в двух словах. Хм... даже и не знаю что вам порекомендовать. Могу предположить что вы в электронике и программировании не разбираетесь, иначе бы не задавали такие базовые вопросы. А то что вам нужно - подразумевает умение работать с микроконтроллерами и уметь писать прошивки. Если планируете изучать эту тему (программирование микроконтроллеров) то советую начать с видеоуроков от Джереми Блюма. Он очень хорошо объясняет. Попробуете, наберетесь опыта. А дальше нужно смотреть какой драйвер брать для шагового двигателя. Дешёвые - полное г... а самые лучшие стоят не дёшево. У меня на канале есть видео об управлении Шаговым Двигателем: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-COd41BZ_XpM.html
@PostoiParovoz
@PostoiParovoz 3 года назад
Почему резисторы 10кОм?
@UCanDo
@UCanDo 3 года назад
Это не важно, можно использовать любые на 4.7 - 50 кОм. Резисторы выполняют роль подтяжки
@PostoiParovoz
@PostoiParovoz 3 года назад
@@UCanDo спасибо
@mr.youngpower277
@mr.youngpower277 3 года назад
А можно наоборот к мышке нормальный большой энкодер подключить?
@UCanDo
@UCanDo 3 года назад
Думаю да. Энкодеры бывают разных типов, главное выбрать енкодер подходящего типа
@didymus3411
@didymus3411 2 года назад
можете пояснить про фильтры(2 конденсатора и резистора) почему именно такие значения и как понять какие в данной работе частоты помех надо срезать?
@UCanDo
@UCanDo 2 года назад
Конденсатор выполняет функцию плавного изменения состояния пина. Так как заряд на нем удерживается то это полностью (или почти полностью) сглаживает «скачки», превращая сигнал в плавную синусоиду. Резистор влияет на «скорость» формирования этой синусоиды. Да и емкость конденсатора на это влияет. Очень рекомендую посмотреть видеоуроки от Джереми Блюма, он это подробно объясняет
@didymus3411
@didymus3411 2 года назад
@@UCanDo Круто, спасибо за ответ
@MegaSlota
@MegaSlota 2 года назад
На клавиатуре регулятор громкости с подобным энкодером как у мышки. Начал подглючивать, заказал TTC с али, а он регулирует через отсечку с шагом в 4 единицы громкости, вместо 2 как в оригинале. Подскажите, какой нужен правильный энкодер? Как на алике различить "модные" TTC, ALPS, KAILH, NONAME, чтобы они срабатывали каждый шаг?
@UCanDo
@UCanDo 2 года назад
Они просто немного по-разному сделаны, программно обрабатываются по-разному и из-за этого не взаимозаменяемы. Увы, не могу подсказать какой вам нужен.
@user-kq1qn7en8i
@user-kq1qn7en8i 6 лет назад
только в скетче постоянно проверяется состояние, помоему по прерыванию меньше будет загружен процессор
@UCanDo
@UCanDo 6 лет назад
Если у вас получится сделать обработку по прерыванию, то напишите здесь ссылку на скетч. Что бы и другие могли использовать ваш пример.
@user-kq1qn7en8i
@user-kq1qn7en8i 6 лет назад
устанавливаем в шапке скетча вх1 на int1, вх2 на int2, далее по обработке прерываний определяем какое из них произошло раньше оно и определяет направление.
@UCanDo
@UCanDo 6 лет назад
Пожалуйста, сделайте пример. В теории оно все просто. У меня, на пример, не получилось сделать.
@user-kq1qn7en8i
@user-kq1qn7en8i 6 лет назад
ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-GjWooyEbzZs.html а вообще в ютубе много по ардуино, этот пост я нашел по запросу "ардуино прирывания энкодер" ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-gRSYxXbjnCg.html в этом без прерываний, но более понятно, оптимально если совместить запоминание состояний с прерываниями
@UCanDo
@UCanDo 6 лет назад
Хм. Я понимаю как работает энкодер. В моем видео применяется точно такой же код, как и у Паяльник TV (последняя ссылка). По крайней мере принцип тот же: очень точно отлавливаются каждый "тик" энкодера. Все стандартные примеры работают только при отлавливании каждого второго шага энкодера. То есть в стандартных примерах отлавливание поворотов происходит через 1 шаг, каждый второй, а не каждый шаг. В первом примере (ссылка на канал arduinoLab) хоть и применено прерывание, но остается все та же проблема: отслеживается не каждый шаг енкодера, а через один. Для того что бы отследить каждый шаг, нужно оба вывода вешать на прерывания. Прерывания делать по Изменению. Я пробовал делать на двух прерываниях, но ничего не вышло. В сети примеров не нашел. Именно по этому я и попросил вас привести рабочий пример работы на прерываниях с подсчетом каждого шага. А просто как работать с энкодером - показано и в моем видео.
@Made_in_the_USSR
@Made_in_the_USSR 5 лет назад
Как сделать чтобы была одна ардуино и два энкодера?Выводить информацию на один дисплей
@UCanDo
@UCanDo 5 лет назад
Подключите энкодеры на разные Пины, для каждого энкодера используйте разные части кода.
@Elektrostal1
@Elektrostal1 6 лет назад
а смысл этого экзерсиса?
@orkoteg09
@orkoteg09 6 лет назад
- знакомство с энкодерами (не кнопками едиными можно клацать) - использование энкодера - 2-я жизнь мертвым мышкам
@user-yq4if4oy7p
@user-yq4if4oy7p 7 лет назад
Здравствуйте! А можно ли к ардуино подключить лазерную мышку в качестве линейного датчика? Спасибо.
@UCanDo
@UCanDo 7 лет назад
Мышку, думаю, можно подключить. Если она PS/2 то без проблем подключить можно, с USB будет по-сложнее. А зачем именно мышку? В чем суть устройства? Как именно она (как датчик) должна работать?
@user-yq4if4oy7p
@user-yq4if4oy7p 7 лет назад
Правильно отрезной станок для проволоки. Нужен датчик для определения длинны прошедшей проволоки чтобы отрубывать куски зоданой длинны. И есть несколько мышек. Вот и возник вопрос можно ли замерять длинну таким образом.
@UCanDo
@UCanDo 7 лет назад
На сколько он должен быть точным? +- 0.1 мм или +-5 мм? Если очень точный нужен, то я бы разобрал принтер, там есть оптопара и сегментированный диск (не знаю как он называется). Диск поставить на ролик движения проволоки, а оптопарой ловить повороты. Так можно очень точно отследить размеры. Если высокая точность не нужна то можно и энкодер от мышки использовать. Энкодер поставить на ролик и отслеживать повороты.
@arielvolog
@arielvolog 7 лет назад
на канале Radiosoft есть обзор работы с мышью, получение данных, разбор даташита
@serovsergey5888
@serovsergey5888 5 лет назад
Отвратительный алгоритм обработки энкодера. Используйте код Грэя robocraft.ru/blog/electronics/590.html
@UCanDo
@UCanDo 5 лет назад
Используемый мной код позволяет уловить каждый такт энкодера. Предложенный вами код делает то же самое?
@serovsergey5888
@serovsergey5888 5 лет назад
@@UCanDo , конечно. Иначе зачем бы он вообще нужен был?)
@UCanDo
@UCanDo 5 лет назад
Сейчас у меня нет под рукой подходящего энкодера чтобы протестировать пример. В сети гуляет множество примеров работы с энкодерами, но подавляющее большинство имеют один недостаток: срабатыванием через шаг. Предложенный вами мне не встречался. Возьму на заметку
@serovsergey5888
@serovsergey5888 5 лет назад
@@UCanDo Алекс Гайвер недавно выложил обновленные библиотеки для работы с энкодером. Говорит что у него не было пропусков шагов. К тому же его библиотеки работают с несколькими типами энкодеров. (Сам пока в железе не проверял)
@user-in3xn7ye6y
@user-in3xn7ye6y 4 года назад
раскажи лучше как энкодер (какую ногу куда) к микроволновки подключить. родной развалился а аналогов ненайду
@StatistPL
@StatistPL Год назад
Ну серьезно ... прерывания придумали 2000 лет назад..... Зачем покупать Феррари и потом толкать ее пешком? Любое изменение на одном из двух пинов вызывает функцию прерывания, смотришь что произошло выставляешь флаг а забываешь. 4 строки примитивного кода. 6 если убивать дребезг. Ну. К чему городить этот огород.
@UCanDo
@UCanDo Год назад
Можете привести пример?
@StatistPL
@StatistPL Год назад
@@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 Год назад
Использовать под такую херню как энкодер аппаратные прерывания INT0 и INT1 жаба душит... конечно, но Ардуина не слишком умна чтобы работать с программными прерываниями PCINTx. Видимо разработчики IDE не особо рассчитывают, что кто-то будет работать с прерываниями.... собственно так оно и получается. Для работы PCINTx есть отдельная либа "PinChangeInterrupt", например.... чтобы не использовать аппаратные прерывания. Объем кода в редакторе это не меняет, но сам факт необходимости отдельно либы для PCINTx меня откровенно удивляет.
@StatistPL
@StatistPL Год назад
noInterrupts(); и interrupts(); из прерывания можно убрать, в теории... если аппаратный дребезг надежный. Но я бы не стал, ради предсказуемости результата.
@user-rw4vf6uz4m
@user-rw4vf6uz4m 6 лет назад
Че это вообще такое зачем оно надо
@UCanDo
@UCanDo 6 лет назад
Это интересно тем, кто занимается программированием микроконтроллеров, и для проектов использует различные подручные запчасти
Далее
SE8R01. Counterfeit for NRF24L01
11:17
Просмотров 17 тыс.
The touchpad from the laptop. Connect to Arduino!
6:18
Девочки, у вас тоже так? 💅🏻✨
00:17
Управление моторами с Arduino
15:44
Просмотров 493 тыс.