Controllo di tre relè tramite pagina web, con autenticazione

Salve,
pur senza conoscenze di programmazione, con un po' di pazienza sono alfine arrivato a far funzionare un codice per Arduino UNO che mi consente di azionare tre relè, agendo sui rispettivi pulsanti in una pagina web su browser, che ho denominato ALLARME, LUCI e CANCELLO.

Poi ho voluto integrarla con un'autenticazione con codifica base64 utilizzando la libreria Webduino e... qui son cominciati i problemi. O meglio, il codice tutto sommato funziona, faccio il mio bel login ed accedo all'interfaccia con i pulsanti, però poi, cliccando sui pulsanti, evidentemente la pagina si aggiorna e mi fa tornare al login.

Ovviamente io vorrei fare il login una sola volta e poi poter usare quanto voglio i pulsanti, magari ripetendo il login solo se chiudo e riapro il browser, ma evidentemente devo inserire nel codice qualcosa che ora ignoro (forse in void loop?).

Ecco il codice completo:

#include <SPI.h>
#include <Ethernet.h>
#include "WebServer.h"

int ALLARME = 4;          
int LUCI = 5;          
int CANCELLO = 6;
          
static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };   
static uint8_t ip[] = { 192, 168, 178, 32 };                      

//creo un oggetto webduino
WebServer webserver("", 5050);
EthernetServer server(5050);
String readString;

//funzione che crea la pagina principale del sito
 void defaultCmd(WebServer &server, WebServer::ConnectionType type, char *, bool)
 {
 server.httpSuccess();
 if (type != WebServer::HEAD)
 {
 //invio al browser la pagina principale
 P(helloMsg) = "<h4>Accedi:</h4><a href=\"private.html\">Pagina Privata</a>";
 server.printP(helloMsg);
 }
 }

//questa funzione permette di verificare il nome utente e la password
//e in caso di successo di visualizzare la pagina privata
 void privateCmd(WebServer &server, WebServer::ConnectionType type, char *, bool)
 {
 //user= ******
 //password= ******

//verifico nome utente e password
 if (server.checkCredentials("******************"))
 {
 //in caso affermativo…
server.httpSuccess();
 }
 else
 {
 //creo una risposta http
 //nel caso in cui si tenta un accesso
 //non autorizzato
 server.httpUnauthorized();
 }
 }

void setup() {
 // Apro la comunicazione seriale:
  Serial.begin(9600);
 //Imposto i pin come OUTPUT e li inizializzo su HIGH (in questo caso = spento)
  pinMode(ALLARME, OUTPUT);
  digitalWrite(ALLARME, HIGH);
  pinMode(LUCI, OUTPUT);
  digitalWrite(LUCI, HIGH);
  pinMode(CANCELLO, OUTPUT);
  digitalWrite(CANCELLO, HIGH);
  
//inizializzo la ethernet shield
Ethernet.begin(mac, ip);
//definisco funzione che gestisce
//la pagina principale del sito
webserver.setDefaultCommand(&defaultCmd);
webserver.addCommand("index.html", &defaultCmd);
//definisco la funzione che gestisce la pagina privata
webserver.addCommand("private.html", &privateCmd);

//inizializzo la libreria webduino
 webserver.begin();
}

void loop() 
{   
 char buff[64];
 int len = 64;

webserver.processConnection(buff, &len);
 
   // Creo una connessione al client
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {   
      if (client.available()) {
        char c = client.read();    
        //Leggo i caratteri da HTTP
        if (readString.length() < 100) {
          //Inserisco i caratteri nella stringa 
          readString += c;
          //Serial.print(c);
         }

         //Se la richiesta HTTP è andata a buon fine
         if (c == '\n') {          
           Serial.println(readString); //scrivi sul monitor seriale per debugging
     
           client.println("HTTP/1.1 200 OK"); //Invio nuova pagina
           client.println("Content-Type: text/html");
           client.println();     
           client.println("<HTML>");
           client.println("<HEAD>");
           client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");
           client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
           client.println("<link rel='stylesheet' type='text/css' href='http://www.progettiarduino.com/uploads/8/1/0/8/81088074/style3.css' />");
           client.println("<TITLE>Controllo Dispositivi da Remoto</TITLE>");
           client.println("</HEAD>");
           client.println("<BODY>");
           client.println("<H1>Controllo Dispositivi da Remoto</H1>");
           client.println("<hr />");
           client.println("
");  
           client.println("<H2>Arduino UNO con Ethernet Shield</H2>");
           client.println("
");  
           client.println("<a href=\"/?button1on\"\">ALLARME</a>
");          
           client.println("
");
           client.println("
");
           client.println("<a href=\"/?button2on\"\">LUCI</a>
");          
           client.println("
");
           client.println("
");
           client.println("<a href=\"/?button3on\"\">CANCELLO</a>
");          
           client.println("
");
           client.println("
"); 
           client.println("</BODY>");
           client.println("</HTML>");
     
           delay(1);
           client.stop();
           //Controlli su Arduino: Se è stato premuto il pulsante sul webserver
           if (readString.indexOf("?button1on") >0){
               digitalWrite(ALLARME, LOW);
               delay(1200);
               digitalWrite(ALLARME, HIGH);
           }
           if (readString.indexOf("?button2on") >0){
               digitalWrite(LUCI, LOW);
               delay(400);
               digitalWrite(LUCI, HIGH);  
           }
           if (readString.indexOf("?button3on") >0){
               digitalWrite(CANCELLO, LOW);
               delay(400);
               digitalWrite(CANCELLO, HIGH);  
           }
           
            //Cancella la stringa una volta letta
            readString="";  
           
         }
       }
    }
}
}

Naturalmente per voi non dovrebbe essere difficile, mi aiutate?
Fabio

Ho capito, doveva essere una domanda strampalata, probabilmente anche il codice è ancora più strampalato. Evvabbè, magari mi sarà di stimolo per un approfondimento personale :).

Grazie comunque per l'attenzione.
Fabio