From ade4378653c2b77b4f4645b4312c39537827b69a Mon Sep 17 00:00:00 2001
From: Eric Duminil <eric.duminil@gmail.com>
Date: Sun, 13 Feb 2022 09:26:17 +0100
Subject: [PATCH] Cool. Rainbow wheel is back!

---
 ampel-firmware/ampel-firmware.h   |  6 +++
 ampel-firmware/ampel-firmware.ino | 71 +++++++++++++++----------------
 ampel-firmware/wifi_util.cpp      |  8 ++++
 ampel-firmware/wifi_util.h        |  1 +
 4 files changed, 49 insertions(+), 37 deletions(-)

diff --git a/ampel-firmware/ampel-firmware.h b/ampel-firmware/ampel-firmware.h
index 06ccf22..e60b3a7 100644
--- a/ampel-firmware/ampel-firmware.h
+++ b/ampel-firmware/ampel-firmware.h
@@ -21,4 +21,10 @@
 #include "co2_sensor.h"
 #include "led_effects.h"
 
+void wifiConnected();
+void wifiFailed();
+void keepServicesAlive();
+void checkFlashButton();
+void checkSerialInput();
+
 #endif
diff --git a/ampel-firmware/ampel-firmware.ino b/ampel-firmware/ampel-firmware.ino
index 1591903..8b4bb2a 100644
--- a/ampel-firmware/ampel-firmware.ino
+++ b/ampel-firmware/ampel-firmware.ino
@@ -56,36 +56,6 @@
  * and define your credentials and parameters in 'config.h'.
  */
 
-//void failedConnection() {
-//  Serial.println("Seriously. What???");
-//  led_effects::showKITTWheel(color::red);
-//}
-//
-void wifiConnected() {
-  led_effects::showKITTWheel(color::green);
-  Serial.println();
-  Serial.print(F("WiFi - Connected! IP address: "));
-  IPAddress address = WiFi.localIP();
-  snprintf(wifi::local_ip, sizeof(wifi::local_ip), "%d.%d.%d.%d", address[0], address[1], address[2], address[3]);
-  Serial.println(wifi::local_ip);
-
-  ntp::initialize();
-
-  if (config::mqtt_active()) {
-    mqtt::initialize(ampel.sensorId);
-  }
-
-  Serial.print(F("You can access this sensor via http://"));
-  Serial.print(ampel.sensorId);
-  Serial.print(F(".local (might be unstable) or http://"));
-  Serial.println(WiFi.localIP());
-}
-
-void wifiFailed() {
-  Serial.print(F("WiFi - Could not connect to "));
-  Serial.println(config::selected_ssid()); //TODO: Rename
-  led_effects::showKITTWheel(color::red);
-}
 /*****************************************************************
  * Setup                                                         *
  *****************************************************************/
@@ -122,6 +92,7 @@ void setup() {
   if (config::wifi_active) {
     wifi::defineCommands();
     web_server::definePages();
+    wifi::tryConnection();
   }
 
 #if defined(ESP32)
@@ -131,13 +102,6 @@ void setup() {
 #endif
 }
 
-/*****************************************************************
- * Helper functions                                              *
- *****************************************************************/
-void keepServicesAlive();
-void checkFlashButton();
-void checkSerialInput();
-
 /*****************************************************************
  * Main loop                                                     *
  *****************************************************************/
@@ -189,6 +153,39 @@ void loop() {
   }
 }
 
+/*****************************************************************
+ * Callbacks                                                     *
+ *****************************************************************/
+void wifiConnected() {
+  led_effects::showKITTWheel(color::green);
+  Serial.println();
+  Serial.print(F("WiFi - Connected! IP address: "));
+  IPAddress address = WiFi.localIP();
+  snprintf(wifi::local_ip, sizeof(wifi::local_ip), "%d.%d.%d.%d", address[0], address[1], address[2], address[3]);
+  Serial.println(wifi::local_ip);
+
+  ntp::initialize();
+
+  if (config::mqtt_active()) {
+    mqtt::initialize(ampel.sensorId);
+  }
+
+  Serial.print(F("You can access this sensor via http://"));
+  Serial.print(ampel.sensorId);
+  Serial.print(F(".local (might be unstable) or http://"));
+  Serial.println(WiFi.localIP());
+}
+
+void wifiFailed() {
+  Serial.print(F("WiFi - Could not connect to "));
+  Serial.println(config::selected_ssid()); //TODO: Rename
+  led_effects::showKITTWheel(color::red);
+}
+
+/*****************************************************************
+ * Helper functions                                              *
+ *****************************************************************/
+
 void checkSerialInput() {
   while (Serial.available() > 0) {
     sensor_console::processSerialInput(Serial.read());
diff --git a/ampel-firmware/wifi_util.cpp b/ampel-firmware/wifi_util.cpp
index ddf12a1..5dcacfb 100644
--- a/ampel-firmware/wifi_util.cpp
+++ b/ampel-firmware/wifi_util.cpp
@@ -19,6 +19,14 @@ namespace wifi {
     return WiFi.status() == WL_CONNECTED;
   }
 
+  void tryConnection() {
+    for (int i = 0; i <= 30 && !connected(); i++) {
+      led_effects::showRainbowWheel();
+      web_config::update();
+      Serial.print(".");
+    }
+  }
+
   void scanNetworks() {
     Serial.println();
     Serial.println(F("WiFi - Scanning..."));
diff --git a/ampel-firmware/wifi_util.h b/ampel-firmware/wifi_util.h
index cfe47bb..5b9f719 100644
--- a/ampel-firmware/wifi_util.h
+++ b/ampel-firmware/wifi_util.h
@@ -5,6 +5,7 @@ namespace wifi {
   extern char local_ip[16];
   void defineCommands();
   bool connected();
+  void tryConnection();
 }
 
 #endif
-- 
GitLab