Communication C ++ bidirectionnelle sur une connexion série

Je suis en train d'écrire un simple application C++ pour communiquer avec un Arduino. Je voudrais vous envoyer de l'Arduino un personnage qu'il renvoie immédiatement. Le code Arduino que j'ai pris à partir d'un tutoriel ressemble à ceci:

void setup()
{
    Serial.begin(9600);
}

void loop()
{
    //Have the Arduino wait to receive input
    while (Serial.available()==0);

    //Read the input
    char val = Serial.read();

    //Echo
    Serial.println(val);
}

Je peux communiquer avec l'Arduino facilement à l'aide de GNU screen, donc je sais que tout fonctionne bien avec la de base de la communication:

$ screen /dev/tty.usbmodem641 9600

L' (cassé) code C++ que j'ai ressemble à ceci:

#include <fstream>
#include <iostream>
int main()
{
    std::cout << "Opening fstream" << std::endl;
    std::fstream file("/dev/tty.usbmodem641");
    std::cout << "Sending integer" << std::endl;
    file << 5 << std::endl; //endl does flush, which may be important
    std::cout << "Data Sent" << std::endl;
    std::cout << "Awaiting response" << std::endl;
    std::string response;
    file >> response;
    std::cout << "Response: " << response << std::endl;

    return 0;
}

Il compile bien, mais lors de l'exécution, des lumières clignotent sur l'Arduino et le terminal se bloque à:

Ouverture fstream

Où vais-je tort?

source d'informationauteur learnvst