Transfert de chaînes de caractères du moniteur série vers la carte Arduino avec readString et readStringUntil
Les fonction Serial.readString()
et Serial.readStringUntil(sep)
permettent de récupérer un ensemble de données convertie en objet String
(avec une majuscule), objet permettant une manipulation facile des chaînes de caractères.
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/
La fonction Serial.readString()
lit les données pendant 1 seconde, par défaut. Le programme est bloqué pendant cette durée. La fonction Serial.setTimeout(val)
permet de définir la durée de lecture en millisecondes.
Exemple :
String data;
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available()>0) {
data = Serial.readString();
data.trim();
Serial.print("Reçu :");
Serial.println(data);
}
}
La fonction String.trim()
permet de supprimer les caractères de retour à la ligne.
La fonction readStringUntil(terminaison)
retourne les données lues jusqu’au caractère terminaison
exclu ; retourne NULL
si le caractère de terminaison n’est pas trouvé pendant une durée définie par Serial.setTimeout(val)
en millisecondes (1 s par défaut), ou s’il n’y a aucun caractère avant. La fonction est généralement moins bloquante que readString()
.
String data;
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available()>0) {
data = Serial.readStringUntil(10); // lit jusqu’au saut à la ligne
Serial.print("Reçu :");
Serial.println(data);
}
}
Les objets String()
peuvent être convertis en flottants ou entiers avec les méthodes : .toDouble(), .toFloat()
et .toInt()
.
Cela permet de transférer sous forme littérale des données numériques.
String data;
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available()>0) {
data = Serial.readStringUntil(10); // lecture jusqu’au retour à la ligne
Serial.print("2xReçu =");
Serial.println(data.toInt() * 2);
}
}
Ce programme retourne, sous la forme d’une chaîne de caractères, le double des données transmises à partir du moniteur série. Les données sont converties en un entier. Si 12.43
est transmis, 24
est retourné.
En utilisant .toFloat()
à la place de .toInt()
, c’est un flottant qui est recherché. 12
transmis retourne 24.00
et 12.4
retourne 24.80
.