Auteur Sujet: Lire et ecrire sur le port serie d'un Arduino Uno en C++  (Lu 1491 fois)

Claudius29

  • Newbie
  • *
  • Messages: 1
    • Voir le profil
Lire et ecrire sur le port serie d'un Arduino Uno en C++
« le: juillet 15, 2024, 01:55:37 am »
Bonjour,
Dans le cadre d'un projet plus important en C++ pour piloter un reseau depuis mon PC, je souhaite dans un premier temps, écrire et lire sur le port serie d'un Arduino à partir d'un programme en C++ sur mon PC. En d'autre termes faire la même chose que le Serial Monitor de l'IDE Arduino.
Je ne trouve pas de programme en C++ qui fonctionne.
Merci d'avance.
Claudius29

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1035
  • HO avec DCC++
    • Voir le profil
Re : Lire et ecrire sur le port serie d'un Arduino Uno en C++
« Réponse #1 le: juillet 15, 2024, 10:34:08 pm »
Bonsoir Claudius,

J'avais fait une réponse mais un peu rapide, je croyais que c'était pour communiquer entre deux Arduino.

Mais à partir d'un ordi ce n'est pas beaucoup plus compliqué

// Code pour l'Arduino

void setup() {
  Serial.begin(9600);  // Initialiser la communication série à 9600 bauds
}

void loop() {
  // Vérifier si une donnée a été reçue de l'ordinateur
  if (Serial.available() > 0) {
    String request = Serial.readStringUntil('\n');
    Serial.print("Reçu de l'ordinateur: ");
    Serial.println(request);

    // Répondre à l'ordinateur
    Serial.println("Bonjour Ordinateur!");
  }
}


#include <iostream>
#include <boost/asio.hpp>
#include <boost/asio/serial_port.hpp>
#include <boost/asio/serial_port_base.hpp>

using namespace boost::asio;

int main() {
    io_service io;
    serial_port serial(io, "COM3");  // Remplacer "COM3" par le port série utilisé par votre Arduino

    serial.set_option(serial_port_base::baud_rate(9600));
    serial.set_option(serial_port_base::character_size(8));
    serial.set_option(serial_port_base::parity(serial_port_base::parity::none));
    serial.set_option(serial_port_base::stop_bits(serial_port_base::stop_bits::one));
    serial.set_option(serial_port_base::flow_control(serial_port_base::flow_control::none));

    // Envoyer un message à l'Arduino
    std::string message = "Bonjour Arduino!\n";
    write(serial, buffer(message.c_str(), message.size()));

    // Lire la réponse de l'Arduino
    char reply[128];
    read(serial, buffer(reply, 128));

    std::cout << "Réponse de l'Arduino: " << reply << std::endl;

    return 0;
}


Tu vérifiras, c'est pas testé entre autres choses les lib mais le principe est là

Christophe