Как создать цикл с условием прерывания выполнения? Выход из цикла

#define PERIOD1 20000                                   // Период в миллисекундах (Через сколько потухнет дисплей)
#define PERIOD2 100                                     // Период в миллисекундах (Обновление дисплея)

#include <LiquidCrystal.h>                              // Библиотека управления дисплеем
#include <microDS18B20.h>                               // Библиотека чтения температуры
#include <iarduino_RTC.h>                               // Библиотека работы с модулем часов
LiquidCrystal lcd (8, 9, 4, 5, 6, 7);                   // Пины экрана
iarduino_RTC clock(RTC_DS1302, 2, 4, 3);                // Пины подключения модуля часов (RST, Clock, Data)
MicroDS18B20 <A1> sensor;                               // Указание пина подключения сенсора влаги

int txt_1 = 0;                                          // Счётчик вывода текста "-<*GREENHOUSE*>-" и времени
int txt_2 = 0;                                          // Счётчик вывода меню или температуры и влажности
long menu_time = 0;                                     // Счётчик удержания меню
int c_time = 3000;                                      // Значение счётчика меню


uint32_t timer1;                                        // Переменная таймера 1 (Яркость экрана)
uint32_t timer2;                                        // Переменная таймера 2 (Обновление экрана)

byte menu_sel = 0;                                      // Счётчик пунктов меню
byte wvalue;                                            // Переменная влажности
byte gradus[8] = {B01100, B10010, B10010, B01100,       // Символ градуса
                  B00000, B00000, B00000, B00000};            
//---------------------------------------------------------------------------------------------------------------------------
void setup()
{
  lcd.clear();                                          // Очистка экрана
  analogWrite(10, 255);                                 // Установить максимальную яркость подсветки 
  lcd.begin(16, 2);                                     // Инициализируем LCD 16x2  
  lcd.createChar(0, gradus);                            // Переменная градусов
  clock.begin();                                        // Начало работы с модулем часов
//-----------------------(Только после замены контроллера или батарейки!!!)--------------------------------------------------
  delay(300);                                           // Ожидание инициализации модуля часов
//                |Сек|Мин|Час|День|Мес|Год)
//  clock.settime   (00, 04, 02,  12,  6, 23);          // Запись первоначального значения времени

//  Serial.begin(57600);                                        // Открытие порта всязи с компьютером (для отладки)                                    // Последовательность имеет значение!
}
//--------------------------------------ОСНОВНОЙ ЦИКЛ-------------------------------------------------------------------------------------
void loop()
 {
//---------------------------ЗАГОЛОВОК (ЧАСЫ, ТЕМПЕРАТУРА и ВЛАДНОСТЬ)--------------------------------------------------------------------
      clk();
      scrn();
//---------------------------------УМЕНЬШЕНИЕ ПОДСВЕТКИ ЭКРАНА----------------------------------------------------------------------------
   if (millis() - timer1 >= PERIOD1)                            // ищем разницу
      {
        analogWrite(10, 5);                                     // Установить минимальную яркость подсветки
        timer1 = millis();                                      // Сброс таймера подсветки
      }
//-----------------------------------ПРОВЕРКА НАЖАТИЯ КНОПОК------------------------------------------------------------------------------
   if (analogRead(A0) <= 900 && analogRead(A0) <= 1023)         // Проверка нажата ли какая нибудь кнопка
      {
        analogWrite(10, 255);                                   // Установить минимальную яркость подсветки
        timer1 = millis();                                      // Сброс таймера подсветки
      }

   if (analogRead(A0) >= 700 && analogRead(A0) <= 800)          // Проверка нажата ли кнопка SELECT
      {
        general_menu();                                         // Переход в меню настроек
      }
        if (millis() - timer1 >= PERIOD1)                            // ищем разницу
      {
        analogWrite(10, 255);                                     // Установить минимальную яркость подсветки
        timer1 = millis();                                      // Сброс таймера подсветки
      }
    
 }
 
//------------------------------------КОНЕЦ ОСНОВНОГО ЦИКЛА-------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------------------------------------------------------
//-----------------------------------------ПОДПРОГРАММЫ-----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------------------------------

//----------------------------------------ОСНОВНОЕ  МЕНЮ----------------------------------------------------------------------------------
void general_menu()
  {
    delay(300);
    lcd.clear();                                                  // Очистка экрана
    bool flag = 0;
    int menu_screen = 0;
    menu_time = 0;

    while (menu_time < c_time)
     {
       lcd.setCursor(0,0);
       lcd.print ("  MENU  SELECT  ");                            // Вывести текст
       lcd.setCursor(0,1);                                        // Установить курсор на вторую строку в нулевую позицию
       lcd.print ("< LEFT - RIGHT >");                            // Вывести текст

       menu_time++;
          
         if (analogRead(A0) >= 0 && analogRead(A0) <= 100)        // Если значение кнопки меньше 100 -> "Right Button"
            {
              menu_list();                                        // Воход в меню
              flag = 0;
              delay(300);
            }

          else if (analogRead(A0) >= 700 && analogRead(A0) <= 900)
            {
              flag = 1;
              delay(300);
            }

          if (flag == 1)
            {
              lcd.clear();
              timer1 = millis();
              timer2 = millis();
              analogWrite(10, 255);                                   // Установить минимальную яркость подсветки
              return;
            }
       }
     lcd.clear();  
  }

//---------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------

void menu_list()
  {
    int menu_time_2 = 0;
    lcd.setCursor(0,0);                                               // Установить курсор на вторую строку
    lcd.print ("  WATER ON/OFF  ");
    lcd.setCursor(0,1);
    lcd.print ("  -> OFF        ");

    while (menu_time_2 < 24767)
       {
         menu_time_2 = menu_time_2 + 1;
         delay(1);
       }     
         timer1 = millis();
         timer2 = millis();
//         delay(300);
         return;
  }
/*
LABLE_1:  //------------------------------------------------------------------------------------------------------------------

    if (analogRead(A0) >= 700 && analogRead(A0) <= 800)               // Нажатие кнопки SELECT
       {
         return;                                                      // Выходим из функции
       }
    else
       {
         delay(100);
         goto LABLE_1;
       }
  }

*/

//----------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------ЧТЕНИЕ ТЕМПЕРАТУРЫ И ВЛАЖНОСТИ-------------------------------------------------------------------------
void scrn()
    {
      sensor.requestTemp();
      lcd.setCursor(0,1);                                               // Установить курсор на вторую строку
      lcd.print ("t");
      lcd.write((byte)(0));
      lcd.print ("C");
      lcd.print(char(126));  
      lcd.print (sensor.getTemp());                                     // Вывод температуры
      lcd.setCursor(8,1);
      lcd.print ("  w"); lcd.print(char(126));
      wvalue = map(analogRead(A2), 370, 1020, 100, 0);                  // Чтение влажности
    
   if (millis() - timer2 >= PERIOD2)                                    // Задержка обновления экрана
      {
        lcd.setCursor(12,1); lcd.print (wvalue); lcd.print ("% ");      // Вывод влажности
        timer2 = millis();                                              // сброс таймера
      }
    }
//------------------------------------------ЗАГОЛОВОК И ЧАСЫ----------------------------------------------------------------
void clk()
  {
   if (txt_1 <= 400)                             
    {
      lcd.setCursor(0,0);
      lcd.print ("-<*GREENHOUSE*>-");
      txt_1 = (txt_1 + 1);
    }
   else
    {
      lcd.setCursor(0,0);                          // Установить курсор (Первая строка, нулевой символ)
      lcd.print ("TIME: ");
      lcd.print(clock.gettime("H:i D"));           // Выводятся только часы, минуты, день. Остальное не нужно.
      lcd.print ("     ");
      txt_2 = (txt_2 + 1);
    }
   if (txt_2 >= 600)                             
    {
      txt_1 = 0;
      txt_2 = 0;
    }
  }
/*---------------------------------------------------------------------------------------------------------------------------
//        Serial.println(analogRead (A0));
//        Serial.println(" ");
*/

Так Вас устроит? Или Вы злой воспитатель в садике?
Я задавал всего один вопрос. Почему один и тот же код в Arduino IDE записывает данные в RTC модуль, а в VS Code нет. Всё. Вопрос то простой. Вы меня начали меня морали учить и носом тыкать в то, что к теме вопроса не относится. Зачем?

Какая строка по Вашему коду в сообщении №21 это должна делать?

Это переменная датчика влажности. И датчик работает.

В первом разве не ошибка ?

Да ошибка. Это я видел. Но это к записи времени в RTC совершенно отношения не имеет!
Поэтому я изначально написал часть кода ответственного за время. Всё.

Перечитайте внимательно вопрос в сообщении №23. Вы не на тот вопрос пытаетесь отвечать.
Какая строка кода должна записывать начальные данные в RTC?

Так и только так нужно выкладывать код. В это вас будут тыкать носом на любом форуме, связанном с программированием.

Я всё прекрасно понял. Запись производится командой clock.settime. Я её просто закомментировал что бы каждый раз время не сбрасывалось.
Дело то в том, что в Arduino IDE всё записывается (если раскоментировать), а вот в VS Code нет (компиляция и запись).
В этом и был мой вопрос. С этим вопросом меня в детский сад и отправили…

Не надо врать, туда вас отправили не за это

Простите, я просто ищу помощи! Почему при компиляции и заливке через Arduino IDE всё работает, а тоже самое в VS Code нет.

Может у VS Code несварение от библиотек iarduino …
В примере к библиотеке нет паузы между begin и settime (не думаю что это критично, но вдруг …)
Нужно сравнивать листинг из VS Code и Arduino IDE …

Попробую проверить.

Существует ли альтернативная библиотека iarduino_RTC?
Сейчас использую модуль DS1302. Но есть другой. DS1307. Но я так понимаю и библиотеку нужно искать к нему. Так?

Так Вы теперь поняли, почему выложенный Вами в сообщении №21 код не производит запись в RTC, или не поняли?

Для того, чтобы хоть что-то можно было сказать, нужно выложить именно тот код, который работает в Arduino IDE и не работает в VSC.

Сказали выкладывать код, то выкладывайте. А то заставят еще выкладывать код Arduino IDE которая работает и код VSC который не работает. Здесь порядки как в игровом КАЗИНО.

@qwone1 , некро?)))

1302 воббще так себе железка