Comment lire et écrire des chaînes de caractères sur le port série en C/C++ ?

Introduction

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 :

writeString

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:

readString

int 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 :

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 :

Exemple

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 ;

Code Arduino

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()) );
}

Sortie

Si tout se passe bien, le code C devrait afficher quelque chose comme :

Successful connection to /dev/ttyACM0
String sent: hello
String read: HELLO

Voir aussi


Dernière mise à jour : 04/04/2023