ich habe einen Arduino Mega mit einem Ethernetshield auf dem ich einen kleinen Webserver laufen habe, mit dem ich z.B. Ausgang 31-41 schalten. Um es für den Anfang etwas einfacher zu machen, schalte ich aktuell per Webserver nur den Pin13, also die Onboard LED an und aus.
Soweit so gut. Webserver läuft und die LED lässt sich per Webbrowser schalten.
Ich möchte aber nun die gleiche LED außerdem noch über einen analogen (oder von mir aus auch digitalen) Input an und ausschalten.
An dieser Stelle fehlt mir nun die Idee, wie man so etwas grundsätzlich angeht. Welche Funktionen machen da Sinn und wie kann man dieses Problem grundsätzlich Lösen?
Hat dazu vielleicht der ein oder andere einen Ansatz oder eine Idee?
Du kannst die LEd in diesem Fall nicht gezielt mit dem Digitalpin an-oder ausschalten, sondern nur den jeweiligen Zustand wechseln lassen.
Dazu solltest du zuerst eine Routine schreiben, die bei (debounced) Tasterdruck den Zustand der LED toggelt. Dann setzt du einen neuen Button auf die Weboberfläche, und wenn der gedrückt wird, machst du das gleiche.
Die Buttons für an- und ausschalten kannst du lassen, damit kannst du die LED gezielt schalten. Idealerweise sollte der Zustand der LED beim Auffrischen der Webseite angezeigt werden. Auffrischen mit Button über den HTML Server realisieren, weil wenn du im Browser RELOAD drückst, wird das ausgeführt, was dort in der Adresszeile steht. Und das kann ein Ein- oder Ausschaltbefehl sein.
Auch kannst du je nach Zustand der LED nur die eine oder andere Schaltfläche auf der Webseite zeigen. Z.B. LED ist an, zeigst du nur den Button AUS mit gelbem Hintergrund, ist die LED aus, zeigst du nur den Button AN mit dunkelgrauem Hintergrund.
An eine Lösung per Javascript oder PHP hatte ich auch schon gedacht, jedoch verworfen, da ich erst einmal einen schnellen Ansatz für eine grundsätzliche Lösung haben wollte.
Das Toggeln hatte ich auch erst im Hinterkopf, hatte dann aber versucht einen Weg über das Auslesen des Status des OutputPins zu finden... leider ohne Erfolg...
Der Ansatz über das Toggeln hört sich auf jeden Fall sehr vielversprechend an. Ich werde das gleich heute Abend mal ausprobieren und mal schauen, wo da die reise so hingehen könnte...
Hat nichts mit dem Refresh zu tun, bin aber erstaunt, wie wenig XML vom Arduino und XSLT für das Layout verwendet wird, ist zumindest mein Eindruck. Hätte ich an dieser Stelle für die Lösung erachtet. Theoretisch zumindest würde das den Arduino entlasten.
Digitalpins (Ausgänge) auslesen geht ohne Probleme.
Und wie gesagt, wenn die Seite ohne "Befehlsparameter" refresht wird, lassen sich auch die Zustände aktualisiert darstellen, und davon abhängig natürlich dann auch die gewünschten Buttons. Weil wenn eine LED schon leuchtet, braucht man ja kein "EIN" Button.
Im Anhang mal eine prov. Seite wo sowas verwirklicht ist. Der Hintergrund zeigt den Status an.
Sowas ähnliches habe ich auch kürzlich gemacht, für die Steuerung der 5 Rollläden in meinem WE-Haus. Also zum "Toggeln" nimmt man nicht den Out-Pin direkt, sondern quasi als Spiegelbild eine Variable intern. Die kann in jedem Loop erneut ausgegeben und auch zur Darstellung verwendet werden.
Ich habe rel. viel mit CSS und SVG-Grafik gemacht (kann sogar blinken), alles schön per F() ins ROM verlagert, um RAM zu sparen. Bei SVG habe ich die sich wiederholenden XML-Haeder nur einmal gespeichert, die werden beim HTTP-Abruf on-the-fly zusammengesetzt ...
Ich habe mal eine Testversion angehangen, vlt. kannst du mit dem einen oder anderen Code-Schnipsel was anfangen oder mir Verbesserungsvorschläge machen.
Ach ja, bei mir läuft das Ganze auf dem UNO. Und mit dem Fummeln am Pin 13 wäre ich in dem Falle vorsichtig, ich glaube, der wird vom Ethernetshield mitbenutzt.