Остановка цикла

Slovyanin

✩✩✩✩✩✩✩
17 Фев 2020
13
0
В общем использую библиотеку GyverButton для обработки нажатий.

В loop() есть такой код
C++:
butt1.tick();
switch (butt1.getClicks()) {
      case 1:
        function1();
        break;
      case 2:
        function2();
        break;
      case 3:
        function3();
        break;
    }

Каждая из функций имеет такой вид (меняется только число, которое выводится)
C++:
void function1() {
  for (;;) {
    Serial.println("1");
    delay(1000);
  }
}

Как мне сделать так, чтобы из каждого такого цикла можно было выйти например по тройному нажатию?
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
741
158
использовать условие if и в конце написать return;
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
741
158
можно еще так сделать цикл с проверкой условия

C++:
while (client.connected()) {
  String line = client.readStringUntil('\n');
  if (line == "\r") {
    Serial.println("headers received");
    break;
  }
}
 

Slovyanin

✩✩✩✩✩✩✩
17 Фев 2020
13
0
@kalobyte, Делал вот так, не получилось, мне кажется и Ваш пример не заработает
C++:
for (;;) {
  if (butt1.hasClicks()) break;
  function1();
}
 

Старик Похабыч

★★★★★✩✩
14 Авг 2019
1,742
429
Москва
надо аппаратное прерывание по нажатию использовать, и когда нажатий будет 3 делать break
Т.к. цикл бесконечный, то не будет обработки butt1.tick(); и вообще все должно зависнуть на мертво и кроме аппаратных прерываний не вывести никак.
А зачем такой цикл нужен ?
делвй так
do
{
butt1.tick();
}while (!butt1.isClick);
 

Slovyanin

✩✩✩✩✩✩✩
17 Фев 2020
13
0
@Старик Похабыч, Если использовать цикл, который Вы приложили, то получается будет исполняться мой код до тех пор, пока я не нажму кнопку?
То есть я могу заменить свою функцию на это
C++:
do
{
  Serial.println("1");
  delay(1000);
}while (!butt1.isClick);
 

Старик Похабыч

★★★★★✩✩
14 Авг 2019
1,742
429
Москва
нет, ты не внимательно посмотрел. внутри цикла обязательно должен быть обработчик событий нужной кнопки - butt1.tick();
и вообще это надо в разделе программирование обсуждать