hulp gezocht bij ethernet switch led on/off

Beste, ik hoop dat jullie kunnen helpen met het volgende,
ik wil via een voorbeeld programma een led aan en uit sturen via mijn ethernet2 shield,
bij het laden vd pagina kan ik deze led aanzetten maar als ik daarna wil uitvinken dan
herlaad de pagina en word het vakje automatisch terug aangevinkt, iemand een idee hoe
ik dit kan verhelpen ? dus bij aanvinken led aan uitvinken led uit ?
Alvast bedankt

#include <SPI.h>
#include <Ethernet2.h>

// MAC address from Ethernet shield sticker under board
byte mac[] = { 0x90, 0xA2, 0xDA, 0x10, 0xB4, 0x00  };
IPAddress DnsServer (192, 168, 1, 6);
IPAddress GateWay (192, 168, 1, 1);
IPAddress SubNetMask(255, 255, 255, 0);
IPAddress ip(10, 33, 211, 179); // IP address, may need to change depending on network
EthernetServer server(80);  // create a server at port 80

String HTTP_req;          // stores the HTTP request
boolean LED_status = 0;   // state of LED, off by default

void setup()
{
    Ethernet.begin(mac, ip, DnsServer, GateWay, SubNetMask);  // initialize Ethernet device
    server.begin();           // start to listen for clients
    Serial.begin(9600);       // for diagnostics
    pinMode(2, OUTPUT);       // LED on pin 2
}

void loop()
{
    EthernetClient client = server.available();  // try to get client

    if (client) {  // got client?
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {   // client data available to read
                char c = client.read(); // read 1 byte (character) from client
                HTTP_req += c;  // save the HTTP request 1 char at a time
                // last line of client request is blank and ends with \n
                // respond to client only after last line received
                if (c == '\n' && currentLineIsBlank) {
                    // send a standard http response header
                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    client.println("Connection: close");
                    client.println();
                    // send web page
                    client.println("<!DOCTYPE html>");
                    client.println("<html>");
                    client.println("<head>");
                    client.println("<title>Arduino LED Control</title>");
                    client.println("</head>");
                    client.println("<body>");
                    client.println("<h1>LED</h1>");
                    client.println("<p>Click to switch LED on and off.</p>");
                    client.println("<form method=\"get\">");
                    ProcessCheckbox(client);
                    client.println("</form>");
                    client.println("</body>");
                    client.println("</html>");
                    Serial.print(HTTP_req);
                    HTTP_req = "";    // finished with request, empty string
                    break;
                }
                // every line of text received from the client ends with \r\n
                if (c == '\n') {
                    // last character on line of received text
                    // starting new line with next character read
                    currentLineIsBlank = true;
                } 
                else if (c != '\r') {
                    // a text character was received from client
                    currentLineIsBlank = false;
                }
            } // end if (client.available())
        } // end while (client.connected())
        delay(1);      // give the web browser time to receive the data
        client.stop(); // close the connection
    } // end if (client)
}

// switch LED and send back HTML for LED checkbox
void ProcessCheckbox(EthernetClient cl)
{
    if (HTTP_req.indexOf("LED2=2") > -1) {  // see if checkbox was clicked
        // the checkbox was clicked, toggle the LED
        if (LED_status) {
            LED_status = 0;
        }
        else {
            LED_status = 1;
        }
    }

    if (LED_status) {    // switch LED on
        digitalWrite(2, HIGH);
        // checkbox is checked
        cl.println("<input type=\"checkbox\" name=\"LED2\" value=\"2\" \
        onclick=\"submit();\" checked>LED2");
    }
    else {              // switch LED off
        digitalWrite(2, LOW);
        // checkbox is unchecked
        cl.println("<input type=\"checkbox\" name=\"LED2\" value=\"2\" \
        onclick=\"submit();\">LED2");
    }
}

Dan zou ik eens heel goed kijken in jouw laatste if-then-else stuk van je code. Het nadeel van stukjes codes kopiëren wordt hier weer eens aangetoond.

Hoi Nico,

bedankt alvast voor de tip zal het morgen zeker nakijken, ik weet dat kopieren niet altijd goed is maar ben pas bezig met arduino en heb al de voorbeeld codes al gedaan dus neem ik deze om verder te leren
natuurlijk kan ik hier en daar is het probleem niet zien daarom dat ik het is vraag.
maar zeker al hartelijk dank

Kijk.

Weer wat geleerd vandaag.
Bedankt voor de vraag en het gegeven antwoord.

en zo leren we elke dag :slight_smile: ik zie toch eigenlijk de fout niet waarom na het aanvinken de knop steeds aangevinkt
blijft met ergens denk ik in dit stuk zitten, ben ook te nieuw in programmeren

  if (HTTP_req.indexOf("LED2=2") > -1) {  // see if checkbox was clicked
        // the checkbox was clicked, toggle the LED
        if (LED_status) {
            LED_status = 0;
        }
        else {
            LED_status = 1;
              Serial.println (LED_status); //mag weg
        }
    }

    if (LED_status) {    // switch LED on
        digitalWrite(2, HIGH);
        // checkbox is checked
        cl.println("<input type=\"checkbox\" name=\"LED2\" value=\"2\" \
        onclick=\"submit();\" checked>LED2");
       
    }
    else {              // switch LED off
        digitalWrite(2, LOW);
        // checkbox is unchecked
        cl.println("<input type=\"checkbox\" name=\"LED2\" value=\"2\" \
        onclick=\"submit();\">LED2");
    
        
    }
}

Ongeacht of de LED aan of uit staat doe je consequent dit :

cl.println("<input type=\"checkbox\" name=\"LED2\" value=\"2\" \

En als jij een value van 2 naar de checkbox stuurt blijft hij altijd aangevinkt. Dus het programma doet precies wat je vraagt.

durf het bijna niet te vragen maar ik veronderstel dat 2 true is maar wat is dan false = -1?
indien ik daar -1 zet lukt het nog niet
moet er precies toch nog inkomen :frowning:

nicoverduin:
Ongeacht of de LED aan of uit staat doe je consequent dit :

cl.println("<input type=\"checkbox\" name=\"LED2\" value=\"2\" \

En als jij een value van 2 naar de checkbox stuurt blijft hij altijd aangevinkt. Dus het programma doet precies wat je vraagt.

Ik zou dit eens lezen:

heb dat is nagelezen en denk dat de fout hier zit in onderstaande stuk,
ik versta niet waarom hieronder die 2 wat die precies doet en waarom er >LED2 staat
doe mn best Nico :o

else {              // switch LED off
        digitalWrite(2, LOW);
        // checkbox is unchecked
        cl.println("<input type=\"checkbox\" name=\"LED2\" value=\"2\" \
        onclick=\"submit();\">LED2");

Volgens mij is die 2 helemaal fout. Die regel moet je als een geheel zien en als je alle speciale tekens ff wegziet krijg je dit:

<input type="checkbox" name="LED2" value="2" onclick="submit();">LED2

Wat hier nu staat is het volgende:
a) maak een invoer veld
b) die de naam LED2 krijgt
c) met waarde = 2
d) als je hem aan clicked dan wordt de submit() uitgevoerd
e) en toon dit veld op het scherm met de tekst LED2

Die speciale tekens zijn ook nodig om de compiler niet in verwarring te brengen met alle quotes.
De waarde 2 is dus niet goed en je zou eens kunnen googelen of op W3Schools kunnen kijken wat de syntax voor dit ding is. en hoe je hem kan setten en resetten.

Wat ik dus geleerd had, is dat je niet per se dit hoeft te doen:

          client.print("Font myFont = new Font(");
          client.write (0x22);
          client.print("Serif");
          client.write (0x22);
          client.println(",Font.BOLD,12);");

Maar dat je ook kunt voorkomen dat de quote met te printen tekst gesloten wordt, door " te gebruiken:

            client.println("Font myFont = new Font(\"Serif\",Font.BOLD,12");

De bovenste code doet hetzelfde, maar het zou fout gaan als je "serif" dus zonder de \ neer zou zetten.
Dat was mijn oplossing nadat ik een week of 2 geleden naar aanleiding van een andere thread ook eens ben gaan experimenteren.
Nu dus geleerd dat dat eenvoudiger kan.