
  void DbgMsg(const String& Msg, bool ln=1) { 
    if (RegSetup.dbg) { 
        static uint32_t t = millis();
        Serial.print("Debug (dT:" + String(millis()-t) + "):" + Msg);
        if (ln) Serial.println();
        t = millis();
    }
  }
  void SerialMsg(const String& Msg, bool ln=1) {
      if (ln) Serial.println(Msg); else Serial.print(Msg);
  }
  void verbose_print_reset_reason() {
    esp_reset_reason_t reason = esp_reset_reason();
    
    if (reason == ESP_RST_UNKNOWN) {
      return; // Неизвестная причина - ничего не выводим
    }
    
    String reset_info = "🔄 Причина перезагрузки: ";
    
    switch (reason) {
      case ESP_RST_POWERON:    reset_info = "🔌 " + reset_info + "включение питания"; break;
      case ESP_RST_EXT:        reset_info = "🔘 " + reset_info + "кнопка RESET"; break;
      case ESP_RST_SW:         reset_info = "💻 " + reset_info + "программный сброс"; break;
      case ESP_RST_PANIC:      reset_info = "💥 " + reset_info + "авария (Guru Meditation)"; break;
      case ESP_RST_INT_WDT:    reset_info = "⏰ " + reset_info + "сторожевой таймер прерываний"; break;
      case ESP_RST_TASK_WDT:   reset_info = "⏰ " + reset_info + "сторожевой таймер задачи"; break;
      case ESP_RST_WDT:        reset_info = "⏰ " + reset_info + "сторожевой таймер"; break;
      case ESP_RST_DEEPSLEEP:  reset_info = "😴 " + reset_info + "пробуждение из глубокого сна"; break;
      case ESP_RST_BROWNOUT:   reset_info = "⚡ " + reset_info + "проблема с питанием (brownout)"; break;
      default:                 reset_info = "❓ " + reset_info + "неизвестно: " + String(reason);
    }
    
    SerialMsg(reset_info, 1);
  }