TO ADD MORE BUTTTON TO EXISTING PROGRAMME

HELLO GUYS,
I NEED LITTLE HELP.I AM USING THIS TUTORIAL (Arduino Web Server and Web Page LED Control using HTML Button and Physical Push Button Switch) TO CONTROL LED USING WEBPAGE AS WELL AS PHYSICAL SWITCH SOBUT IT HAVE ONLY TWO BUTTONS.I NEED HELP IN WRITING SAME CODING FOR 20-30 SWITCHES.

SO PLZ HELP IF ANYONE CAN I TRIED LOT BUT DID NOT WORKED OUT

THANK U.

web_server_hw_button_pg_button.zip (4.69 KB)

Is this capital letter intentional? Better read Rule 6 of this post.

Read about how to post it in this forum. No one is going to open your zip file? Paste your code in the thread with code tag.
Try to do some experiment with arrays, if you really want to control 20 or 30 buttons. Not sure what kind of application you are dealing here.

@krish5757, please attach your program as a .ino file. I am nervous of opening strange ZIP files.

Better still, just include the code in a Reply so we can see it without needing to download anything.

…R

I am sorry guys for your inconvenience.I am new to this

i am using arduino mega with Ethernet shild to creat local webserverto control led using webpage as well as physical button.i have code for controlling such two leds got it from(Arduino Web Server and Web Page LED Control using HTML Button and Physical Push Button Switch)
but i wish to add more button so i need help for that.

html code i used which is placed in sdcard on Ethernet shild

<!DOCTYPE html>
<html>
    <head>
        <title>Arduino Ajax LED Button Control</title>
        <script>
 strLED1 = "";
 strLED2 = "";
 var LED2_state = 0;
 function GetArduinoIO()
 {
 nocache = "&nocache=" + Math.random() * 1000000;
 var request = new XMLHttpRequest();
 request.onreadystatechange = function()
 {
 if (this.readyState == 4) {
 if (this.status == 200) {
 if (this.responseXML != null) {
 // XML file received - contains analog values, switch values and LED states
 var count;
 // LED 1
 if (this.responseXML.getElementsByTagName('LED')[0].childNodes[0].nodeValue === "checked") {
 document.LED_form.LED1.checked = true;
 }
 else {
 document.LED_form.LED1.checked = false;
 }
 // LED 2
 if (this.responseXML.getElementsByTagName('LED')[1].childNodes[0].nodeValue === "on") {
 document.getElementById("LED2").innerHTML = "LED 2 is ON (D7)";
 LED2_state = 1;
 }
 else {
 document.getElementById("LED2").innerHTML = "LED 2 is OFF (D7)";
 LED2_state = 0;
 }
 }
 }
 }
 }
 // send HTTP GET request with LEDs to switch on/off if any
 request.open("GET", "ajax_inputs" + strLED1 + strLED2 + nocache, true);
 request.send(null);
 setTimeout('GetArduinoIO()', 1000);
 strLED1 = "";
 strLED2 = "";
 }
 // service LEDs when checkbox checked/unchecked
 function GetCheck()
 {
 if (LED_form.LED1.checked) {
 strLED1 = "&LED1=1";
 }
 else {
 strLED1 = "&LED1=0";
 }
 }
 function GetButton1()
 {
 if (LED2_state === 1) {
 LED2_state = 0;
 strLED2 = "&LED2=0";
 }
 else {
 LED2_state = 1;
 strLED2 = "&LED2=1";
 }
 }
 </script>
 <style>
 .IO_box {
 float: left;
 margin: 0 20px 20px 0;
 border: 1px solid blue;
 padding: 0 5px 0 5px;
 width: 120px;
 }
 h1 {
 font-size: 120%;
 color: blue;
 margin: 0 0 10px 0;
 }
 h2 {
 font-size: 85%;
 color: #5734E6;
 margin: 5px 0 5px 0;
 }
 p, form, button {
 font-size: 80%;
 color: #252525;
 }
 .small_text {
 font-size: 70%;
 color: #737373;
 }
 </style>
    </head>
    <body onload="GetArduinoIO()">
        <h1>Arduino Ajax LED Button Control</h1>
 <div class="IO_box">
 <h2>LED Using Checkbox</h2>
 <form id="check_LEDs" name="LED_form">
 <input type="checkbox" name="LED1" value="0" onclick="GetCheck()" />LED 1 (D6)


 </form>
 </div>
 <div class="IO_box">
 <h2>LED Using Button</h2>
 <button type="button" id="LED2" onclick="GetButton1()">LED 2 is OFF (D7)</button>


 </div>
    </body>
</html>

arduino sketch

#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>

#define REQ_BUF_SZ   60

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 20); 
EthernetServer server(80);  // create a server at port 80
File webFile;               // the web page file on the SD card
char HTTP_req[REQ_BUF_SZ] = {0}; 
char req_index = 0;            
boolean LED_state[2] = {0}; 

void setup()
{
    // disable Ethernet chip
    pinMode(10, OUTPUT);
    digitalWrite(10, HIGH);
    
    Serial.begin(9600);       // for debugging
    
    // initialize SD card
    Serial.println("Initializing SD card...");
    if (!SD.begin(4)) {
        Serial.println("ERROR - SD card initialization failed!");
        return;    // init failed
    }
    Serial.println("SUCCESS - SD card initialized.");
    // check for index.htm file
    if (!SD.exists("index.htm")) {
        Serial.println("ERROR - Can't find index.htm file!");
        return;  // can't find index file
    }
    Serial.println("SUCCESS - Found index.htm file.");
    // switches
    pinMode(2, INPUT);
    pinMode(3, INPUT);
    // LEDs
    pinMode(6, OUTPUT);
    pinMode(7, OUTPUT);
    
    Ethernet.begin(mac, ip);  // initialize Ethernet device
    server.begin();           // start to listen for clients
}

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
                // limit the size of the stored received HTTP request
                // buffer first part of HTTP request in HTTP_req array (string)
                // leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1)
                if (req_index < (REQ_BUF_SZ - 1)) {
                    HTTP_req[req_index] = c;          // save HTTP request character
                    req_index++;
                }
                // 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");
                    // remainder of header follows below, depending on if
                    // web page or XML page is requested
                    // Ajax request - send XML file
                    if (StrContains(HTTP_req, "ajax_inputs")) {
                        // send rest of HTTP header
                        client.println("Content-Type: text/xml");
                        client.println("Connection: keep-alive");
                        client.println();
                        SetLEDs();
                        // send XML file containing input states
                        XML_response(client);
                    }
                    else {  // web page request
                        // send rest of HTTP header
                        client.println("Content-Type: text/html");
                        client.println("Connection: keep-alive");
                        client.println();
                        // send web page
                        webFile = SD.open("index.htm");        // open web page file
                        if (webFile) {
                            while(webFile.available()) {
                                client.write(webFile.read()); // send web page to client
                            }
                            webFile.close();
                        }
                    }
                   
                    Serial.print(HTTP_req);
                    // reset buffer index and all buffer elements to 0
                    req_index = 0;
                    StrClear(HTTP_req, REQ_BUF_SZ);
                    break;
                }
            
                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)
    
    // read buttons and debounce
    ButtonDebounce();
}

void ButtonDebounce(void)
{
    static byte buttonState[2]     = {LOW, LOW};   // the current reading from the input pin
    static byte lastButtonState[2] = {LOW, LOW};   // the previous reading from the input pin
    
    // the following variables are long's because the time, measured in miliseconds,
    // will quickly become a bigger number than can be stored in an int.
    static long lastDebounceTime[2] = {0};  // the last time the output pin was toggled
    long debounceDelay = 50;         // the debounce time; increase if the output flickers
  
    byte reading[2];
    
    reading[0] = digitalRead(2);
    reading[1] = digitalRead(3);
    
    for (int i = 0; i < 2; i++) {
        if (reading[i] != lastButtonState[i]) {
            // reset the debouncing timer
            lastDebounceTime[i] = millis();
        }
      
        if ((millis() - lastDebounceTime[i]) > debounceDelay) {
            // whatever the reading is at, it's been there for longer
            // than the debounce delay, so take it as the actual current state:
        
            // if the button state has changed:
            if (reading[i] != buttonState[i]) {
                buttonState[i] = reading[i];
          
                // only toggle the LED if the new button state is HIGH
                if (buttonState[i] == HIGH) {
                    LED_state[i] = !LED_state[i];
                }
            }
        }
    } // end for() loop
    
    // set the LEDs
    digitalWrite(6, LED_state[0]);
    digitalWrite(7, LED_state[1]);
      
    // save the reading.  Next time through the loop,
    // it'll be the lastButtonState:
    lastButtonState[0] = reading[0];
    lastButtonState[1] = reading[1];
}

// checks if received HTTP request is switching on/off LEDs
// also saves the state of the LEDs
void SetLEDs(void)
{
    // LED 1 (pin 6)
    if (StrContains(HTTP_req, "LED1=1")) {
        LED_state[0] = 1;  // save LED state
        digitalWrite(6, HIGH);
    }
    else if (StrContains(HTTP_req, "LED1=0")) {
        LED_state[0] = 0;  // save LED state
        digitalWrite(6, LOW);
    }
    // LED 2 (pin 7)
    if (StrContains(HTTP_req, "LED2=1")) {
        LED_state[1] = 1;  // save LED state
        digitalWrite(7, HIGH);
    }
    else if (StrContains(HTTP_req, "LED2=0")) {
        LED_state[1] = 0;  // save LED state
        digitalWrite(7, LOW);
    }
}

// send the XML file with analog values, switch status
//  and LED status
void XML_response(EthernetClient cl)
{
    int analog_val;            // stores value read from analog inputs
    int count;                 // used by 'for' loops
    int sw_arr[] = {2, 3};  // pins interfaced to switches
    
    cl.print("<?xml version = \"1.0\" ?>");
    cl.print("<inputs>");
    // checkbox LED states
    // LED1
    cl.print("<LED>");
    if (LED_state[0]) {
        cl.print("checked");
    }
    else {
        cl.print("unchecked");
    }
    cl.println("</LED>");
    // button LED states
    // LED3
    cl.print("<LED>");
    if (LED_state[1]) {
        cl.print("on");
    }
    else {
        cl.print("off");
    }
    cl.println("</LED>");
    cl.print("</inputs>");
}

// sets every element of str to 0 (clears array)
void StrClear(char *str, char length)
{
    for (int i = 0; i < length; i++) {
        str[i] = 0;
    }
}

// searches for the string sfind in the string str
// returns 1 if string found
// returns 0 if string not found
char StrContains(char *str, char *sfind)
{
    char found = 0;
    char index = 0;
    char len;

    len = strlen(str);
    
    if (strlen(sfind) > len) {
        return 0;
    }
    while (index < len) {
        if (str[index] == sfind[found]) {
            found++;
            if (strlen(sfind) == found) {
                return 1;
            }
        }
        else {
            found = 0;
        }
        index++;
    }

    return 0;
}

If you have 20 physical buttons and you want to connect them to an arduino, you would typically use parallel-in/serial-out shift registers.

If you have 20 LEDs, you would typically use a serial-in/parellel-out shift registers.

If you have 20 HTML buttons - well: what’s the problem? If they are on a form, then the arduino will receive the form and you deal with it. This means working with whatever input the arduino gets over ethernet.

I don’t understand “TO CONTROL LED USING WEBPAGE AS WELL AS PHYSICAL SWITCH”. Which is it? Are some LEDs controlled by the page and some by the switch? Are the switches pushbuttons that toggle the LEDs?

Basically, dude, you will not get a huge amount of help here by saying “I got this code off the internet, I don’t understand any of it, can someone tell me how to make it do what I want”. You may as well ask me to tell you what levers you need to push, in what order, to drive your car to the local shops.

lets make it simple dude. can you help me to add onemore button to this code?

lets make it simple dude

There is nothing simple about the html code that you have. Simple would be a form with buttons.

But, this causes one button to be displayed, and calls a function when the button is clicked:

 <button type="button" id="LED2" onclick="GetButton1()">LED 2 is OFF (D7)</button>

So copy/paste/edit this line to make as many more buttons appear as you want.

Make sure you copy/paste/rename/edit the GetButton1() function, too.

krish5757:
lets make it simple dude. can you help me to add onemore button to this code?

In this Forum when someone says "add more button to existing program" it is assumed that the person means to add a physical button with a connection to an Arduino I/O pin.

As far as I can see you want to add a browser button in some HTML code. I suspect there are 5 bazillion Google hits that will explain how to do that. It has nothing to do with Arduino programming using C++

...R

I also thought OP wants to add physical button.

In this code I have two led one controled using checkobox and other with button on web page as well physical buttons.Everything synchronouses. I wish to add one more led and physical button and button on web page to control led.I tried coping and editing code to add but didn't worked I am doing something wrong may be so I want someone to edit the code .

o I want someone to edit the code .

It doesn't work that way. You changed some code. Now, it does something. You expect it to do something. I think it is safe to assume that the two somethings are not the same thing. You need to post your code and explain what it does, and how that differs from what you want.

Maybe you should start by working through some of the arduino examples available in the IDE.

You will also need to know HTML, javascript, and you will need to understand how the data is getting submitted, ie: what this line of javascript

request.open("GET", "ajax_inputs" + strLED1 + strLED2 + nocache, true);

is doing. If you want a hundred buttons, this will not work. Or if it does, there are a squillion far better ways to do it.

If you just want someone to hack your code up for you, without your having to know anything about how it works, perhaps you might want to take this to the "Gigs and Collaborations" subforum and offer money.

Personally, I'd use JSON and AngularJS for this type of thing, mainly because that's what I'm working on now.

What you are asking is a far bigger job than you imagine and it involves a range of technologies, none of which you appear to know much about (if you did, you'd be asking more specific questions). If you want to learn, that's cool. But hacking up code like this that you at best barely understand is not really going to do much for you.

i tried editing html and arduino code but when i visit ip address of arduino i can not see web page properly.
i see html codes all over page i already posted the original code which works fine for controlling two led.i tried editing code this way
html code

<!DOCTYPE html>
<html>
    <head>
        <title>Arduino Ajax LED Button Control</title>
        <script>
 strLED1 = "";
 strLED2 = "";
 strLED3 = "";
 var LED2_state = 0;
 var LED3_state = 0;
 function GetArduinoIO()
 {
 nocache = "&nocache=" + Math.random() * 1000000;
 var request = new XMLHttpRequest();
 request.onreadystatechange = function()
 {
 if (this.readyState == 4) {
 if (this.status == 200) {
 if (this.responseXML != null) {
 // XML file received - contains analog values, switch values and LED states
 var count;
 // LED 1
 if (this.responseXML.getElementsByTagName('LED')[0].childNodes[0].nodeValue === "checked") {
 document.LED_form.LED1.checked = true;
 }
 else {
 document.LED_form.LED1.checked = false;
 }
 // LED 2
 if (this.responseXML.getElementsByTagName('LED')[1].childNodes[0].nodeValue === "on") {
 document.getElementById("LED2").innerHTML = "LED 2 is ON (D7)";
 LED2_state = 1;
 }
 else {
 document.getElementById("LED2").innerHTML = "LED 2 is OFF (D7)";
 LED2_state = 0;
 }
 // LED 3
 if (this.responseXML.getElementsByTagName('LED')[2].childNodes[0].nodeValue === "on") {
 document.getElementById("LED3").innerHTML = "LED 3 is ON (D8)";
 LED2_state = 1;
 }
 else {
 document.getElementById("LED3").innerHTML = "LED 3 is OFF (D8)";
 LED2_state = 0;
 }
 }
 }
 }
 }
 // send HTTP GET request with LEDs to switch on/off if any
 request.open("GET", "ajax_inputs" + strLED1 + strLED2 + strLED2 + nocache, true);
 request.send(null);
 setTimeout('GetArduinoIO()', 1000);
 strLED1 = "";
 strLED2 = "";
 strLED3 = "";
 }
 // service LEDs when checkbox checked/unchecked
 function GetCheck()
 {
 if (LED_form.LED1.checked) {
 strLED1 = "&LED1=1";
 }
 else {
 strLED1 = "&LED1=0";
 }
 }
 function GetButton1()
 {
 if (LED2_state === 1) {
 LED2_state = 0;
 strLED2 = "&LED2=0";
 }
 else {
 LED2_state = 1;
 strLED2 = "&LED2=1";
 }
 }
 function GetButton2()
 {
 if (LED2_state === 1) {
 LED2_state = 0;
 strLED3 = "&LED3=0";
 }
 else {
 LED3_state = 1;
 strLED3 = "&LED3=1";
 }
 }
 </script>
 <style>
 .IO_box {
 float: left;
 margin: 0 20px 20px 0;
 border: 1px solid blue;
 padding: 0 5px 0 5px;
 width: 120px;
 }
 h1 {
 font-size: 120%;
 color: blue;
 margin: 0 0 10px 0;
 }
 h2 {
 font-size: 85%;
 color: #5734E6;
 margin: 5px 0 5px 0;
 }
 p, form, button {
 font-size: 80%;
 color: #252525;
 }
 .small_text {
 font-size: 70%;
 color: #737373;
 }
 </style>
    </head>
 <body onload="GetArduinoIO()">
        <h1>Arduino Ajax LED Button Control</h1>
 <div class="IO_box">
 <h2>LED Using Checkbox</h2>
 <form id="check_LEDs" name="LED_form">
 <input type="checkbox" name="LED1" value="0" onclick="GetCheck()" />LED 1 (D6)


 </form>
 </div>
 <div class="IO_box">
 <h2>LED Using Button</h2>
 <button type="button" id="LED2" onclick="GetButton1()">LED 2 is OFF (D7)</button>


 </div>
 <div class="IO_box">
 <h2>LED Using Button</h2>
 <button type="button" id="LED3" onclick="GetButton2()">LED 3 is OFF (D8)</button>


 </div>
    </body>
</html>

Is
it
really
necessary
for
every
line
to
start
in
column
one?

edited arduino sketch

#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
// size of buffer used to capture HTTP requests
#define REQ_BUF_SZ   60

// MAC address from Ethernet shield sticker under board
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 20); // IP address, may need to change depending on network
EthernetServer server(80);  // create a server at port 80
File webFile;               // the web page file on the SD card
char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string
char req_index = 0;              // index into HTTP_req buffer
boolean LED_state[3] = {0}; // stores the states of the LEDs

void setup()
{
    // disable Ethernet chip
    pinMode(10, OUTPUT);
    digitalWrite(10, HIGH);
    
    Serial.begin(9600);       // for debugging
    
    // initialize SD card
    Serial.println("Initializing SD card...");
    if (!SD.begin(4)) {
        Serial.println("ERROR - SD card initialization failed!");
        return;    // init failed
    }
    Serial.println("SUCCESS - SD card initialized.");
    // check for index.htm file
    if (!SD.exists("index.htm")) {
        Serial.println("ERROR - Can't find index.htm file!");
        return;  // can't find index file
    }
    Serial.println("SUCCESS - Found index.htm file.");
    // switches
    pinMode(3, INPUT);
    pinMode(4, INPUT);
 pinMode(5, INPUT);
    // LEDs
    pinMode(6, OUTPUT);
    pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);
    
    Ethernet.begin(mac, ip);  // initialize Ethernet device
    server.begin();           // start to listen for clients
}

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
              )
                if (req_index < (REQ_BUF_SZ - 1)) {
                    HTTP_req[req_index] = c;          // save HTTP request character
                    req_index++;
                }
               
                if (c == '\n' && currentLineIsBlank) {
                    // send a standard http response header
                    client.println("HTTP/1.1 200 OK");
                   
                    if (StrContains(HTTP_req, "ajax_inputs")) {
                        // send rest of HTTP header
                        client.println("Content-Type: text/xml");
                        client.println("Connection: keep-alive");
                        client.println();
                        SetLEDs();
                        // send XML file containing input states
                        XML_response(client);
                    }
                    else {  // web page request
                        // send rest of HTTP header
                        client.println("Content-Type: text/html");
                        client.println("Connection: keep-alive");
                        client.println();
                        // send web page
                        webFile = SD.open("index.htm");        // open web page file
                        if (webFile) {
                            while(webFile.available()) {
                                client.write(webFile.read()); // send web page to client
                            }
                            webFile.close();
                        }
                    }
                    // display received HTTP request on serial port
                    Serial.print(HTTP_req);
                    // reset buffer index and all buffer elements to 0
                    req_index = 0;
                    StrClear(HTTP_req, REQ_BUF_SZ);
                    break;
                }
                // every line of text received from the client ends with \r\n
                if (c == '\n') {
                    
                    currentLineIsBlank = true;
                } 
                else if (c != '\r') {
                    
                    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)
    
    // read buttons and debounce
    ButtonDebounce();
}

void ButtonDebounce(void)
{
    static byte buttonState[3]     = {LOW, LOW, LOW};   // the current reading from the input pin
    static byte lastButtonState[3] = {LOW, LOW, LOW};   // the previous reading from the input pin
    
  
    static long lastDebounceTime[3] = {0};  // the last time the output pin was toggled
    long debounceDelay = 50;         // the debounce time; increase if the output flickers
  
    byte reading[2];
    
    reading[0] = digitalRead(3);
    reading[1] = digitalRead(4);
 reading[2] = digitalRead(5);
    
    for (int i = 0; i < 2; i++) {
        if (reading[i] != lastButtonState[i]) {
            // reset the debouncing timer
            lastDebounceTime[i] = millis();
        }
      
        if ((millis() - lastDebounceTime[i]) > debounceDelay) {
         
            if (reading[i] != buttonState[i]) {
                buttonState[i] = reading[i];
          
                // only toggle the LED if the new button state is HIGH
                if (buttonState[i] == HIGH) {
                    LED_state[i] = !LED_state[i];
                }
            }
        }
    } // end for() loop
    
    // set the LEDs
    digitalWrite(6, LED_state[0]);
    digitalWrite(7, LED_state[1]);
    digitalWrite(8, LED_state[2]);
      
    // save the reading.  Next time through the loop,
    // it'll be the lastButtonState:
    lastButtonState[0] = reading[0];
    lastButtonState[1] = reading[1];
 lastButtonState[2] = reading[2];
}

// checks if received HTTP request is switching on/off LEDs
// also saves the state of the LEDs
void SetLEDs(void)
{
    // LED 1 (pin 6)
    if (StrContains(HTTP_req, "LED1=1")) {
        LED_state[0] = 1;  // save LED state
        digitalWrite(6, HIGH);
    }
    else if (StrContains(HTTP_req, "LED1=0")) {
        LED_state[0] = 0;  // save LED state
        digitalWrite(6, LOW);
    }
    // LED 2 (pin 7)
    if (StrContains(HTTP_req, "LED2=1")) {
        LED_state[1] = 1;  // save LED state
        digitalWrite(7, HIGH);
    }
    else if (StrContains(HTTP_req, "LED2=0")) {
        LED_state[1] = 0;  // save LED state
        digitalWrite(7, LOW);
    }
 // LED 3 (pin 8)
    if (StrContains(HTTP_req, "LED3=1")) {
        LED_state[2] = 1;  // save LED state
        digitalWrite(8, HIGH);
    }
    else if (StrContains(HTTP_req, "LED2=0")) {
        LED_state[2] = 0;  // save LED state
        digitalWrite(8, LOW);
    }
}

// send the XML file with analog values, switch status
//  and LED status
void XML_response(EthernetClient cl)
{
    int analog_val;            // stores value read from analog inputs
    int count;                 // used by 'for' loops
    int sw_arr[] = {3, 4, 5};  // pins interfaced to switches
    
    cl.print("<?xml version = \"1.0\" ?>");
    cl.print("<inputs>");
    // checkbox LED states
    // LED1
    cl.print("<LED>");
    if (LED_state[0]) {
        cl.print("checked");
    }
    else {
        cl.print("unchecked");
    }
    cl.println("</LED>");
    // button LED states
    // LED3
    cl.print("<LED>");
    if (LED_state[1]) {
        cl.print("on");
    }
    else {
        cl.print("off");
    }
    cl.println("</LED>");
    cl.print("</inputs>");
}

// sets every element of str to 0 (clears array)
void StrClear(char *str, char length)
{
    for (int i = 0; i < length; i++) {
        str[i] = 0;
    }
}



char StrContains(char *str, char *sfind)
{
    char found = 0;
    char index = 0;
    char len;

    len = strlen(str);
    
    if (strlen(sfind) > len) {
        return 0;
    }
    while (index < len) {
        if (str[index] == sfind[found]) {
            found++;
            if (strlen(sfind) == found) {
                return 1;
            }
        }
        else {
            found = 0;
        }
        index++;
    }

    return 0;
}