tenez voici un exemple effectué à partir du code de mon tuto mentionné plus haut
const byte tailleMessageMax = 15;
char message[tailleMessageMax + 1]; // +1 car on doit avoir un caractère de fin de chaîne en C, le '\0'
const char marqueurDeFin = '\n';
boolean ecouter()
{
static byte indexMessage = 0; // static pour se souvenir de cette variable entre 2 appels consécutifs. initialisée qu'une seule fois.
boolean messageEnCours = true;
while (Serial.available() && messageEnCours) {
int c = Serial.read();
if (c != -1) {
switch (c) {
case marqueurDeFin:
message[indexMessage] = '\0'; // on termine la c-string
indexMessage = 0; // on se remet au début pour la prochaine fois
messageEnCours = false;
break;
case '\r': // on ignore le \r
break;
default:
if (indexMessage <= tailleMessageMax - 1) message[indexMessage++] = (char) c; // on stocke le caractère et on passe à la case suivante
else Serial.println(F("j'ignore!"));
break;
}
}
}
return messageEnCours;
}
void setup() {
Serial.begin(115200);
}
void loop() {
if (! ecouter()) {
// on a reçu le marqueur de fin
Serial.print(F("Phrase: [")); Serial.print(message); Serial.println(F("]"));
if (strlen(message) >= 10) { // on attend un code du genre 1111100010
char buf1[6], buf2[6];
memcpy(buf1, message, 5); // on copie les 5 premiers octets dans buf1
buf1[5] = '\0'; // on termine buf1 par un caractère nul pour faire une cString
memcpy(buf2, message + 5, 5); // on copie les 5 octets suivants dans buf2
buf2[5] = '\0'; // on termine buf2 par un caractère nul pour faire une cString
// ICI buf1 et buf2 sont utilsables pour faire
// mySwitch.switchOn(buf1, buf2);
// ici j'imprime juste pour montrer ce que ça donne
Serial.print(F("mySwitch.switchOn(\""));
Serial.print(buf1);
Serial.print(F("\",\""));
Serial.print(buf2);
Serial.println(F("\");"));
} else Serial.println(F("MESSAGE TROP COURT"));
}
// ici on peut faire autre chose
}
si je charge ce code et que j'ouvre la console série (configurée à 115200 bauds et envoyant \n ou \r\n quand on valide une entrée) et que je tape 01234ABCDE et que je valide, la console série me dit
[sub][color=purple]Phrase: [01234ABCDE]
mySwitch.switchOn("01234","ABCDE");
[/color][/sub]
On voit donc bien qu'on a correctement découpé les blocs de 5 caractères (octets)
et si je tape COUCOU, la console me dit
[sub][color=purple]Phrase: [COUCOU]
MESSAGE TROP COURT[/color][/sub]
parce que le code test si on a reçu au moins 10 caractères par le testif (strlen(message) >= 10) { (le buffer peut en comprendre 15 - défini par tailleMessageMax)