J'avais testé d'afficher la RAM dispo avec freeRAm et je suis aux alentours de 127-147. Ce n'est pas suffisant?
Vu le code je dirai que non, c'est un cas typique de manque de RAM.
(et comme par hasard le code utilise des String, coïncidence ? Je pense pas ...)
Tu as un exemple de déclaration?
Je dois faire : char[]= F("TEST"); ?
const char[] toto PROGMEM = "toto" ;
http://www.arduino.cc/en/Reference/PROGMEM
Mais en y regardant bien tu utilises ces constantes qu'une seule fois ... c'est donc inutile de les rendre globales ...
Fait directement un F("le texte du bouton") dans le client.print() qui va bien.
Comment je les mets en flash? toujours avec le F("...") ?
Avant :
Serial.println("toto");
Aprés :
Serial.println(F("toto"));
A la place de string je mets quoi?
Des tableaux de char classique, comme devrais le faire tout bon développeur sur microcontrôleurs.
Au moins ça t'oblige à faire un code structuré, pas des trucs du genre HTMLmachin += "<hr>....", avec des String de partout ...
Comment je procède pour faire ça?
Tu fait tes client.print() au moment où tu veut envoyer les info au lieu de les stocker en RAM puis de tout envoyer d'un coup.
Avant :
ChaineHTML = "<TD><FORM METHOD='GET' ACTION='/a'><INPUT TYPE='submit' VALUE='";
ChaineHTML += libelleBoutonAOn;
ChaineHTML += "' ></FORM></TD>";
Aprés :
client.print(F("<TD><FORM METHOD='GET' ACTION='/a'><INPUT TYPE='submit' VALUE='"));
client.print(F("le texte du bouton"));
client.print(F("' ></FORM></TD>"));
Peut-être que le Wire.print ça fonctionne mais moi j'ai fait un Wire.write, pour lequel cela ne fonctionne pas.
J'ai essayé hier soir un Wire.write(i) le problème c'est que je reçois un caractère bizarre de l'autre coté (sur la Nano en réception)
Faire un Wire.write(tableau, taille) d'un tableau de char revient à faire un Wire.print(), en moins bien.
Faire un Wire.write(pointeur) revient à envoyer l'adresse du pointeur ... c'est pas du tout ce que tu veut

Tu ne sembles pas encore faire la différence entre envois binaire et envois textuel.
Regarde "ASCII CODE" sur google tu comprendras pourquoi tu reçois des trucs bizarre

Tu veux dire si l'int est <=255? je déclare byte i=0; ?
Ben oui ...
Si tu as besoin de garder 100ml d'eau tu prend pas une bassine ?
Pareil en programmation si tu veut stocker une valeur <=255 tu prends un byte, ça suffit.
Ce qui est bizzare c'est que quand je zappe une partie du code, le reste fonctionne, donc je pensais que c'était plutot du à un manque de mémoire morte (là ou on stoke le programme compilé) plutot que vive non?
Si tu manquais de ROM le compilateur t'enverrais chier en te disant que la section ".text" de ton programme ne passe pas en mémoire.
Même en forçant le compilateur (enfin le linker pour être précis) l'upload ne fonctionnerai pas, lors de la vérification il y aurait forcément une erreur.
C'est donc forcément un problème de RAM
