игнорирование ИК команд во время выполнения delay

Тема в разделе "Arduino & Shields", создана пользователем джек, 19 авг 2017.

  1. джек

    джек Нуб

    Собирал мигалку с разными режимами. Режимы переключатся должны на пульте ик. После запуска одного режима, игнорируются другие команды от ик пульта. Для мигалки использовал for циклы и delay.
     
  2. rkit

    rkit Гуру

    И правильно. Не используйте delay, используйте millis
    Инструкций полно, погуглите.
     
    arkadyf нравится это.
  3. ИгорьК

    ИгорьК Гуру

    delay такая функция, которая останавливает исполнение всего. Ее использовать можно лишь тогда, когда реально надо ВСЕ остановить.
    В противном случае надо пользоваться функцией, которая определяет текущее время и планирует действие с наступлением другого времени.
    Это функция millis().
    • Определите текущее время,
    • определите, когда следует выполнить некоторое действие,
    • проверяйте время,
    • как наступило - выполняйте это действите.

    И включите мозги - придумайте сами как это реализовать.
     
    arkadyf нравится это.
  4. джек

    джек Нуб

    const int ledPin = 4; // номер выхода, подключенного к светодиоду
    // Variables will change:
    int ledState = LOW; // этой переменной устанавливаем состояние светодиода
    long previousMillis = 0; // храним время последнего переключения светодиода

    long interval = 30; // интервал между включение/выключением светодиода (1 секунда)

    void setup() {
    // задаем режим выхода для порта, подключенного к светодиоду
    pinMode(ledPin, OUTPUT);
    }

    void loop()
    { for (int i=0; i<5; i++) {
    // здесь будет код, который будет работать постоянно
    // и который не должен останавливаться на время между переключениями свето
    unsigned long currentMillis = millis();

    if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis;

    // если светодиод не горит, то зажигаем, и наоборот
    if (ledState == LOW)
    ledState = HIGH;
    else
    ledState = LOW;

    // устанавливаем состояния выхода, чтобы включить или выключить светодиод
    digitalWrite(ledPin, ledState);

    }
    }
    delay (4000);
    }
    мне нужно чтобы светодиод мигнул 4 раза с частотой 30 милисекунд, потом цикл остановился на 4 секунды. Но с этим кодом светодиод загорается 4 секунды и тухнет тоже на 4
     
  5. ostrov

    ostrov Гуру

    Прерывания она не останавливает. Можно этим воспользоваться. )
     
    arkadyf нравится это.
  6. ostrov

    ostrov Гуру

    Найдите простой пример "blink без delay" и сделайте аналогично.
     
    arkadyf нравится это.
  7. ИгорьК

    ИгорьК Гуру

    Не останавливает. А есть прмеры как воспользоваться в прерывании но и в delay?
    Здесь один перец уже показал два мастера на 1wire - работающий пример при неработающей программе.
    Изврат - это уже мода на ардуино?
     
    arkadyf нравится это.
  8. ИгорьК

    ИгорьК Гуру

    Перед решением задачи найдите ответ- как правильно оформить код.
     
    arkadyf нравится это.
  9. ostrov

    ostrov Гуру

    Есть примеры программ с пустым loop на одних прерываниях.
     
  10. ИгорьК

    ИгорьК Гуру

    Есть. И особенно полезны они для начинающих.
     
  11. ostrov

    ostrov Гуру

    А тут какие? Умирающие?