Hi, ich wollte anhand dieses Beispiel Codes über eine HTTP Seite einen kontinuierliches Ausgangssignal in form von einem Rechteck am Port 18 ein/ausschalten. Leider komme ich aus der while schleife nicht wieder raus sobald der client auf ausschalten(currentLine.endsWith("GET /L") klickt wenn zuvor eingeschaltet (currentLine.endsWith("GET /H") wurde ab Z.112. Danke für die Hilfe
Generell: Das ist kein Schönes Beispiel. OK um grob die Grundlagen zu sehen, aber das wars dann auch. Zum Erweitern maximal unglücklich. Erstes Problem: das Pinwackeln soll weitergehen, auch wenn der Webbrowser gerade nicht verbunden ist (das ist er die meiste Zeit nicht). Also muss der "digitalWrite&Delay"-Block Aus dem "if (client)" Block raus. Nächstes Problem: Das Pinwackeln darf den Webserver nicht blockieren. Also: Statt "while (flag)" nur ein "if (flag)", und das wiederholen der Sequenz erledigt die loop(). Drittes Problem: Dadurch sind deine Puls- und Pausenzeiten ungenau, "jitter". Viertes Problem: Nur ganz außen in der Loop reicht auch nicht, weil in der loop noch eine "while (client.connected())"-Schleife ist. Fünftes Problem: Es wird nur eine Connection gleichzeitig unterstützt usw. Lösungsideen (Keine Komplettlösung, versuch das selber zu erarbeiten und frag bei Bedarf nochmal nach, so lernst du mehr) -> Signal per Hardware erzeugen (PWM/Timer). Gibt evtl. auch eine Arduino-Lib dafür -> Signal in einem Timer-Interrupt erzeugen. Auch hier gibt's eine Lib. -> "echte" Webserver-Lib verwenden, die asynchron arbeitet
ESP32/Arduino unterstützt Threads. Solltest dich sowieso in das RTOS einarbeiten. Dann kannst du ganz einfach die Schleife mitsamt delay() in einen eigenen Thread auslagen. Während deine Schleife im delay() wartet, arbeitet der Webserver weiter.
Eigentlich sollte das kein Problem in Hardware sein, der ESP kann doch mit irgend einer Lib LEDs per PWM dimmen, das ist auch nichts weiter als ein Rechtecksignal. Vielleicht kann man das passend parametrisieren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.