Bonjour,
A mon avis le probléme est trés simple.
String page est une variable local, avant de quitter la fonction celle ci sera désallouer, or tu fait un return de cette variable.
Celle ci n'existant plus au moment du return tu te retrouve avec n'importe quoi.
Essaye avec un passage par référence :
// Passage de "page" par référence (équivalent d'un passage par pointeurs, sans pointeurs)
void readFile(String &page, char *filename){
page = ""; // Vide la String
File fi = SD.open(filename); // Ouverture du fichier
if (!fi) { // Gestion d'erreur
Serial.print("Erreur open() ");
Serial.println(filename); // Message d'erreur
return;
}
while (fi.available()) // Lecture jusqu'a EOF
page += fi.read(); // Ajout d'un char à la String
fi.close(); // Fermeture du fichier
}
PS: charger un fichier entièrement en ram est la pire des mauvaise idées, tu n'as que 2Ko de ram sur une carte arduino, et seulement 500 octets de libre une fois que la librairie SD est chargé.
A moins que ton fichier ne fasse que quelques caractéres (une dizaine par exemple) tu auras des problémes de manque de ram très rapidement.