Изменение положения двух сервоприводов по нажатию кнопок
- Войдите на сайт для отправки комментариев
Вс, 01/03/2015 - 01:37
Прочитал тему "Изменение положения сервы по нажатию кнопки" ,хотел там поспрашать умных людей , но посоветовали создать свою тему. Вопрос в чем- залил скетч из выше упомянутой темы от форумчанина "SU-27-16"-все замечательно работает, но мне нужно подключить 2 сервы с кнопочным управлением. Как указать что кнопки 1,2 управляют 1 сервой , а 3,4 -второй.Своих мозгов не хватает
Скетч от SU-27-16
01 |
#include <Servo.h> |
02 |
#define ServoPin 9 // пин сервы |
03 |
#define BUT_1 4 // BUT_1 и BUT_2 - кнопки управления сервой (тут пин 4) |
04 |
#define BUT_2 5 // BUT_1 и BUT_2 - кнопки управления сервой (тут пин 5) |
05 |
#define SHAG 1 // шаг поворота сервы, в градусах |
06 |
Servo myServo; |
07 |
int angle = 0; //начальный угол |
08 |
void setup () |
09 |
{ |
10 |
myServo.attach(ServoPin); |
11 |
myServo.write(angle); //состояние после включения |
12 |
pinMode(BUT_1, INPUT); //для считывания состояний кнопок |
13 |
digitalWrite( BUT_1 , HIGH ); // подтяжка |
14 |
pinMode(BUT_2, INPUT); //для считывания состояний кнопок |
15 |
digitalWrite( BUT_2 , HIGH ); // подтяжка |
16 |
// кнопки соединены с ардуиной стягивающим резистором! (т.е. когда не нажато 0 В) изменить !!!!! |
17 |
// кнопки соединены с ардуиной ПОДТЯГИВАЮЩИМ резистором! (т.е. когда не нажато 5 В) !!!!!!!!!!!!!!!! |
18 |
} |
19 |
void loop () |
20 |
{ |
21 |
if ( ! digitalRead(BUT_1)) angle = angle + SHAG; //если первая кнопка увеличим угол |
22 |
if ( ! digitalRead(BUT_2)) angle = angle - SHAG; //если вторая уменьшим |
23 |
24 |
if (angle > 180) angle = 180; //ограничим угол сервы 0..180 |
25 |
if (angle < 0) angle = 0; |
26 |
27 |
myServo.write(angle); //задаем получившийся угол |
28 |
delay(300); // подождем перед следующим опросом |
29 |
} |
моё решение - не самое лучшее ! не ссылайтесь на миня.....
для двух и более - позжеее
Не скромничайте. Я же не одну тему перечитал и яндекс гуглил.Я чайник конечно полный ,но мне понравилось ,что без всяких резисторов работает
хорошо, как чайник чайнику - напишу...
почитай для общего развития
http://arduino.ru/forum/obshchii/prezhde-chem-sprosit-pro-servomashinku-...
Большое человеческое СПАСИБО. Все отлично зароботало. Подправил где требовалось. Принцип я понял -хотя и не до конца.
Буду дальше двигаться -ардуинка месяц назад в руки попала. Литературу конечно буду читать как vvadim посоветовал -достали тут наверно такие как я )).
Принцип я понял -хотя и не до конца.
спрашивайте... :) тут все такие, но кто-то поопытнее
Вот это уже устарело:
Современнее, короче и смыслопонятнее будет:
Пошли дальше, то-есть немного выше:
С сервами всё понятно. А кнопки как обозваны? полностью безмыссленно! Если наша первая кнопка что-то добавляет к положению сервы то так её и обзываем: "Кнопка_которая_добавляет_ к_положению_первой_сервы_какой-то_ там_ шаг"
Или короче на языке авторов языка ( англ. ) вариант: ServoBtn_1_plus или Servo_1_btn_plus
тут всё индивидуально... как кому понятнее чтобы не вспоминать что за BUT_3 была такая.
И чтобы совсем никогда не путаться продолжаем:
И тогда S1_plus становится из набора каких-то там дигитал ридов каких-то дигитал пинов событием !
С которым можно работать так: а не произошло ли у нас S1_plus ( коротко и ясно)
И все ифы будут : иф (S1_plus)
А самый большой плюс всего этого- когда у вас в программе 100500 раз напихано
и вы решили убрать "!" ( есть отдельные фанаты, которые считают что нажатие на кнопку- это подача единицы и только единицы! но не в коем случае не нуля, и ради этого готовы впаивать внешний резистор привязки на землю вместо включения внутреннего на питание) вам не надо 100500 раз искать и менять что-то: достаточно в ОДНОМ месте, в самом начале скетча, вверху убрать этот !. И всё.
Не, для нас чайников это уже слишком!
Не дрейфь, я тоже чайник. Но опытный :) Почти как ded_60_let, но немного моложе.
а как при такой конструкции с дребезгом бороться
Как бы не усложняли (упрощяли) - меня вполне устраивает исходный код .Главное -он делает то , что мне надо и больше не надо.
Конечно надо развиваться , но то что мне человек помог побороть то ,в чем я не копенгаген -ему большое спасибо. Я думаю ,что форум как раз для этого и создан. То что специалисты обсуждают то ,что кто то наваял -это здорово.В спорах -истина .Буду с вниманием мотать на седой ус.
это не критика, а наоборот помощь - корректно оформляя свой вопрос ты повышаешь шанс получить ответ
можно и через DDRx , PORTx...... но для ТС это ранова-то пока
а как при такой конструкции с дребезгом бороться
в этом коде с этим успешно борется задержка на 300 миллисекунд ( но это не совсем хорошо )
Зато вполне успешно. Можете конденсатором подстраховаться
При задержке в 300 не дождежся пока серва что-то отработает.Поставил 30 - бодренько так отрабатывает.Никакого влияния дребезга не увидел
При задержке в 300 не дождежся пока серва что-то отработает.Поставил 30 - бодренько так отрабатывает.Никакого влияния дребезга не увидел
а как дребезг на серве с этим кодом будет проявляться ? вы знаете или думаете что знаете ? :)
убрать задержку и шаг поворота сделать 5....10 градусов - вот тогда будет хорошо видно "дребезг"
Если убрать задержку серва будет отрабатывать от упора до упора.А про дребезг я тому ,что даже если он и есть ,то мне не мешает нисколько. А про знаю или нет- конечно нихрена не знаю т.к. начинающий чайник.
:) при замыкании контактов кнопки возникает не один фронт сигнала, а несколько ( дребезг в относительно высоковольтных переключателях = ИСКРЕНИЕ )
при шаге сервы 5 гр на одно нажатие кнопки надеемся получить поворот на 5 гр
из-за дребезга одно нажатие кнопки превращается в 6.....30 нажатий - и получим поворот сервы на угол 30.....150 градусов :(
...как чайник - чайнику, никаких нравоучений :)
Если убрать задержку серва будет отрабатывать от упора до упора
.....нужно очень быстрое отпускание кнопки - тогда и заметите дребезг :)
защита от этого - или программная, или "железяковская" как сказал trembo
программисты - за первое, аппаратчики - за второе..... :)
нужна мне помощь. Собираю масштабную модель танка ПТ-76 танк готов уже ездиет и плавает. Крышки водометов работают на сервах и крышка передняя против волны тоже серво, спомощью вашил скетчей подклучил на кнопки класс работает, долго искал спасибо инету но вот дальше нужна помощь как все подклучить на пульт через NRF модуль, нужен скетч а я пока толькот начинаю работать с ардуином также там стоят два мотора на гусеницы и два водомёта, и еще нужен поворот башни и откат ствола, помагите со скетчем на пульт.