nochmal:
zip Anhänge bringebn nichts, besser man kann es dirket lesen, um sich darüber zu verständigen.
und: nein, es soll sich der Status von
Learn
Detect
nur dann ändern, wenn eine von beiden Tasten geclickt wurde, und dann dauerhaft so bleiben.
Wenn es vom Programm intern geändert wird, soll es sich entsprechend anpassen, damit man immer sieht, welcher Mode aktiv ist.
Der jeweilge Status wird gespeichert in den Variablen
modeLearn
modeDetect
wenn man frisch OK geklickt hat, muss man aber auch immer noch 2x Clear clicken, bis das Keypad gelöscht wird.
verwende jetzt mal bitte original meinen Code als Basis, weil ich mittlerweile schon ein aar Dinge abgewandelt habe, u.a. Variablennamen und auch void setup(void).
Code:#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> // Version 0.0.3 const char* ssid = "WLAN"; const char* password = "0.0.3"; ESP8266WebServer server(80); //----------------------------------------------------- //HTML und Daten für das Eingabe-/Ausgabefeld //einfügen im globalen Scope //----------------------------------------------------- //erstellt von (c): Moppi @roboternetz.de //----------------------------------------------------- //Hintergrundfarbe Buttons, wenn aktiv const String bColorActiv = "red"; //Breite und Höhe des ges. Feldes const int tableWidth = 10; const int tableHeight = 10; //Füllzeichen für Felder const String fillChar = "X"; //Parameter-Array enthält den Status aller Felder //der Ein-/Ausgabematrix (0= AUS, 1= AN) bool matrix[tableHeight*tableWidth]={0}; //Status, ob Änderungen vorliegen bool toChange = 0; bool toLearn = 0; bool toDetect = 1; bool toReset = 0; bool toSave = 0; bool toClear = 0; //HTML String body = ""; String s1="<style>\nform{margin:0}\n#un{width:0;height:0;visibility:hidden}\n#bu{width:10em;height:2em;}\n#rw{display:table-row;}\n#ce{display:table-cell;}\n#ip{width:1.5em;text-align:center;font-weight:bold}\n</style>\n<script>dge=document.getElementById; function oc(ob){if(ob.value=='')ob.value='"+fillChar+"';else ob.value='';}</script>\n<div role=\"presentation\" style=\"display:table\"><div id='rw'><div id='ce' style=\"padding-right:1em\"><form method=\"get\"><div role=\"presentation\" style=\"margin-bottom:1em;display:table\">"; String s2="<div id=\"rw\">"; String s3="<div id=\"ce\"><input onclick=\"oc(this);\" type=\"text\" name=\"b"; String s3_1="\" value=\""; String s3_2="\" maxlength=\"1\" id=\"ip\"></div>"; String s4="</div>"; String s5="</div><div id='ce'><input id=\"bu\" type=\"submit\" value=\"Change:Ok\"><p></form>"; String s5_0="<form method=\"get\"><input id=\"bu\" type=\"submit\" value=\"Clear\"><input id=\"un\" type=\"text\" name=\"bn\" value=\"clear\"></form>"; String s5_1="<form method=\"get\"><input id=\"bu\" style=\"background-color:"; String s5_1n="\" type=\"submit\" value=\"Learn\"><input id=\"un\" type=\"text\" name=\"bn\" value=\"learn\"></form>"; String s5_2="<form method=\"get\"><input id=\"bu\" style=\"background-color:"; String s5_2n="\" type=\"submit\" value=\"Detect\"><input id=\"un\" type=\"text\" name=\"bn\" value=\"detect\"></form>"; String s5_3="<form method=\"get\"><input id=\"bu\" type=\"submit\" value=\"Reset\"><input id=\"un\" type=\"text\" name=\"bn\" value=\"reset\"></form>"; String s5_4="<form method=\"get\"><input id=\"bu\" type=\"submit\" value=\"Save\"><input id=\"un\" type=\"text\" name=\"bn\" value=\"save\"></form></div></div></div>"; String par="b"; //----------------------------------------------------- float bufferArray[100]; void setup() { Serial.begin(115200); delay(1000); Serial.println(); //----------------------------------------------------- //Anmeldung am Netzwerk //----------------------------------------------------- Serial.println("connecting by IPAddress(192,168,2,99)"); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); //begin WiFi connection WiFi.config(IPAddress(192, 168, 2, 99), IPAddress(192, 168, 2, 1), IPAddress(192, 168, 2, 1), IPAddress(255, 255, 255, 0)); Serial.println(""); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); //----------------------------------------------------- //Auswertung und Erstellung des Ein-/Ausgabefeldes //----------------------------------------------------- //Einbinden in setup() und in loop() nutzen durch //Aufruf von "server.handleClient();" //benötigt Objekt "server", erstellt im globalen Scope //mittels: ESP8266WebServer server(80); //benötigt auch: #include <ESP8266WebServer.h> //----------------------------------------------------- //erstellt von (c): Moppi @roboternetz.de //----------------------------------------------------- server.on("/",[]() { //Auswerten des Query-String vom Browser int n = 0; if(server.hasArg("bn")){ if(server.arg("bn") == "clear") toClear=1; else {toClear=0; toChange=0; for(int i=0; i<(tableWidth*tableHeight); i++) matrix[n] = 0;} if(server.arg("bn") == "save") toSave=1; else toSave=0; if(server.arg("bn") == "reset") toReset=1; else toReset=0; if(server.arg("bn") == "detect") toDetect=1; else toDetect=0; if(server.arg("bn") == "learn") toLearn=1; else toLearn=0; } for(int x=0; x < tableHeight; x++){ for(int j=0; j < tableWidth; j++){ if(server.hasArg(par+String(n))){ String a = server.arg(par+String(n)); bool ic = matrix[n]; if (a == "") matrix[n] = 0; else matrix[n] = 1; if (ic != matrix[n]) toChange = 1; n++; } if(toChange){ toClear = 0; toSave = 0; toReset = 0; toDetect = 0; toLearn = 0; } } } //Aufbau des Feldes String v; body = s1; n = 0; for(int x=0; x < tableHeight; x++){ body += s2; for(int j=0; j < tableWidth; j++){ if (matrix[n]) v = fillChar; else v = ""; body += s3 + String(n) + s3_1 + v + s3_2; n++; } body += s4; } body += s4+s5+s5_0+s5_1; if (toLearn) body += bColorActiv; body += s5_1n+s5_2; if (toDetect) body += bColorActiv; body += s5_2n+s5_3+s5_4; //Senden der Seite an den Browser server.send(200, "text/html", body); } ); //----------------------------------------------------- //----------------------------------------------------- //Webserver starten //----------------------------------------------------- server.begin(); Serial.println("Web server started!"); } uint32_t timestamp=0, sec=0; uint8_t modeLearn=0, modeDetect=0; void loop() { server.handleClient(); // Aktionen nach ButtonClick: /* if(toClear) { Serial.println((String)"toClear="+toClear); memset(matrix , 0, sizeof(matrix)); toClear=0; } */ if (toChange) { Serial.println("new data:"); for (int i = 0; i < 100; i++) { bufferArray[i] = (float)matrix[i]; Serial.println((String)i + ": " + bufferArray[i]); } toChange=0; } if(toLearn){ modeLearn=1; modeDetect=0; Serial.println((String)"modeLearn="+modeLearn); toLearn=0; } if(toDetect) { modeLearn=0; modeDetect=1; Serial.println((String)"modeDetect="+modeDetect); toDetect=0; } if(toReset) { toLearn=0; toDetect=1; Serial.println((String)"toReset="+toReset); toReset=0; } if(toSave) { toLearn=0; toDetect=1; Serial.println((String)"toSave="+toSave); toSave=0; } if(millis()-timestamp >= 1000) { sec++; timestamp +=1000; Serial.println(sec); } }









Lesezeichen