Как кнопкой прервать бесконечный цикл While?

Так и написано. Третье нажатие - выключение обоих функций.

Вот, немного “покрасивше” то же самое написал

Спойлер
void checkBTN()
{
  butt1.tick();
    if (butt1.isClick())
    { //при клике по 1 кнопке переключаются/выключаются по очереди функции Leds1() и Leds2()
      btnStat++;
      if (btnStat > 2)
        btnStat = 0;
    } 
}


void Leds1() {
  static unsigned long currentTime1; // переменная времени
  static boolean ledState1 = 0; // переменная состояния светодиода
 
  while (1) {
   checkBTN();
    if (btnStat == 1)
    {

      if (millis() - currentTime1 > 150) { // проверяем, сколько прошло миллисекунд
        currentTime1 = millis();
        ledState1 = !ledState1; // меняем состояние светодиода на противоположное
        digitalWrite(7, ledState1); // включаем или выключаем светодиод

      }
    }
    else {
      digitalWrite(7, LOW);
      return;
    }


  }
}

void Leds2() {
  static unsigned long currentTime2; // переменная времени
  static boolean ledState2 = 0; // переменная состояния светодиода

  while (1) {
    checkBTN();
    if (btnStat == 2)
    {
      if (millis() - currentTime2 > 300) { // проверяем, сколько прошло миллисекунд
        currentTime2 = millis();
        ledState2 = !ledState2; // меняем состояние светодиода на противоположное
        digitalWrite(6, ledState2); // включаем или выключаем светодиод
      }
    }
    else
    {
      digitalWrite(6, LOW);
      return;
    }

  }
}
1 лайк

Я добавил еще 2, чтобы все 4 светодиода задействовать и у меня при 5-ом нажатии на кнопку все отключается, а при очередном нажатии снова начинается с 1-ого.
Я так понял, что здесь собака зарыта:

btnStat++;
if (btnStat > 4)
btnStat = 0;

Спасибо!

Нет там никакой собаки :smiley:
Как написано - так и работает.

1 лайк

И в соответствующем условии в каждой функции Leds №x

Для вас может и нет… А для меня каждый ответ, это новые вопросы. Например, что такое btnStat (наверное, что-то из библиотеки для работы одной кнопкой) и почему if работает без фигурных скобок (наверное потому что только одна строка btnStat = 0;). Видите…
Прошу прощения за малограмотность :sweat_smile:

Там рядом ещё много можно почитать и посмотреть примеры и про другие операторы и функции.

1 лайк

Просто глобальная переменная, надо шапке объявить. btnStat это я так сокращённо написал “статус кнопки”.
Называйте сами, как хотите.

стр.1 из #38

На все эти вопросы (и не только!) можно получить ответы в любом учебнике по Си и/или Си++.

http://elibrary.bsu.edu.az/files/azad/363.pdf

1 лайк

Спасибо блин… :zipper_mouth_face:

Пожалуйста оладик :smiley:

Не прощаем!

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

Не согласен с вами. Чтоб прочитать учебник (его нужно ведь не просто прочитать) не достаточно просто не быть ленивой задницей. А про то что “все должны” - не было такого, и я так не считаю. Кто хотел помочь - попытались, другие лучше бы просто проигнорировали. Но как ВАМ вести себя на ВАШЕМ форуме вам решать. Я вообще не в обиде, даже благодарен отдельным людям. Лайки поставил.

Когда человек задает вопросы типа “а почему деревья качаются, когда ветер дует?” - это его характеризует либо как малолетнего почемучку, либо не слишком далекого человека :wink:

Боюсь, что это исключительно Ваша проблема.

Если Вы не знаете когда и как if можно использовать без фигурных скобок, значит Вы не открывали ни одного учебника а сразу полезли вопросы задавать. Ленивая задница и есть.

А Вы как бы такого человека назвали?

Не слишком удачное сравнение. Я тоже люблю аналогии, которые ложны, но все же. Представьте, вы приехали в другую страну, скажем в Мадагаскар, неважно, просто как турист, не жить, не для работы. Хотите купить на местном рынке сувениры для друзей. И спрашиваете у местного русскоязычного (попался вам такой) как на местном языке сказать “хочу купить” и “снизь цену до”, ну чтобы аборигены приняли за более менее прошаренного и не развели. А указанный русскоязычный говорит: смотри вон там ларек, купи себе разговорник, а лучше вон в том магазине учебник и словарь и поучи. Ты такой: чего?! чувак, мне только пара фраз нужно, зачем мне так заморачиваться? А он такой: у нас так не принято, иначе ты так ничему и не научишься. И ты такой: чувак, да скажи не выпендривайся! А он: у нас так не принято, хочешь на халяву, не прокатит… Найми меня гидом-переводчиком если не хочешь своей головой думать.
Вы мне помогли здесь и со светодиодной лентой. Спасибо, от всей души. За пинок в правильном направлении, что тоже ценно.

1 лайк

На вашем месте, назвал бы ленивой задницей.

Аналогия неверная.
Пробелов у Вас далеко не “пара фраз”, так что Вы вынуждены просить не ответ на короткий вопрос, а целый цикл лекций по языку. Сами же пишете:

Т.е. не имея общего представления, Вы неспособны понять ответы на Ваши вопросы. Вам не хватает общих знаний по языку. И в этом случае послать Вас за разговорником - единственное правильное решение.

1 лайк

Т. е. просто перекладываете свою проблему на постороннего человека, которому она вообще не нужна. Круто, чо )))

И да, у нас здесь не пользуются успехом гости, которые прямо заявляют, что им это не нужно, им бы вот по быстрому код получить, а самим им учиться недосуг и ваще по жизни не нать :wink:

4 лайка

По вопросу темы:

while(1){
если (кнопка нажата) {break;}
иначе {...}
}

Нет, это не по вопросу темы. У ТС там в {...} присутствуют delay(100500);.