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

Обманули! Здесь while вообще можно выкинуть и все работает.

delay я для одного светодиода оставил, просто показать, что сначала делал так, а потом заменил на millis.

Так я уже пытался, не работает. Может что-то не так написал?

#define BTN1 4		// кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define BTN2 3      // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#include <Arduino.h>
#include "GyverButton.h"
GButton butt1(BTN1);
GButton butt2(BTN2);

unsigned long currentTime; // переменная времени
boolean ledState = 0; // переменная состояния светодиода

void setup() {
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
}



void loop() {
  butt1.tick();  // обязательная функция отработки. Должна постоянно опрашиваться
  butt2.tick();  

  if (butt1.isClick()) {    //при клике по 1 кнопке - вкл. функция  void Leds1()
    Leds1();
  }

  if (butt2.isClick()) {    //при клике по 2 кнопке - вкл. функция  void Leds2()   
   Leds2();
  }
}

void Leds1() {
 while(1){
  if (butt2.isStep()) {break;}
    else {
  if (millis() - currentTime > 100) { // проверяем, сколько прошло миллисекунд
 currentTime = millis();
 ledState = !ledState; // меняем состояние светодиода на противоположное
 digitalWrite(6, ledState); // включаем или выключаем светодиод
   }
  }
 }
}

void Leds2() {
 while(1){
  if (butt1.isStep()) {break;}
    else {
  if (millis() - currentTime > 100) { // проверяем, сколько прошло миллисекунд
 currentTime = millis();
 ledState = !ledState; // меняем состояние светодиода на противоположное
 digitalWrite(7, ledState); // включаем или выключаем светодиод
   }
  }
 }
}

Т.е. Ваш

код из первого сообщения

был выложен, чтобы запудрить нам мозги, на самом деле у Вас всё по-другому сделано?

Достойно! :slight_smile:

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

Да мы как-то и не напрягались :slight_smile:

Да я неправильно поставил вопрос, вернее вопрос то правильный он в названии темы. А “схема” и код, это уже дело наживное и не принципиальное.

Ну и клёво :slightly_smiling_face:

Мы это заметили :slight_smile:

Даааа, запутал всех ТС. Тут либо через миллис, либо через Гайвера… И это принципиальный выбор :slight_smile:

Уже начинаю жалеть, что влез в эту тему

О том , чтобы выкинуть while вам говорят с самого начала.

Работает, да не так. В чём сможете убедиться, немного освоив азы языка Си.

1 лайк

Что ж, прогрессируете. Это похвально.

Так все-таки while?
Нет, насчет прогресса - это я поторопился.

1 лайк

Сделал. Заработало. И наконец понял что while это не круто.
Всем спасибо.
П.с.: сорян за срач, вчера пиво пил. :beers:

2 лайка

Ну ты же понимаешь - что это всё равно «костыль»?
Понадобится как-то расширить функционал и можешь во все эти циклы так уткнуться…. ((

1 лайк