Arduino Shield Ethernet : Vitesse du client.read

Bonjour,
j’ai créé un mini-serveur pour afficher des images et recevoir des requêtes à l’aide des librairies SPI et Ethernet.
Le problème est le temps d’affichage surement dû au peu d’efficacité de ma méthode pour lire la requête.
J’ai essayé de voir se que renvoyait client.available pour pouvoir anticiper le nombre de bits à lire mais il ne renvoyait jamais un nombre nul
J’aimerait savoir si il est possible de rendre plus efficace les lignes :

      c = client.read();
      buffer +=c;
      GetPosition = buffer.indexOf("GET /");
      HTTPPosition = buffer.indexOf(" HTTP");
      requeteHTML = buffer.substring(GetPosition+5, HTTPPosition);
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,49);
EthernetServer server(80);
String readString;
File webFile;
int GetPosition;
int HTTPPosition;
char c;
int n;
byte buf[2048];
String buffer;
static String requeteHTML;
void setup(){
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
  server.begin();
  if(!SD.begin(4)){
    Serial.println("ERREUR");
    return;
  }
}

void loop(){
  EthernetClient client = server.available();
  if (client){
  buffer = "";
  while (client.connected()){
    if (client.available()){
      c = client.read();
      buffer +=c;
      GetPosition = buffer.indexOf("GET /");
      HTTPPosition = buffer.indexOf(" HTTP");
      requeteHTML = buffer.substring(GetPosition+5, HTTPPosition);
      if (c == '\n'){       
      if (requeteHTML.endsWith(".png")){
        webFile = SD.open("Shasse/"+requeteHTML);
        if (webFile){
          while (1){
            n = webFile.available();
            if (n == 0) break;
            if (n > 2048) n = 2048;
            webFile.read(buf, n);
            client.write(buf, n);
            }
          webFile.close();
        }
      }
      else{
        webFile = SD.open("Shasse/Shasse.txt");
        if (webFile){
          while (1){
            n = webFile.available();
            if (n == 0) break;
            if (n > 2048) n = 2048;
            webFile.read(buf, n);
            client.write(buf, n);
            }
          webFile.close();
        }
      }
      break;
    }
    }
  }
  client.stop();
  }
}

Merci d’avance.
->jcomble

pour rendre votre code plus efficace il faut commencer par virer la classe String.

Du code comme cela

c = client.read();
buffer +=c;

va morceler rapidement votre mémoire et au bout d'un moment ça va planter.

votre temps d'affichage cependant n'est pas dû à cela mais sans doute à la lenteur de l'envoi des données. Quel arduino utilisez vous d'ailleurs parce qu'un webFile.read(buf, n);avec n valant 2048 ça mange bcp de mémoire sur un UNO... (et ce n'est pas la taille optimale pour un buffer de la carte SD sans doute)

Bonsoir
à titre de simple renseignement
j'avais il y a déjà qq années constaté ceci concernant le partage SPI entre shield ethernet carte µSD sur UNO