diff --git a/data/index.html b/data/index.html
index c6f81ab..96ef84c 100644
--- a/data/index.html
+++ b/data/index.html
@@ -201,7 +201,23 @@
+
+
diff --git a/src/main.cpp b/src/main.cpp
index 40b1153..c0350f7 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -87,6 +87,27 @@ void ledBlink(int ms)
}
}
+void onButtonPress()
+{
+ ButtonAction action = static_cast(config.getUInt("button-action", DEFAULT_BUTTON_ACTION));
+ Serial.print("Button pressed, action: ");
+ Serial.println(action);
+
+ switch (action)
+ {
+ case ResetConfig:
+ config.begin("dmx", false);
+ config.clear();
+ config.end();
+ ESP.restart();
+ break;
+
+ case Restart:
+ ESP.restart();
+ break;
+ }
+}
+
void setup()
{
Serial.begin(9600);
@@ -122,6 +143,8 @@ void setup()
ledBlink(500);
+ attachInterrupt(PIN_BUTTON, onButtonPress, FALLING);
+
// wait for serial monitor
delay(5000);
Serial.println("Starting DMX-Interface...");
diff --git a/src/routes/config.cpp b/src/routes/config.cpp
index d586feb..edd9e54 100644
--- a/src/routes/config.cpp
+++ b/src/routes/config.cpp
@@ -70,6 +70,16 @@ Direction parseDirection(uint8_t direction)
throw ::std::invalid_argument("Invalid direction value: " + direction);
}
+ButtonAction parseButtonAction(uint8_t buttonAction)
+{
+ if (buttonAction > 0 || buttonAction < BUTTON_ACTION_SIZE)
+ {
+ return static_cast(buttonAction);
+ }
+
+ throw ::std::invalid_argument("Invalid value for button action: " + buttonAction);
+}
+
#pragma endregion
void onGetConfig(AsyncWebServerRequest *request)
@@ -93,6 +103,7 @@ void onGetConfig(AsyncWebServerRequest *request)
doc["universe-2"] = config.getUInt("universe-2", DEFAULT_UNIVERSE2);
doc["direction-2"] = config.getUInt("direction-2", DEFAULT_DIRECTION2);
doc["led-brightness"] = config.getUInt("led-brightness", DEFAULT_LED_BRIGHTNESS);
+ doc["button-action"] = config.getUInt("button-action", DEFAULT_BUTTON_ACTION);
config.end();
@@ -151,6 +162,9 @@ void onPutConfig(AsyncWebServerRequest *request, uint8_t *data, size_t len, size
config.putUInt("led-brightness", doc["led-brightness"]);
+ ButtonAction buttonAction = parseButtonAction(doc["button-action"].as());
+ config.putUInt("button-action", buttonAction);
+
config.end();
request->send(200);
diff --git a/src/routes/config.h b/src/routes/config.h
index bac228d..157292c 100644
--- a/src/routes/config.h
+++ b/src/routes/config.h
@@ -29,6 +29,14 @@ enum Direction
};
const uint8_t DIRECTION_SIZE = 2;
+enum ButtonAction
+{
+ None,
+ ResetConfig,
+ Restart
+};
+const uint8_t BUTTON_ACTION_SIZE = 3;
+
const Connection DEFAULT_CONNECTION = WiFiAP;
const IpMethod DEFAULT_IP_METHOD = DHCP;
extern String DEFAULT_SSID; // initialized in setup because it depends on the mac address
@@ -43,6 +51,7 @@ const uint8_t DEFAULT_UNIVERSE1 = 1;
const uint8_t DEFAULT_UNIVERSE2 = 2;
const uint8_t DEFAULT_LED_BRIGHTNESS = 25;
+const ButtonAction DEFAULT_BUTTON_ACTION = Restart;
void onGetConfig(AsyncWebServerRequest *request);