Arduino e le scelte

Sono riuscito a fare il programma che mi serviva, l'unico intoppo e' che se dopo aver fatto la prima scelta, non riapro il web server su una nuova pagina web, ogni tanto mi da un problema di rallentamento.
Questo puo' essere dovuto al browser?

#include <Ethernet.h> //libreria ethernet
#include <SPI.h> //collabora con la libreria ethernet
#include <String.h> //gestione stringhe
int flag = 0;
int tempo = 0;
int led = 0;
//dati Ethernet shield
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //indirisso fisico
EthernetServer server(80); //imposto porta protocollo HTTP
String ascoltatore1; //dichiarazione stringa
String ascoltatore2; //dichiarazione stringa

void setup() {
  Serial.begin(9600);

  //Ethernet shield
  Ethernet.begin(mac); //inizializzazione
  server.begin(); //avvio server
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP()); //stampa indirizzo del server
}

void loop() {

  if (flag == 0) {
    EthernetClient client = server.available(); //attendo l'arrivo di un client
    if (client) { //se c'è il cliente deve..
      boolean currentLineIsBlank = true;

      while (client.connected()) {
        if (client.available()) {

          char c = client.read(); //..leggere i caratteri che invia
          ascoltatore1.concat(c); //concatena i caratteri del client
          if (c == '\n' && currentLineIsBlank) { //se arrivo a fine riga
            if (ascoltatore1.indexOf("/?rosso") > 0) { //controllo che nell'url ci sia rosso
              led = 1;
              flag = 1;
              Serial.println("flag");
              Serial.println(flag);
              Serial.println("led");
              Serial.println(led);
            }
            else if (ascoltatore1.indexOf("/?verde") > 0) { //controllo che nell'url ci sia verde
              led = 2;
              flag = 1;
              Serial.println("flag");
              Serial.println(flag);
              Serial.println("led");
              Serial.println(led);
            }
            client.print(
              "HTTP/1.1 200 OK\r\n"
              "Content-Type: text/html\r\n"
              "Connection: close\r\n"  // la connessione viene chiusa dopo la risposta
              "\r\n");
            client.print("<!DOCTYPE HTML>\r\n");
            client.println(); //necessario per non buggare
            client.print("<html>\r\n");
            client.println("<head>\r\n");
            client.println("<title>\r\n");
            client.println("DAMBOBOTS");
            client.println("</title>\r\n");
            client.println("<link rel='shortcut icon' type='image/x-icon' href='http://i44.servimg.com/u/f44/16/84/89/65/23570310.png' />");
            client.println("</head>\r\n");
            client.println("<body>\r\n");
            client.println("<center>\r\n");
            client.println("<h1>\r\n");
            client.println("DAMBOBOTS ");
            client.println("</h1>\r\n");
            client.println("<a href='/?rosso'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/avanti.gif\" width='200' height='150' ></a>\r\n");
            client.println("<a href='/?verde'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/indietro.gif\" width='200' height='150' ></a>\r\n");
            client.println("</body>\r\n");
            client.println("</html>\r\n");
            ascoltatore1 = "";
            break;
          }
          if (c == '\n') {
            //scrive una nuova riga
            currentLineIsBlank = true;
          }
          else if (c != '\r') {
            // riceve un carattere sulla linea
            currentLineIsBlank = false;
          }
        }
      }
      delay(10);
      client.stop();
    }
  }
  if (flag == 1) {
    EthernetClient client = server.available(); //attendo l'arrivo di un client
    if (client) { //se c'è il cliente deve..
      boolean currentLineIsBlank1 = true;
      while (client.connected()) {
        if (client.available()) {
          char d = client.read();
          ascoltatore2.concat(d);
          if (d == '\n' && currentLineIsBlank1) { //se arrivo a fine riga
            if (ascoltatore2.indexOf("/?10_sec") > 0) { //controllo che nell'url ci sia 10_sec
              tempo = 1;
              flag = 2;
              Serial.println("flag");
              Serial.println(flag);
              Serial.println("tempo");
              Serial.println(tempo);
            }
            else if (ascoltatore2.indexOf("/?5_sec") > 0) { //controllo che nell'url ci sia 5_sec
              tempo = 2;
              flag = 2;
              Serial.println("flag");
              Serial.println(flag);
              Serial.println("tempo");
              Serial.println(tempo);
            }
            else if (ascoltatore2.indexOf("/?15_sec") > 0) { //controllo che nell'url ci sia 15_sec
              tempo = 3;
              flag = 2;
              Serial.println("flag");
              Serial.println(flag);
              Serial.println("tempo");
              Serial.println(tempo);
            }
            else if (ascoltatore2.indexOf("/?7_sec") > 0) { //controllo che nell'url ci sia 7_sec
              tempo = 4;
              flag = 2;
              Serial.println("flag");
              Serial.println(flag);
              Serial.println("tempo");
              Serial.println(tempo);
            }

            client.print(
              "HTTP/1.1 200 OK\r\n"
              "Content-Type: text/html\r\n"
              "Connection: close\r\n"  // la connessione viene chiusa dopo la risposta
              "\r\n");
            client.print("<!DOCTYPE HTML>");
            client.println(); //necessario per non buggare
            client.print("<html>\r\n");
            client.println("<head>\r\n");
            client.println("<title>\r\n");
            client.println("DAMBOBOTS");
            client.println("</title>\r\n");
            client.println("<link rel='shortcut icon' type='image/x-icon' href='http://i44.servimg.com/u/f44/16/84/89/65/23570310.png' />");
            client.println("</head>\r\n");
            client.println("<body>\r\n");
            client.println("<center>\r\n");
            client.println("<h1>\r\n");
            client.println("DAMBOBOTS ");
            client.println("</h1>\r\n");
            client.println("<a href='/?10_sec'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/ferma.jpg\" width='200' height='150' ></a>");
            client.println("<a href='/?5_sec'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/destra.gif\" width='200' height='150' ></a>");
            client.println("<a href='/?15_sec'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/sinistra.gif\" width='200' height='150' ></a>");
            client.println("<a href='/?7_sec'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/automatica.gif\" width='200' height='150' ></a>");
            client.println("</body>");
            client.println("</html>");
            ascoltatore2 = "";
            break;
          }
          if (d == '\n') {
            //scrive una nuova riga
            currentLineIsBlank1 = true;
          }
          else if (d != '\r') {
            // riceve un carattere sulla linea
            currentLineIsBlank1 = false;
          }
        }
      }
      delay(10);
      client.stop();
    }
  }
  if (flag == 2) {
    azioni();
  }
}

void azioni() {
    if (led == 1 && tempo == 1) {
    Serial.println("rosso per 10sec");
  }
  else if (led == 1 && tempo == 2) {
    Serial.println("rosso per 5sec");
  }
  else if (led == 1 && tempo == 3) {
    Serial.println("rosso per 15sec");
  }
  else if (led == 1 && tempo == 4) {
    Serial.println("rosso per 7sec");
  }
  else if (led == 2 && tempo == 1) {
    Serial.println("verde per 10sec");
  }
  else if (led == 2 && tempo == 2) {
    Serial.println("verde per 5sec");
  }
  else if (led == 2 && tempo == 3) {
    Serial.println("verde per 15sec");
  }
  else if (led == 2 && tempo == 4) {
    Serial.println("verde per 7sec");
  }
}

Questo e' il programma funzionante.