Enviar comandos desde el html de la SD - Shield Ethernet

Buenas amigos, estoy sin ideas sobre como mandar una orden al arduino desde un archivo html que esta dentro la microsd de la shield ethernet.

Logro ejecutar bien el archivo html pero no se como hacer para que envie un comando para activar o desactivar un pin digital del arduino...

En este enlace: Tutorial Arduino Ethernet Shield + Relay he visto un ejemplo para hacer lo que quiero, lo malo es que el codigo html ya esta dentro del arduino y no en la memoria sd....

¿Alguien me puede ayudar? Me encuentro en el final del todo y solo me queda esto XD

Dejo aqui el codigo de fuente del arduino..

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

// size of buffer used to capture HTTP requests
#define REQ_BUF_SZ   20

// MAC address from Ethernet shield sticker under board
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 100); // IP address, may need to change depending on network
EthernetServer server(80);  // create a server at port 80
File webFile;
char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string
char req_index = 0;              // index into HTTP_req buffer


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.");
    
    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
                
               
                
                // 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++;
                }
                // print HTTP request character to serial monitor
                Serial.print(c);
                // last line of client request is blank and ends with \n
                // respond to client only after last line received
                if (c == '\n' && currentLineIsBlank) {
                    // open requested web page file
                    if (StrContains(HTTP_req, "GET / ")
                                 || StrContains(HTTP_req, "GET /index.htm")) {
                        client.println("HTTP/1.1 200 OK");
                        client.println("Content-Type: text/html");
                        client.println("Connnection: close");
                        client.println();
                        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();
                    }
                    // 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') {
                    // 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)
}

// 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;
}

Buenas!! Espero que aún sigas con el proyecto. La verdad es que lo que comentas es algo sobre lo que no hay mucha información en internet ni en los foros y lo veo imprescindible.

Yo estoy realizando también un proyecto en el cual tengo que hacer eso mismo que comentas. Conseguirlo lo he conseguido, el problema es que la respuesta del servidor es demasiado lenta. Para hacer lo que preguntas se manda una petición al servidor arduino mediante un script AJAX y al arduino se le implementa un código que captura la petición y lee la parte que te interesa para extraer el valor o lo que quieras interpretar.

Yo lo saque todo de este ejemplo: Arduino SD Card Ajax Web Server Displaying Switch Status

El problema como ya te he comentado es que cuando tienes muchos botones/cosas que quieres enviar el código se hace muy pesado y tarda mucho en responder, con lo que si pulsas muchos botones varias veces la página se queda atascada o bien las va enviando una por una como si estuvieran en cola, pero con un retraso de tiempo importante, y si durante ese tiempo cierras la web no las envía con lo que a mi personalmente no me vale.

Estoy pensando en una forma de hacerlo pero no lo tengo muy claro. Hay un proyecto impresionante en internet que se llama reptile control con arduino en el que hacen eso mismo pero a lo bestia, lo que pasa que es tan complejo que no termino de entender el código y aunque he preguntado de momento no he obtenido respuesta. Me gustaría que si alguien ha conseguido hacer un webserver con arduino mediante un página alojada en la SD nos echara un cable, creo que esto es muy interesante para temas de domótica y no está bien explicado.

Un saludo!!