Как правильно работать с Thread?

Тема в разделе "Посоветуйте детальки", создана пользователем Making_robots, 18 апр 2018.

  1. Making_robots

    Making_robots Нуб

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

    #include <Servo.h>
    #include <Thread.h>
    const int movPin = 2;
    const int relPin = 3;
    Servo servoVerh;
    Servo servoNiz;
    Thread verhThread = Thread();
    Thread nizThread = Thread();

    void setup() {
    Serial.begin(9600);
    pinMode(movPin, INPUT);
    pinMode(relPin, OUTPUT);
    servoVerh.attach(9);
    servoNiz.attach(10);
    verhThread.onRun(servoVerh.write(90)); // назначаем потоку задачу
    verhThread.setInterval(6000);
    nizThread.onRun(servoNiz.write(90)); // назначаем потоку задачу
    nizThread.setInterval(6000);
    }
    Уже на этом месте ругается "invalid use of void expression". Каким образом надо задачу назначать?
     
  2. parovoZZ

    parovoZZ Гуру

    Это же всё делается крайне просто. Зачем псевдопотоки подтягивать?
     
  3. mcureenab

    mcureenab Гуру

    Видимо так, только зачем Thread если можно просто сервы повернуть.

    Код (C++):
    void f_verhThread()
    {
        servoVerh.write(90);
    }

    void f_nizThread()
    {
        servoNiz.write(90);
    }

    void setup() {
    ....
    verhThread.onRun(f_verhThread); // назначаем потоку задачу
    verhThread.setInterval(6000);
    nizThread.onRun(f_nizThread); // назначаем потоку задачу
     
     
  4. Making_robots

    Making_robots Нуб

    Спасибо! А как их повернуть одновременно без Thread?
     
  5. mcureenab

    mcureenab Гуру

    Код (C++):
        servoVerh.write(90);
        servoNiz.write(90);
     
  6. Making_robots

    Making_robots Нуб

    Они тогда по очереди поворачиваться будут. Нет?
     
  7. mcureenab

    mcureenab Гуру

    write только даёт команду повернуться на угол. А серва её исполняет асинхронно. write не ждёт когда поворот произойдёт. у сервы даже нету обратной связи с МК. МК даже не знает повернулась серва или нет.
     
  8. Making_robots

    Making_robots Нуб

    Хм. Спасибо, поэкспериментирую.
     
  9. parovoZZ

    parovoZZ Гуру

    Канеш по очереди)) Пауза между стартами менее 1 мс. Критично?