пауза в цикле

ТокарьКот

✩✩✩✩✩✩✩
29 Мар 2025
3
0
Здраствуйте.
Вопрос: как организовать паузу в цикле ? Например выполняется какой то цикл, при нажатии на кнопку "пауза" он останавливается, при нажатии на кнопку "старт", он продолжает доделывать оставшееся количество циклов. В стандартных циклах этого нельзя добиться, по моему. Поэтому я организовал такой. Но он срабатывает только если кнопка удерживается, причем доделывается цикл, потом делается ещё один и только потом останавливается.



C++:
 #include "GyverButton.h"

#define BTN1 35  //  старт
#define BTN11 36  //  пауза

GButton butt1(BTN1);
GButton butt11(BTN11);

boolean start_flag = false;

// переменные
int8_t Kolihestvo = 1;
 

void loop
butt1.tick();
butt11.tick();

 if (butt1.isPress()) {                              //  Старт
    start_flag = true;
 }

if(!butt11.isPress() && start_flag == true && j < Kolihestvo) {
    funk();
    j++;
  }
  else if(butt11.isPress() || j == Kolihestvo) {
    start_flag = false;
  }
 

poty

★★★★★★✩
19 Фев 2020
3,485
994

@ТокарьКот, приводите правильный пример, который "с флагом". Зачем показывать заведомо неправильный результат?
 

ТокарьКот

✩✩✩✩✩✩✩
29 Мар 2025
3
0
"Правильный" просто не лучше, а даже ещё хуже.

C++:
 #include "GyverButton.h"

#define BTN1 35  //  старт
#define BTN11 36  //  пауза

GButton butt1(BTN1);
GButton butt11(BTN11);

boolean start_flag = false;
boolean pausa_flag = true;

// переменные
int8_t Kolihestvo = 1;
int8_t j;

void loop
butt1.tick();
butt11.tick();

if (butt1.isPress()) {                              //  Старт
    start_flag = true;
    pausa_flag = true;
}
if (butt11.isPress()) {                              //  Пауза
    pausa_flag = false;
}

if( start_flag == true && pausa_flag == true && j < Kolihestvo) {
    funk();
    j++;
  }
  else if(j == Kolihestvo || pausa_flag == false) {
    start_flag = false;
  }
 
Изменено:

Сотнег

★★★★★★★
15 Янв 2020
4,552
1,545
@ТокарьКот,
вы в постановке задачи хотели, чтобы при нажатии кнопки Старт цикл стартовал,
а при нажатии кнопки Пауза приостанавливался.

Тогда зачем в коде при нажатии кнопки Старт поднимается флаг паузы,
а при нажатии кнопки Пауза этот флаг снимается?
Потом он так и проверяется задом наперёд, но задумка непонятна.


В конце кода вы зачем-то снимаете флаг старта, если кто-то нажал кнопку паузы.
Разве, у кнопки паузы должна быть функция отмены старта?
 
Изменено:

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,453
988
59
Марий-Эл
А куда делись фигурные скобки у функции loop?
И где функция setup?

Метод
butt1.isPress()
срабатывает не с первого раза, он не блокирующий. У вас цикл провернётся несколько раз, пока этот метод сработает.