2 millis() в while [решено]

Тема в разделе "Arduino & Shields", создана пользователем Hack Pentagon, 1 июл 2018.

  1. Hack Pentagon

    Hack Pentagon Нерд

    Есть тело While. И нужно туда засунуть 2 таймера на миллис. То есть сначала напряжение подаётся, потом, через некоторое время - нет. И так по кругу. Чет не получается.
     
  2. ostrov

    ostrov Гуру

    Если больше ничего не делается просто используте delay.
     
  3. Hack Pentagon

    Hack Pentagon Нерд

    Но мне нужно паралельно включать и выключать эту канитель.
     
  4. ostrov

    ostrov Гуру

    А в чем проблема с миллис? Запомнили время, сравниваем с текущим, когда превысило сработало и снова запомнить время.
     
  5. Daniil

    Daniil Гуру

    Код (C++):
    while{
    if (последее_время - текущее_время>=1мс)
    {
    операторы
    последнее_время=текущее_время
    }
    }
     
  6. Hack Pentagon

    Hack Pentagon Нерд

    Это дико, но я сначала так и делал. Потом вы подсказали. Не работало. Создал подставную программу чисто с этим кодом. Но все равно не работает. Просто через несколько секунд включается и все
     
  7. Hack Pentagon

    Hack Pentagon Нерд

    Но мне нужно чтобы на х миллисекунд включалось и на у миллисекунд выключалось
     
  8. vvr

    vvr Инженерище

    Код (C++):
    #define Led_Pin 13

    void flashing(int time_on, int time_off )
    {
      static bool state = 0;
      static unsigned long time = 0;
      if ((millis() - time)  > (state ? time_on : time_off))
      {
      state = !state;
      digitalWrite(Led_Pin, state);
      time = millis();
      }
    }

    void setup()
    {
      pinMode(Led_Pin, OUTPUT);
    }

    void loop()
    {
      flashing(1000, 3000);
    }
     
    Hack Pentagon нравится это.
  9. ostrov

    ostrov Гуру

    Блинк без delay это называется, есть в стандартных примерах.
     
  10. Hack Pentagon

    Hack Pentagon Нерд

    Крайне спасибо но не мог бы объяснить что означают две точки :?
     
  11. Igor68

    Igor68 Гуру

    Код (C++):
    state ? time_on : time_off
    значит, что условие
    if ((millis() - time) > time_on )
    В случае "state" > 0
    и
    if ((millis() - time) > time_off)
    иначе
    Вместо "state" может быть и оператор сравнения например:
    a > b?c:d своего рода выбор:
    x = a>b?c:d
    Если a > b то x = c
    иначе
    x = d
     
    Hack Pentagon нравится это.
  12. DetSimen

    DetSimen Guest

    Ты свой код-то покажешь, который не работает,или нам на Хрустальных Шарах гадать?
    Дак у меня нет, мне его на другом форуме расколотили.
     
  13. Airbus

    Airbus Радиохулиган Модератор

    Кот секретный.
     
  14. Hack Pentagon

    Hack Pentagon Нерд

    Спасибо vvr и Igor68. Проблема разрешена.
     
  15. Hack Pentagon

    Hack Pentagon Нерд

    Загрузи два таймера на миллис в Вайл
     
  16. Hack Pentagon

    Hack Pentagon Нерд

    Забавно, но так и есть