0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 3
|
||||||
1 | ||||||
Управление сервы кнопкой26.11.2014, 16:32. Показов 11042. Ответов 3
Метки нет Все метки)
(
Доброго времени суток.
Помогите, пожалуйста написать работающий код. Необходимо сделать, чтобы удерживании нажатой тактовой кнопки, сервомашинка поворачивала с 0 на 180 градусов в течение 6 секунд. При отпускании кнопки, серва останавливается. Если кнопка разжимается на 3-й секунде, серва застывает на 90 градусах, при повторном нажатии она продолжает поворот. Код работает почти как надо, только есть одна проблема - время начинает считываться с момента включения ардуины и никак не зависит от состояния кнопки. Если нажать кнопку на 3 секунде после включения платы, то серва повернет сразу на 90 градусов и дальше будет крутить с нужной скоростью, или же при повторном нажатии кнопки спустя время лопасть повернется на угол, рассчитанный как будто кнопку не разжимали вовсе
0
|
|
26.11.2014, 16:32 | |
Ответы с готовыми решениями:
3
Управление кнопкой управление сервоприводом кнопкой
|
Модератор
3363 / 2136 / 351
Регистрация: 13.01.2012
Сообщений: 8,314
|
||||||
26.11.2014, 16:55 | 2 | |||||
![]() Решение
мб как-то так (голова квадратная извините если что тупанул)
...v - это скорость с которой должно ехать в единицах позиции на мс
0
|
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 3
|
||||||
27.11.2014, 17:57 [ТС] | 3 | |||||
vxg, не совсем поняла идею кода, при запуске программы серва начала ходить ходуном вертя лопастями в разные стороны. Но все же спасибо, что не остались равнодушными к моей проблеме, решение которой все же нашлось.
Если кому-то пригодится вот простое решение текущей задачи:
![]()
0
|
Модератор
3363 / 2136 / 351
Регистрация: 13.01.2012
Сообщений: 8,314
|
|
28.11.2014, 09:24 | 4 |
на первый взгляд решение ничем принципиально не отличается от приведенного выше за исключением того что:
-в первом решении не было ничего известно о том что позицию надо ограничивать диапазоном 10..170 -в первом решении не была указана скорость перемещения - судя по второму решению она должна быть равна 1 / 33 - обеспечить адекватное увеличение позиции на такую малую величину можно только если проводить расчеты с использованием плавающей точки или изменить принцип вычисления позиции отсчитывая время от нажатия кнопки) -в первом решении теоретически возможна ситуация при которой вызовы loop будут идти с такой высокой частотой, что dt всегда будет равной нулю - следовательно в решение необходимо ввести задержку (наверное величины порядка 10 мс будет достаточно) -во втором решении наверное нет необходимости ограничивать и записывать позицию если она не изменяется - будет разумно перенести эти строки в место где изменяется позиция -во втором решении нужно быть аккуратными с цифрами +1 и 33 так как они вместе определяют скорость перемещения тогда как в первом решении за это отвечает один параметр v -во втором решении во время перезапуска позиция не будет меняться - спорный вопрос как оно должно быть на самом деле так как чип не знает фактического позиции - наверное неизменность позиции - это верное решение -во втором решении некоторые переменные лишние (press, time)
0
|
28.11.2014, 09:24 | |
Помогаю со студенческими работами здесь
4
Запуск сервы по времени
Управление коллекторным двигателем тактовой кнопкой Внешнее управление тактовой кнопкой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |