diff --git a/Software/MC_Code/Main-Code _WemosD1mini/include/learn.h b/Software/MC_Code/Main-Code _WemosD1mini/include/learn.h index 7a0d2a1..ebeb4b5 100644 --- a/Software/MC_Code/Main-Code _WemosD1mini/include/learn.h +++ b/Software/MC_Code/Main-Code _WemosD1mini/include/learn.h @@ -2,5 +2,6 @@ #define LEARN_H #include -void startLearningSession(const String &name, int duration, int breaktime); +void runNewLearntime(const String &name, int duration, int breaktime); +const bool isLearning; #endif \ No newline at end of file diff --git a/Software/MC_Code/Main-Code _WemosD1mini/src/learn.cpp b/Software/MC_Code/Main-Code _WemosD1mini/src/learn.cpp index 82c9038..edeaf40 100644 --- a/Software/MC_Code/Main-Code _WemosD1mini/src/learn.cpp +++ b/Software/MC_Code/Main-Code _WemosD1mini/src/learn.cpp @@ -1,9 +1,62 @@ // Make functions to learn. E.g. the LED management during learning times, starting, pausing, stopping, etc. #include +#include -void startLearningSession(const String &name, int duration, int breaktime) { - Serial.println("Lernsession gestartet für: " + name); - Serial.println("Dauer: " + String(duration) + " Minuten"); - Serial.println("Pausenzeit: " + String(breaktime) + " Minuten"); - // Hier können weitere Aktionen hinzugefügt werden, z.B. LED steuerung oder timer keine Ahnung wie ihr das machen wollt +bool isLearning = false; + +class Learntime { + public: + Learntime(const String &name, const std::vector &durations) + : name(name), durations(durations) {} + + String getName() const { return name; } + const std::vector& getDurations() const { return durations; } + + private: + String name; + std::vector durations; +}; + + +void runLearntime(const Learntime <) { + Serial.println("Starte Lernprogramm: " + lt.getName()); + + const std::vector &durs = lt.getDurations(); + + for (size_t i = 0; i < durs.size(); i++) { + int mins = durs[i]; + bool isBreak = (i % 2 == 1); + + if (isBreak) { + Serial.println("Pause: " + String(mins) + " Minuten"); + } else { + Serial.println("Lernen: " + String(mins) + " Minuten"); + } + + unsigned long interval = mins * 60000UL; + unsigned long start = millis(); + + while (millis() - start < interval) { + // Hier kommt LED-Steuerung, Button-Check, Webserver-Refresh, was auch immer + // Aber bitte *keine* busy-waits . + } + } + + Serial.println("Learntime beendet."); +} + +Learntime createLearntime(const String &name, int duration, int breaktime) { + std::vector durations; + for (int i = 0; i < 4; i++) { // 4 Lernphasen + durations.push_back(duration); + if (i < 3) { // Pause nach jeder Lernphase außer der letzten + durations.push_back(breaktime); + } + } + return Learntime(name, durations); +} + +void runNewLearntime(const String &name, int duration, int breaktime) { + Learntime lt = createLearntime(name, duration, breaktime); + runLearntime(lt); } diff --git a/Software/MC_Code/Main-Code _WemosD1mini/src/network.cpp b/Software/MC_Code/Main-Code _WemosD1mini/src/network.cpp index 052f2d8..e2082a9 100644 --- a/Software/MC_Code/Main-Code _WemosD1mini/src/network.cpp +++ b/Software/MC_Code/Main-Code _WemosD1mini/src/network.cpp @@ -16,7 +16,7 @@ extern void writeWiFiCredentials(const String &ssid, const String &password); extern String readSSID(); extern String readPassword(); extern void saveLearntime(String name, String duration, String breaktime); -extern void startLearningSession(const String &name, int duration, int breaktime); +extern void runNewLearntime(const String &name, int duration, int breaktime); //* WLAN Verbindung bool tryConnectToWiFi(String ssid, String password) { @@ -197,15 +197,20 @@ void setupInterfaceServer(ESP8266WebServer &server) { }); server.on("/start_learntime", HTTP_GET, [&server]() { // Read parameters from URL query string + if (isLearning) { + server.send(200, "text/html", "

Ein Lernprogramm läuft bereits. Bitte abbrechen.

"); + return; + } String name = server.arg("name"); String duration = server.arg("duration"); String breaktime = server.arg("breaktime"); Serial.println("Start Learntime requested"); - startLearningSession(name, duration.toInt(), breaktime.toInt()); + runNewLearntime(name, duration.toInt(), breaktime.toInt()); server.sendHeader("Location", "/"); server.send(303); }); -} \ No newline at end of file +} +// divide this file into more1S \ No newline at end of file