irremote и сервы. Вкл/Выкл движение сервоприводов

666_Egor_666
Offline
Зарегистрирован: 04.12.2015

Ардуино 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();
  }
}

пульт передаёт сигнал не прекращая, т.е. при зажатии кнопки код передаётся постоянно, а не однократно. Такое чувство, что просто не хватает времени на считывание кода кнопки после отрабатывания сценария сервоприводов, или что то ещё, я новичёк в этом деле, и мало в чём на данный момент разбираюсь. Хотелось бы реализовать простое включение-выключение сценария работы сервоприводов.

Подскажите в какую сторону копать, т.к. мой код это детский сад.

Клапауций 777
Offline
Зарегистрирован: 21.11.2015

пульт передаёт сигнал пока держишь кнопку - так и должно быть

меняй алгоритм работы балалайки

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Давай для начала сконфигурируем пины в setup и притянем RECV_PIN, чтобы в воздухе не болтался, а там посмотрим.

Клапауций 777
Offline
Зарегистрирован: 21.11.2015

ЕвгенийП пишет:

Давай для начала сконфигурируем пины в setup и притянем RECV_PIN, чтобы в воздухе не болтался, а там посмотрим.

не нужно - это делает библиотека IRremote.h

666_Egor_666
Offline
Зарегистрирован: 04.12.2015

Может сморожу тупость, а с помощью библиотеки IRremote.h может можно сделать удержание считывания. чтобы всё остановилось и ждало команд, loop в это время на паузе

 

Клапауций 777
Offline
Зарегистрирован: 21.11.2015

666_Egor_666 пишет:

Может сморожу тупость, а с помощью библиотеки IRremote.h может можно сделать удержание считывания. чтобы всё остановилось и ждало команд, loop в это время на паузе

это классические грабли на которые наступает каждый начинающий программер МК - аналогично наступишь, если у тебя не пульт, а обычная тактовая кнопка. будет у тебя срабатывать, пока держишь конопку.

думай, над корректным алгоритмом

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015
666_Egor_666 пишет:
нацелился без изучения языка соорудить 
 
В переводе на русский: "хочу построить вас-лохов, чтобы вы за меня всё сделали, т.к. самому мне лень даже в носу поковыряться".
 
666_Egor_666 пишет:
Подскажите в какую сторону копать
 
Подсказываю: копайте в сторону "изучения языка".
666_Egor_666
Offline
Зарегистрирован: 04.12.2015

ЕвгенийП пишет:

666_Egor_666 пишет:
нацелился без изучения языка соорудить 
 
В переводе на русский: "хочу построить вас-лохов, чтобы вы за меня всё сделали, т.к. самому мне лень даже в носу поковыряться".
 
666_Egor_666 пишет:
Подскажите в какую сторону копать
 
Подсказываю: копайте в сторону "изучения языка".

Из-за одной поделки изучать язык? Увольте. Для того, чтобы сделать табуретку, люди не идут учиться на плотника. Я создал тему не для того, чтобы за меня делали проект, т.к. у меня почти всё готово, а для того, чтобы узнать, возможно ли решить проблему парой команд или быть может кто-то из форумчан сталкивался с такой проблемой. А вот как вы выразились "лохов"- это неуважение к людям в данной теме, я думаю им неприятно такое сравнение. Форумы созданы для конструктивных рассуждений, а для осуждений и пустых советов есть mail_ru. Так что попрошу вас не засорять тему.

arduinec
Offline
Зарегистрирован: 01.09.2015

666_Egor_666 пишет:

Для того, чтобы сделать табуретку, люди не идут учиться на плотника.

Они либо покупают дорогую мебель, либо делают кривую табуретку.

Клапауций 777
Offline
Зарегистрирован: 21.11.2015

arduinec пишет:

666_Egor_666 пишет:

Для того, чтобы сделать табуретку, люди не идут учиться на плотника.

Они либо покупают дорогую мебель, либо делают кривую табуретку.

неверный ответ - они идут на форум укладчиков паркета и спрашивают, почему их табуретка похожа на тумбочку.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

666_Egor_666 пишет:
Для того, чтобы сделать табуретку, люди не идут учиться на плотника.

Они идут в магазин, платят деньги и покупают табуретку (вам, кстати,  вот сюда) а не долбят столярные форумы вопросами типа "я столярничать не умею и учиться не хочу, но хочу сделать классную мебель, скажите куда копать". 

666_Egor_666 пишет:
возможно ли решить проблему парой команд ... быть может кто-то из форумчан сталкивался с такой проблемой. 

То, что Вы называете проблемой не стоит выеденного яйца  - требует меньше времени, чем мы тут переписываемся, но помогать человеку который "ничего не знает и знать не хочет" считаю возможным только на коммерческой основе, т.к. труд без вознаграждения ничуть не менее безнравственен, чем вознаграждение без труда.

bwn
Offline
Зарегистрирован: 25.08.2014
 

[/quote]

Из-за одной поделки изучать язык? Увольте. Для того, чтобы сделать табуретку, люди не идут учиться на плотника.

[/quote]

Люблю аналогии, теперь расскажите, как сделать табуретку не умея держать пилу и рубанок? Это для получения минимального результата.
Вам никто не предлагает стать великим программистом, но знать азы требуется в любом деле, даже золотарю и дворнику.

arduinec
Offline
Зарегистрирован: 01.09.2015

Можно подвесить светящуюся лазерную указку на нитку (или резинку), на которой она и без Ардуины с сервоприводами будет качаться.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

arduinec пишет:

Можно подвесить светящуюся лазерную указку на нитку (или резинку), на которой она и без Ардуины с сервоприводами будет качаться.

А если кошаки ещё будут доставать до неё, чтобы лапой толкнуть - веселья будет - никакая ардуина рядом не стояла :)