Salut,
La première erreur que je vois est tout simplement l'emploi des String xD Sinon un pinMode peut s'executer n'importe quand.
Comme je ne m'en sers jamais en plus j'ai du mal à comprendre ton code puisqu'il utilise plein de fonction de la classe ... Du coup je prefère te donner mon approche qui réduirait considérablement la taille du code :
La trame serait de la forme 000101001 pour la définition des directions des pin + à la suite une autre pour leurs états. Côté arduino tu n'as plus qu'à réceptionner cette trame dans un tableau de char, puis faire une boucle pour tout configurer, genre :
for (int i=0;i<10;i++){ // je suppose que tu as 10 pins à configurer
pinMode(MappingPin[i],byte(Buffer[i])); // MappingPin[] contiendra les numéros de tes ports, ça permet de ne pas être obliger qu'ils se suivent, Buffer[] contient la trame série. INPUT=0 OUTPUT=2 INPUT_PULLUP=2
digitalWrite(MappingPin[i],byte(Buffer[i+10]));
}
je suis juste pas sûr de mon coup du byte(Buffer[]), et j'ai pas de board la pour vérifier.