Задержка Serial-порта. Это нормально?

Тема в разделе "Arduino & Shields", создана пользователем Sergey.di, 24 авг 2014.

  1. Sergey.di

    Sergey.di Нуб

    Здравствуйте.

    Столкнулся с проблемой управления двигателем через serial-порт (потом через bluetooth):
    1) Собрал простую схему: Arduino UNO + MotorShield + Мотор с редуктором
    2) Скетч:
    const int MotoPin = 3;
    void setup()
    {
    Serial.begin(9600);
    pinMode(MotoPin, OUTPUT);
    }
    byte speed;
    void loop()
    {
    if (Serial.available()) {
    speed = Serial.parseInt();
    analogWrite(MotoPin, brightness);
    }
    }

    3) Через Serial-порт отправляю значение 0-255 на порт ~3 (задаю скорость)

    Все работе как нужно. Но есть одна проблема: после отправки числа 0-255 в Serial-порт, скорость изменяется не сразу, а через 1-2 секунды.

    Почему появляется эта задержка и можно ли ее убрать?
     
  2. geher

    geher Гуру

    Возможно, дело в том, что буфер последовательного порта не сразу отправляется, и нужно делать принудительный flush сразу после записи данных в порт (способ зависит от языка программирования).
     
  3. Sergey.di

    Sergey.di Нуб

    Я делаю это просто из Arduino-IDE (Mac)
     
  4. Sergey.di

    Sergey.di Нуб

    Задержка есть даже если управлять яркостью светодиода.
     
  5. NR55RU

    NR55RU Гик

    Я не стану писать тут, так как про это я написал свое время в своей статье.
    Почитайте вот тут, в низу страницы. Так же там есть описание функции которая устанавливает задержку. По умолчанию она равна 1000 миллисекундам.
     
    Sergey.di нравится это.
  6. Sergey.di

    Sergey.di Нуб

    Спасибо.
     
  7. ZaikaBlogs

    ZaikaBlogs Нерд

    да так и должно быть