Cette page explique comment lire et écrire des chaînes de caractères à l'aide de la bibliothèque Serialib. Serialib est une bibliothèque multiplateforme écrite en C++.
La bibliothèque a été testée sous Windows et Linux. Ce projet a été développé avec Qt Creator et peut se compiler avec :
int serialib::writeString(const char *String);
La classe Serialib possède une méthode writeString()
qui reçoit un unique paramètre : une chaîne de caractères.
La chaîne doit être terminée par un zéro de fin de chaîne. Notez que le caractère null n'appartient pas à la chaîne, il n'est donc pas envoyé au périphérique série.
writeString()
retourne un entier:
1
en cas de succés-1
si une erreur s'est produite lors de l'envoi de la chaîneint serialib::readString ( char *receivedString,
char finalChar,
unsigned int maxNbBytes,
const unsigned int timeOut_ms=0);
La méthode readString()
lit une chaîne de caractères sur le périphérique série.
Cette méthode attend trois paramètres obligatoires et un paramètre optionnel :
receivedString
est une chaîne de caractères lue sur la liaison série et renvoyée par la fonction. Notez que la mémoire allouée doit être suffisamment grande pour stocker la chaîne.finalChar
est le caractère final de la chaîne. Lorsque ce caractère est reçu, la méthode arrête d'écouter le périphérique série et renvoie la chaîne lue avec un caractère nul à la fin.maxNbBytes
est le nombre maximum de caractères lus. Lorsque le nombre de caractères lus est égal à maxNbBytes
, la fonction ajoute un caractère nul et renvoie la chaîne, même si le caractère final n'a pas été reçu.timeOut_ms
[optionnel] est le délai d'attente en millisecondes. Lorsque le délai est écoulé, la fonction renvoie les caractères lus dans une chaîne de caractères terminée par Null. Si le délai d'attente est fixé à zéro ou non défini, le délai d'attente est désactivé.La fonction retourne le nombre d'octets lus (y compris le caractère nul) en cas de succès.
En cas de problème, la fonction renvoie l'une des valeurs suivantes :
0
le délai d'attente est atteint-1
erreur avec le time out-2
erreur lors de la lecture du caractère-3
le nombre maximum de caractères est atteint (MaxNbBytes
) L'exemple suivant écrit une chaîne de caractères terminée par un retour chariot. Puis il lit la chaîne reçue sur la liaison série. Cet exemple a été testé avec une Arduino qui renvoie chaque caractère reçu sur la liaison série après l'avoir mis en majuscule. Téléchargez l'exemple complet sur Github.
// Serial object
serialib serial;
// Connection to serial port
char errorOpening = serial.openDevice(SERIAL_PORT, 115200);
// If connection fails, return the error code otherwise, display a success message
if (errorOpening!=1) return errorOpening;
printf ("Successful connection to %s\n",SERIAL_PORT);
// Create the string
char buffer[15] = "hello\n";
// Write the string on the serial device
serial.writeString(buffer);
printf ("String sent: %s", buffer);
// Read the string
serial.readString(buffer, '\n', 14, 2000);
printf("String read: %s\n", buffer);
// Close the serial device
serial.closeDevice();
return 0 ;
Voici le code Arduino utilisé pour vérifier l'exemple :
// Return the returns the character received on Serial after capitalizing it
// More details on:
// https://lucidar.me/en/serialib/cross-plateform-rs232-serial-library/
// Setup, initialize
void setup() {
Serial.begin(115200);
}
// Loop forever
void loop() {
// If serial data is pending, read, capitalize and write the character
if (Serial.available())
Serial.write( toupper (Serial.read()) );
}
Si tout se passe bien, le code C devrait afficher quelque chose comme :
Successful connection to /dev/ttyACM0
String sent: hello
String read: HELLO