From 33489e7a91e0ccf40ac1a1fdb4cdbe060d610b7d Mon Sep 17 00:00:00 2001 From: Eric Duminil <eric.duminil@gmail.com> Date: Sun, 9 May 2021 16:23:54 +0200 Subject: [PATCH] One effect while config, one while connect --- ampel-firmware/led_effects.cpp | 9 +++++++++ ampel-firmware/led_effects.h | 1 + ampel-firmware/src/lib/WiFiManager/WiFiManager.cpp | 13 +++++++++++-- ampel-firmware/src/lib/WiFiManager/WiFiManager.h | 4 ++++ ampel-firmware/wifi_util.cpp | 7 ++++++- 5 files changed, 31 insertions(+), 3 deletions(-) diff --git a/ampel-firmware/led_effects.cpp b/ampel-firmware/led_effects.cpp index f0b672c..136088d 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 a910d30..7ce310a 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 8a42e3d..d258686 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 f2fff25..30b8a33 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 be34e99..d38615d 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); } } -- GitLab