diff --git a/ampel-firmware/led_effects.cpp b/ampel-firmware/led_effects.cpp index f0b672c9d0c76e1cac6916d94783e85577f387fd..136088dead0e00d6e2db6a3a09889b2f5cfae4b9 100644 --- a/ampel-firmware/led_effects.cpp +++ b/ampel-firmware/led_effects.cpp @@ -210,6 +210,15 @@ namespace led_effects { } } + void greenAlert() { + static uint8_t i; + i = (i + 1) % 10; + pixels.setBrightness(static_cast<int>(config::max_brightness * (1 - i * 0.1))); + delay(50); + pixels.fill(color::green); + pixels.show(); + } + /** * Displays a complete blue circle, and starts removing LEDs one by one. Returns the number of remaining LEDs. * Can be used for calibration, e.g. when countdown is 0. Does not work in night mode. diff --git a/ampel-firmware/led_effects.h b/ampel-firmware/led_effects.h index a910d307f7c6294db889e704f745c3777136d19b..7ce310a5f50593ea603e844564f18a0c4fffd9e6 100644 --- a/ampel-firmware/led_effects.h +++ b/ampel-firmware/led_effects.h @@ -26,6 +26,7 @@ namespace led_effects { void setupRing(); void redAlert(); + void greenAlert(); int countdownToZero(); void showWaitingLED(uint32_t color); void showKITTWheel(uint32_t color, uint16_t duration_s = 2); diff --git a/ampel-firmware/src/lib/WiFiManager/WiFiManager.cpp b/ampel-firmware/src/lib/WiFiManager/WiFiManager.cpp index 8a42e3d14453f09662e53720c14831aeccbefce7..d258686c29a510453d7c379d94d17415b27177d9 100644 --- a/ampel-firmware/src/lib/WiFiManager/WiFiManager.cpp +++ b/ampel-firmware/src/lib/WiFiManager/WiFiManager.cpp @@ -785,7 +785,7 @@ uint8_t WiFiManager::connectWifi(String ssid, String pass) { // connect using saved ssid if there is one if (WiFi_hasAutoConnect()) { wifiConnectDefault(); - connRes = waitForConnectResult(); + connRes = waitForConnectResult(_saveTimeout); } else { DEBUG_WM(F("No wifi save required, skipping")); @@ -927,7 +927,11 @@ uint8_t WiFiManager::waitForConnectResult(uint16_t timeout) { return status; } DEBUG_WM (DEBUG_VERBOSE,F(".")); - delay(100); + if ( _waiting_for_connection_callback == NULL){ + delay(100); + } else { + _waiting_for_connection_callback(); + } } return status; } @@ -2207,6 +2211,11 @@ void WiFiManager::setWaitingForClientCallback( std::function<void()> func ) { _waiting_for_client_callback = func; } +// CUSTOM for Ampel +void WiFiManager::setWaitingForConnectionCallback( std::function<void()> func ) { + _waiting_for_connection_callback = func; +} + /** * set custom head html * custom element will be added to head, eg. new style tag etc. diff --git a/ampel-firmware/src/lib/WiFiManager/WiFiManager.h b/ampel-firmware/src/lib/WiFiManager/WiFiManager.h index f2fff25f5ce3718fcaee05204bfd135169f3efc2..30b8a33f3749ff3b62e7e3b8bec325eca08d7601 100644 --- a/ampel-firmware/src/lib/WiFiManager/WiFiManager.h +++ b/ampel-firmware/src/lib/WiFiManager/WiFiManager.h @@ -219,6 +219,9 @@ class WiFiManager //called while waiting for client to connect to config. Used for LEDs void setWaitingForClientCallback( std::function<void()> func ); + //called while waiting for ESP to connect. Used for LEDs + void setWaitingForConnectionCallback( std::function<void()> func ); + //sets timeout before AP,webserver loop ends and exits even if there has been no setup. //useful for devices that failed to connect at some point and got stuck in a webserver loop @@ -604,6 +607,7 @@ class WiFiManager std::function<void()> _saveparamscallback; std::function<void()> _resetcallback; std::function<void()> _waiting_for_client_callback; + std::function<void()> _waiting_for_connection_callback; template <class T> auto optionalIPFromString(T *obj, const char *s) -> decltype( obj->fromString(s) ) { diff --git a/ampel-firmware/wifi_util.cpp b/ampel-firmware/wifi_util.cpp index be34e998a7726329afa4fd5a1912fbfa8d43af18..d38615dd394a5d3660d29a790d6181a402ffac5a 100644 --- a/ampel-firmware/wifi_util.cpp +++ b/ampel-firmware/wifi_util.cpp @@ -55,7 +55,7 @@ namespace wifi { // }); // wifiManager.setWaitingForClientCallback([](){ - led_effects::showRainbowWheel(50); // Shouldn't last too long, web server needs to be able to answer. + led_effects::greenAlert(); }); // // wifiManager.setWebServerCallback([]() { @@ -69,7 +69,12 @@ namespace wifi { // wifiManager.setSaveConfigCallback([]() { // led_effects::showKITTWheel(color::magenta); // }); + + wifiManager.setWaitingForConnectionCallback([](){ + led_effects::showRainbowWheel(100); + }); // + wifiManager.setSaveConnectTimeout(WIFI_TIMEOUT); wifiManager.autoConnect(hostname); } }