Two-way C++ communication over serial connection

Viewed 31199

I am trying to write a really simple C++ application to communicate with an Arduino. I would like to send the Arduino a character that it sends back immediately. The Arduino code that I took from a tutorial looks like this:

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

I can communicate with the Arduino easily using GNU screen, so I know that everything is working fine with the basic communication:

$ screen /dev/tty.usbmodem641 9600

The (broken) C++ code that I have looks like this:

#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;
}

It compiles fine, but when running it, some lights flash on the Arduino and the terminal just hangs at:

Opening fstream

Where am I going wrong?

3 Answers
Related