Шаговик + Джойстик + Прерывания
- Войдите на сайт для отправки комментариев
Ср, 29/07/2015 - 10:21
Друзья! Задача управлять джойстиком, двумя шаговыми моторами. Решил, что в коде нужно использовать прерывания, т.к. постоянный опрос джостика, процессором, сильно увеличивает загрузку процессора и как следствие ухудшает качество движения ШД и его скорость.
Разрыв мозга происходит когда нужно обработать кодом прерывания с джойстика, касательно режима mode
- LOW вызывает прерывание, когда на порту LOW
- CHANGE прерывание вызывается при смене значения на порту, с LOW на HIGH и наоборот
- RISING прерывание вызывается только при смене значения на порту с LOW на HIGH
- FALLING прерывание вызывается только при смене значения на порту с HIGH на LOW
все эти режимы, я так полагаю, предназначены для кнопок или еще чего-то, а как быть с джойстиком? Ведь у него не 1 или 0, а значения от 0 до 1023. Гуру, ткните носом, какую конструкцию для этого нужно?????
Я как то не вижу в хрустальном шаре какой у вас джойстик.
Puhlyaviy ))))
Как картинку вставить не вижу и ссылка с гугла корявая
Черный джойстик для ардуино на две оси
* дурь удалил
project37, а вы попробуйте по таймеру опрашивать, пару (5,10) раз в секунду.
Gippopotam, Вы имеете ввиду без прерывания, через delay() ?
по вашему коду и не должно работать
Gippopotam, Вы имеете ввиду без прерывания, через delay() ?
я имею в виду прерывание по таймеру, а не прерывания по сигналу с джойсткиа.
вызывайте прерывание несколько раз в секунду, а в обработчике опрашивайте джойстик.
Попробовал привести значения с джойстика к LOW и HIGH, ноль реакции. Кто знает, как это реализуется, буду благодарен
Gippopotam, Вы имеете ввиду без прерывания, через delay() ?
я имею в виду прерывание по таймеру, а не прерывания по сигналу с джойсткиа.
вызывайте прерывание несколько раз в секунду, а в обработчике опрашивайте джойстик.
Я думаю, что таким образом процессор тоже будет занят - и легче не станет.
project37, вы как-то вольно с внешними прерываниями обращаетесь...
Gippopotam, Вы имеете ввиду без прерывания, через delay() ?
я имею в виду прерывание по таймеру, а не прерывания по сигналу с джойсткиа.
вызывайте прерывание несколько раз в секунду, а в обработчике опрашивайте джойстик.
Я думаю, что таким образом процессор тоже будет занят - и легче не станет.
несколько раз в секунду прочитать аналоговые пины - это серьезная нагрузка?
Я пробывал делать delay(2000) - двигатель каждые 2сек дергается сам по себе и когда вращается теряет много в скорости за счет этой задержки. Когда второй мотор добавляю, то скорость еще на 2 делится (установлено эксперементально) Я пришел к выводу, чем больше опросов, тем хуще работает двиг. И что для работы с моторами опросы только все портят
project37, вы как-то вольно с внешними прерываниями обращаетесь...
вполне может быть, сильно не пинайте, только начал разбираться)
Я пробывал делать delay(2000) - двигатель каждые 2сек дергается сам по себе и когда вращается теряет много в скорости за счет этой задержки. Когда второй мотор добавляю, то скорость еще на 2 делится (установлено эксперементально) Я пришел к выводу, чем больше опросов, тем хуще работает двиг. И что для работы с моторами опросы только все портят
delay(2000) - вы себе даже представить не можете, как это много!
Вычитал, что прерывания работают только на цифровых портах 2 и 3 на UNO. Получается что с аналоговых портов не работают прерывания!? Может кто-нибудь, что-то конкретное по коду или по задумке сказать?
project37, то, что вы хотите невозможно. Но существенно разгрузить контроллер можно переключив ацп в режим автотриггера с прерыванием по окончанию преобразования. Команда analogRead вам такого предложить не может, необходимо напрямую программировать регистры АЦП.