Как сделать зацикленную работу сервопривода на js

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем mel0nYeee, 20 авг 2021.

  1. mel0nYeee

    mel0nYeee Нуб

    Мне нужно чтобы сервопривод опускался и поднимался каждые 2мин, но при использовании setInterval(), привод не возвращается в исходное положение.
    Код (Javascript):
    var servo = require('@amperka/servo').connect(P13);
    servo.write(0);

    setInterval(function() {
    servo.write(0);
    servo.write(180);
    }, 120000);
     
    Вот что я пытался сделать.
    В чем проблема?
     
  2. ИгорьК

    ИгорьК Гуру

    Два оператора подряд. Серва получает первую команду servo.write(0), не успевает ее выполнить, и молниеносно вторую - servo.write(180)

    Здесь и останавливается/стоит.
     
  3. parovoZZ

    parovoZZ Гуру

    надо после каждого оператора делать паузу.
     
    ИгорьК нравится это.
  4. ИгорьК

    ИгорьК Гуру

    Ну да. Только это JS и там пауз нет. Поэтому надо решать вопрос программно. Заводить переменную за пределами таймера, каждым вызовом менять ее состояние и отправлять на серву.
     
    mel0nYeee нравится это.
  5. mel0nYeee

    mel0nYeee Нуб

    Можно показать на примере, как это должно выглядеть, чтобы попробовать вставить это в код?
     
  6. parovoZZ

    parovoZZ Гуру

    да проблема здесь, собственно, не в языке, а в не верно составленном алгоритме.
     
    ИгорьК нравится это.
  7. ИгорьК

    ИгорьК Гуру

    Это верно, но способ реализации алгоритма зависит, в том числе, и от возможностей, предоставляемых языком.

    Друже, я на мобильном телефоне, поэтому код не напишу. Расскажу алгоритм.

    До определения таймера создай переменную. Присвой ей значение 0.

    Внутри таймера создай такую конструкцию: если значение той переменной 0, то меняешь ее на 180, а если 180 - меняешь на 0.
    После чего отправляешь эту переменную на серву один раз.

    Попробуй сам, тебе понравится.
     
    Andrey12 и issaom нравится это.