Одновременное выполнение двух циклов

Тема в разделе "Arduino & Shields", создана пользователем Vetrinus, 10 авг 2015.

  1. Vetrinus

    Vetrinus Гик

    Здравствуйте. Образовалась проблема. Мне нужно было ардуиной при подаче минуса на контакт последовательно включать диоды. Задача простая и спокойно выполнимая.
    Код (Text):
    const int LED13 =13;
    const int LED12 =12;
    const int LED11 =11;
    const int LED10 =10;
    const int LED9 =9;
    const int input1 =8;
    const int input2 =7;
    int state1 = 0;
    int state2 =0;
    void setup()
    {
      pinMode (LED13, OUTPUT);
      pinMode (LED12, OUTPUT);
      pinMode (LED11, OUTPUT);
      pinMode (LED10, OUTPUT);
      pinMode (LED9, OUTPUT);
      pinMode (input, INPUT);
      digitalWrite(input, HIGH);
    }
    void loop()
    {
      buttonState = digitalRead (input);
      if (buttonState == LOW)
      {
        digitalWrite (LED13, HIGH);
        delay (1000);
        digitalWrite (LED12, HIGH);
        delay (1000);
        digitalWrite (LED11, HIGH);
        delay (1000);
        digitalWrite (LED10, HIGH);
        delay (1000);
        digitalWrite (LED9, HIGH);
        delay (10000);
      }
      else {
        digitalWrite (LED13, LOW);
        delay (1000);
        digitalWrite (LED12, LOW);
        delay (1000);
        digitalWrite (LED11, LOW);
        delay (1000);
        digitalWrite (LED10, LOW);
        delay (1000);
        digitalWrite (LED9, LOW);
        delay (10000);
      }
    }
    НО, оказывается, что существует два канала, к каждому из которых подсоединены свои диоды. Нужно, чтобы при подаче минуса на цифровой вход, как это реализовано выше, выполнялась программа. Теперь к проблеме. Это все должно происходить одновременно. И как это реализовать, я не знаю.
    Можно попробовать с каналами поиграть. Допустим, включать все от одного канала, а с другого половину выключать, и.т.д..
     
  2. DrProg

    DrProg Вечный нерд

    Одновременно делается не через delay, и вообще про delay надо забыть, т.к. он не кашерен. Используйте таймеры.
     
  3. Vetrinus

    Vetrinus Гик

    Я поставил делей для того, чтобы паузы прописать между включением диодов.
    А инфу о тймерах где искать?
    Это оно?
     
  4. DrProg

    DrProg Вечный нерд

    Вообще millis, но там читать особо нечего. Главное идея: перед началом цикла в переменные типа long записывается значение millis, затем в цикле постоянно идет проверка текущего millis с записанным плюс требуемое время задержки, если больше или равно,то выполняется нужное действие, после чего в таймер мнова записывается millis и так по кругу. Таких таймеров можно запустить несколько, чем реализуется псевдопараллельная работа.
     
  5. ИгорьК

    ИгорьК Гуру

  6. 9xA59kK

    9xA59kK Гик

  7. vvr

    vvr Инженерище

    а для определения сколько раз нужно мигнуть светиком заводим переменную count и с каждым интервалом её увеличиваем.
    когда достигли нужного количества миганий вырубаем таймер и обнуляем count:)