Многозадачность millis()

Davi4_4
Offline
Зарегистрирован: 14.07.2021

Всем доброго времени суток. 

Возник такой вопрос. У меня есть код в котором используется millis() и задержка через него, а если я захочу использовать if в нутри другого if или же несколько if подряд как мне добавить использование millis задержки и в тот и в другой if.

 

if ( irrecv.decode( &results) && millis() - time > 300) {
      if (results.value == 0xFFE01F){
           digitalWrite( 13, LOW);
           digitalWrite( 5, LOW);
       }
      else if (results.value == 0xFFA857){
           digitalWrite( 13, HIGH );
           digitalWrite( 5, HIGH );
       }
      else {
          digitalWrite( 13, LOW );
        }
      time = millis();
     }
 
Вот этот код на пример. Если я хочу что бы и в if и в else if использовался millis (что бы предотвратить ложные срабатывания)
 
ps: Это управление щеколдой по ик пульту.
rkit
Offline
Зарегистрирован: 23.11.2016

Хотеть не вредно

Davi4_4
Offline
Зарегистрирован: 14.07.2021

Тоесть задержку через millis можно использовать один раз только?

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Davi4_4 пишет:

Тоесть задержку через millis можно использовать один раз только?

Нет. 

b707
Offline
Зарегистрирован: 26.05.2017

1. Вставьте код по правилам форума
2. И напишите нормально, что вы хотите

Davi4_4
Offline
Зарегистрирован: 14.07.2021

b707 пишет:
1. Вставьте код по правилам форума 2. И напишите нормально, что вы хотите

Есть вот на пример код в котором моргает красный светодиод и паралельно ему мограет синий. Как это сделать можно через millis или нельзя вообще? Может есть еще какие то способы сделать задержку?

Davi4_4
Offline
Зарегистрирован: 14.07.2021

b707 пишет:
1. Вставьте код по правилам форума 2. И напишите нормально, что вы хотите

Можно ли как то независимо использовать задержку millis.

Две или даже даже больше Millis

 

 

KindMan
Offline
Зарегистрирован: 19.12.2018

Davi4_4 пишет:

Две или даже даже больше Millis

millis это функция, вы можете вызывать её один, два или N число раз. Вы можете отмерять разные временные интервалы. Но я тоже не понял, что вы хотите сделать. Откройте в Ардуино IDE  Файл-Примеры-02.Digital-BlinkwithoutDelay. Если вам всё понятно, то без труда сможете заставить мигать второй светодиод с другим интервалом.

b707
Offline
Зарегистрирован: 26.05.2017

Davi4_4 пишет:

Можно ли как то независимо использовать задержку millis.

можно

Цитата:
Две или даже даже больше Millis

для этого не нужно много миллис. Вы же можете по уличным часам отмерить 10 минут, верно? И 10 тыс человек рядом с вами могут замерить свои интервалы по тем же часам... для этого не нужно 10 тыс часов

Davi4_4
Offline
Зарегистрирован: 14.07.2021

b707 пишет:

Davi4_4 пишет:

Можно ли как то независимо использовать задержку millis.

можно

Цитата:
Две или даже даже больше Millis

для этого не нужно много миллис. Вы же можете по уличным часам отмерить 10 минут, верно? И 10 тыс человек рядом с вами могут замерить свои интервалы по тем же часам... для этого не нужно 10 тыс часов

Согласен. Звучит логично. А вы может статью знаете где что то про это написано. Был бы очень благодарен за подсказку.

b707
Offline
Зарегистрирован: 26.05.2017

Davi4_4 пишет:

А вы может статью знаете где что то про это написано. Был бы очень благодарен за подсказку.

не знаю. Ищите в гугле что-нить типа "несколько независимых интервалов на миллис". даже у нас на форуме этот вопрос обсуждался уже раз двадцать

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707, зачем что-то отвечаете после поста #4, когда код так и не вставлен? Поциент же уже на голову сел и ноги свесил.

Davi4_4
Offline
Зарегистрирован: 14.07.2021

ЕвгенийП пишет:

b707, зачем что-то отвечаете после поста #4, когда код так и не вставлен? Поциент же уже на голову сел и ноги свесил.

Слушай если ты не знаешь или не хочешь помогать то просто заигнорируй. Я же не персонально тебе написал. Есть люди которые хотят и могут помочь. А то что я код не скинул. Я его уже переделал без использования миллис, смысл мне его кидать? Он уже не подходит по теме. А продолжил я писать потому что все равно хотел узнать про этот милис.

Davi4_4
Offline
Зарегистрирован: 14.07.2021

b707 пишет:

Davi4_4 пишет:

А вы может статью знаете где что то про это написано. Был бы очень благодарен за подсказку.

не знаю. Ищите в гугле что-нить типа "несколько независимых интервалов на миллис". даже у нас на форуме этот вопрос обсуждался уже раз двадцать

А вам спасибо большое) Пойду искать.

Davi4_4
Offline
Зарегистрирован: 14.07.2021

KindMan пишет:

Davi4_4 пишет:

Две или даже даже больше Millis

millis это функция, вы можете вызывать её один, два или N число раз. Вы можете отмерять разные временные интервалы. Но я тоже не понял, что вы хотите сделать. Откройте в Ардуино IDE  Файл-Примеры-02.Digital-BlinkwithoutDelay. Если вам всё понятно, то без труда сможете заставить мигать второй светодиод с другим интервалом.

Вам тоже спасибо)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Davi4_4 пишет:
Я же не персонально тебе написал.
А вот я как раз обращался персонально к b707. Так что, Вы влезли в чужой разговор.

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Афтар, я пешу так:

 

№дефайн ИНТЕРВАЛ_ПРИЁМ (400)   // миллисек

№дефайн ИНТЕРВАЛ_1ГОД (4294967295)

 

иф(милис() - прошлый_приём >= ИНТЕРВАЛ_ПРИЁМ /*обычно 250*/ ){

  иф(&декоде_резултс_блабла){

    свитч(резултс.валуе){

      касе 0х5ф5да75: ехец_цмд(кнопка_зкртьщклд); бреак;

      касе 0х5ф5да77: ехец_цмд(кнопка_откртьщклд); бреак;

      касе 0х5ф5д7а5: ехец_цмд(кнопка_ещккятхуня); бреак;

    }

  }

}

 

воид ехец_цмд(буте цмд){

  свитч(цмд){

    /* имплементацыя */

    // ,,,,

    касе 228:

      иф (милим() - ласт_покуритьтраву >= ИНТЕРВАЛ_1ГОД){    // апрель 20 (кодовая дата, 420) бывает тока раз..... вгааааа... ду

         /* имплементация забить косяка */

      }

     бреак;

     /* и т д и т п */

  }

}

 

мой способ работает. Пользуйтесь.