irremote и сервы. Вкл/Выкл движение сервоприводов
- Войдите на сайт для отправки комментариев
Ардуино uno в руках всего неделю, но уже нацелился без изучения языка соорудить игрушку для кошаков, а именно передвигающуюся лазерную указку. Суть устройства - кнопка пульта от телика включает или выключает сценарий работы сервоприводов, на которых закреплена лазерная указка. Сервы соединены таким образом, что могут поворачивать указку вертикально и горизонтально (некая турель). Проблема с кодом возникла, нажимаю на кнопку пульта - сценарий запускается, нажимаю ещё раз - сценарий не прекращается и крутит сервы бесконечно по кругу.
#include <IRremote.h> #include <Servo.h> Servo myservo; Servo myservo1; int RECV_PIN = 6; IRrecv irrecv(RECV_PIN); decode_results results; int dellay = 100; int on_off_play = 0; void setup() { myservo.attach(9); myservo1.attach(8); myservo.write(0); myservo1.write(0); irrecv.enableIRIn(); } void loop() { play: if ( on_off_play == 1) { myservo1.write(81); // 1 шаг myservo.write(51); delay (dellay); myservo1.write(73); // 2 шаг myservo.write(59); delay (dellay); myservo1.write(70); // 3 шаг myservo.write(62); delay (dellay); myservo1.write(65); // 4 шаг myservo.write(65); delay (dellay); myservo1.write(60); // 5 шаг myservo.write(71); delay (dellay); myservo1.write(65); // 6 шаг myservo.write(77); delay (dellay); myservo1.write(70); // 7 шаг myservo.write(82); delay (dellay); myservo1.write(77); // 8 шаг myservo.write(88); delay (dellay); myservo1.write(84); // 9 шаг myservo.write(90); delay (dellay); myservo1.write(93); // 10 шаг myservo.write(80); delay (dellay); myservo1.write(100); // 11 шаг myservo.write(77); delay (dellay); myservo1.write(103); // 12 шаг myservo.write(71); delay (dellay); myservo1.write(105); // 13 шаг myservo.write(65); delay (dellay); myservo1.write(98); // 14 шаг myservo.write(60); delay (dellay); myservo1.write(94); // 15 шаг myservo.write(56); delay (dellay); myservo1.write(89); // 16 шаг myservo.write(52); delay (dellay); } //--------------------------------------------------------------------------------- if (irrecv.decode(&results)) { if (results.value == 0xF4BA2988 && ( on_off_play == 0 )) { on_off_play = 1; delay(1000); goto play; } irrecv.resume(); } //--------------------------------------------------------------------------------- if (irrecv.decode(&results)) { if (results.value == 0xF4BA2988 && ( on_off_play == 1 )) { on_off_play = 0; delay(10000); } irrecv.resume(); } }
пульт передаёт сигнал не прекращая, т.е. при зажатии кнопки код передаётся постоянно, а не однократно. Такое чувство, что просто не хватает времени на считывание кода кнопки после отрабатывания сценария сервоприводов, или что то ещё, я новичёк в этом деле, и мало в чём на данный момент разбираюсь. Хотелось бы реализовать простое включение-выключение сценария работы сервоприводов.
Подскажите в какую сторону копать, т.к. мой код это детский сад.
пульт передаёт сигнал пока держишь кнопку - так и должно быть
меняй алгоритм работы балалайки
Давай для начала сконфигурируем пины в setup и притянем RECV_PIN, чтобы в воздухе не болтался, а там посмотрим.
Давай для начала сконфигурируем пины в setup и притянем RECV_PIN, чтобы в воздухе не болтался, а там посмотрим.
не нужно - это делает библиотека IRremote.h
Может сморожу тупость, а с помощью библиотеки IRremote.h может можно сделать удержание считывания. чтобы всё остановилось и ждало команд, loop в это время на паузе
Может сморожу тупость, а с помощью библиотеки IRremote.h может можно сделать удержание считывания. чтобы всё остановилось и ждало команд, loop в это время на паузе
это классические грабли на которые наступает каждый начинающий программер МК - аналогично наступишь, если у тебя не пульт, а обычная тактовая кнопка. будет у тебя срабатывать, пока держишь конопку.
думай, над корректным алгоритмом
Из-за одной поделки изучать язык? Увольте. Для того, чтобы сделать табуретку, люди не идут учиться на плотника. Я создал тему не для того, чтобы за меня делали проект, т.к. у меня почти всё готово, а для того, чтобы узнать, возможно ли решить проблему парой команд или быть может кто-то из форумчан сталкивался с такой проблемой. А вот как вы выразились "лохов"- это неуважение к людям в данной теме, я думаю им неприятно такое сравнение. Форумы созданы для конструктивных рассуждений, а для осуждений и пустых советов есть mail_ru. Так что попрошу вас не засорять тему.
Для того, чтобы сделать табуретку, люди не идут учиться на плотника.
Они либо покупают дорогую мебель, либо делают кривую табуретку.
Для того, чтобы сделать табуретку, люди не идут учиться на плотника.
Они либо покупают дорогую мебель, либо делают кривую табуретку.
неверный ответ - они идут на форум укладчиков паркета и спрашивают, почему их табуретка похожа на тумбочку.
Они идут в магазин, платят деньги и покупают табуретку (вам, кстати, вот сюда) а не долбят столярные форумы вопросами типа "я столярничать не умею и учиться не хочу, но хочу сделать классную мебель, скажите куда копать".
То, что Вы называете проблемой не стоит выеденного яйца - требует меньше времени, чем мы тут переписываемся, но помогать человеку который "ничего не знает и знать не хочет" считаю возможным только на коммерческой основе, т.к. труд без вознаграждения ничуть не менее безнравственен, чем вознаграждение без труда.
[/quote]
Из-за одной поделки изучать язык? Увольте. Для того, чтобы сделать табуретку, люди не идут учиться на плотника.
[/quote]
Люблю аналогии, теперь расскажите, как сделать табуретку не умея держать пилу и рубанок? Это для получения минимального результата.
Вам никто не предлагает стать великим программистом, но знать азы требуется в любом деле, даже золотарю и дворнику.
Можно подвесить светящуюся лазерную указку на нитку (или резинку), на которой она и без Ардуины с сервоприводами будет качаться.
Можно подвесить светящуюся лазерную указку на нитку (или резинку), на которой она и без Ардуины с сервоприводами будет качаться.
А если кошаки ещё будут доставать до неё, чтобы лапой толкнуть - веселья будет - никакая ардуина рядом не стояла :)