Мучаюсь с millis()

Уважаемые форумчане! Помогите. Бьюсь уже который день и не могу разобраться и не могу нигде найти. Как сделать чтобы было три последовательных задержки одна за другой по 5 сеунд.. Без delay()

uint32_t myTimer1, myTimer2, myTimer3;

void setup() {Serial.begin(9600);}

void loop() {

// таймер на 5 сек

if (millis() - myTimer1 >= 5000) {

    myTimer1 = millis();

     Serial.println(5);

     Serial.println(myTimer1);

}

    // таймер на 10 сек

if (millis() - myTimer2 >= 10000) {

    myTimer2 = millis();

     Serial.println(55);

      Serial.println(myTimer2);

}

// таймер на 15 сек

if (millis() - myTimer3 >= 15000) {

    myTimer3 = millis();

     Serial.println(555);

      Serial.println(myTimer3);

}

}

Добавить переменную - сценарный счётчик, по его значению определять какая задержка идёт.

Можно чуть подробнее.

Пожалуйста

В условиях своих таймеров добавляете условие значения счётчика, например:
if(millis()-Y>T1&&ST==1){ST=2;Y=millis();…
if(millis()-Y>T2&&ST==2){ST=3;Y=millis();…

я не понял, что это значит

Логика работы с millis() не очевидна, ждите, другие может объяснят проще.

uint32_t myTimer1, myTimer2, myTimer3;

/*

if(millis()-Y>T1&&ST==1){ST=2;Y=millis();…

if(millis()-Y>T2&&ST==2){ST=3;Y=millis();…

*/

int ST=1;

void setup() {Serial.begin(9600);}

void loop() {

// таймер на 5 сек

if (millis() - myTimer1 >= 5000&&ST==1) {ST=2;

    myTimer1 = millis();

     Serial.println(5);

     Serial.println(myTimer1);

}





// таймер на 10 сек

if (millis() - myTimer2 >= 5000&&ST==2) {ST=3;

    myTimer2 = millis();

     Serial.println(55);

      Serial.println(myTimer2);

}



// таймер на 15 сек

if (millis() - myTimer3 >= 5000&&ST==3) {ST=1;

    myTimer3 = millis();

     Serial.println(555);

      Serial.println(myTimer3);

}

}

не дает задержку на 5 сек. последовательно

зачастую им надо код скинуть… типо такого

uint32_t myTimer;
uint8_t step = 0;
bool startTimer = true;
void setup() {
Serial.begin(9600);
}
void loop() {
uint32_t interval;
switch (step) {
case 0: interval = 5000; break;
case 1: interval = 10000; break;
case 2: interval = 15000; break;
default: interval = 5000; break;
}
if (startTimer) {
myTimer = millis();
startTimer = false;
}
if (millis() - myTimer >= interval) {
switch (step) {
case 0: Serial.println("5 seconds"); break;
case 1: Serial.println("10 seconds"); break;
case 2: Serial.println("15 seconds"); break;
}
step++;
startTimer = true;
if (step > 2) {
step = 0;
}
}
}

но вот сложно определить кому дать, а кого посылать учиться в самое начало)))
а вы себя в роли подсказчика пробуете ?)))
это не благодарное дело…)))

1 лайк

Спасибо большое. Так работает. Сейчас попробую применить в своем коде.

Все таки постарайтесь вставлять код правильно

1 лайк

Я подумал он понять хочет, иначе бы к ИИ обратился. А он не хочет :slight_smile: И у ИИ не может :slight_smile:

Такое давать - только позориться :wink:

1 лайк

Извечный женский вопрос :slight_smile:

не верю! докажите!))) какой код дать новичку ?))) флаг, счетчик, все… ну небольшая задержка… пойдет!)))

Здесь зацикливаетесь.
Неужели так трудно код нормально вставить?

Еще раз спасибо.

Твои проблемы :wink:

Так а что ставить. Мне же нужно чтобы задержки шли по очереди многократно. Вот и зациклил. Но проблема, что в данном коде печать выводилась не каждые 5 секунд строка, а все три строки через 5 секунд

Сформулируйте чётко , простыми словами, задачу, и пол-дела будет сделано))