如何在C ++中从Arduino接收字符串?

时间:2014-06-13 12:04:32

标签: c++ arduino

嘿我从Arduino接收字符串时遇到问题。我在linux上运行,我想使用C ++ fotr。我很容易从C ++代码发送字符串到arduino。为此,我使用这样的C ++代码。

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    fstream arduino("/dev/ttyACM0");
    arduino << "Led on\n";
    arduino.close();

    return 0;
}

那么如何从Arduino接收字符串?

3 个答案:

答案 0 :(得分:2)

我不是Arduino专家,但从我的代码中我得出结论:

  • 您正在使用串行接口发送数据
  • 您应该将串行接口连接到计算机(使用传统的串行电缆或USB)
  • 编写一个C ++应用程序,打开并从串口接收数据。见this
  • 从Arduino规范中了解Arduino使用的串行通信参数(停止位,奇偶校验位,波特率等),并使用这些参数在C ++应用程序中配置串口!

希望有所帮助!

答案 1 :(得分:0)

使用boost.asio与串行设备和C ++进行通信。它就像一个魅力,非常容易使用。请参阅:http://www.boost.org/doc/libs/1_40_0/doc/html/boost_asio/overview/serial_ports.html和此:Reading from serial port with Boost Asio

答案 2 :(得分:-1)

下面的代码等待来自arduino的响应。如果响应包含“Done”,则返回1.如果在给定的超时内没有找到它,则返回-1。

不应该证明难以更改此代码以满足您的需求。

int Serial::waitForResponse()
{
    const int buffSize = 1024;
    char bufferChar[buffSize] = {'\0'};
    int counter = 0;
    std::string wholeAnswer = "";

    int noDataTime = 0;

    while(wholeAnswer.find("Done") == std::string::npos) //Done string was found.
    {
        if(noDataTime > 10000)
        {
            std::cout << "timeout" << std::endl;
            return -1;
        }
        counter = read(this->hSerial, bufferChar, buffSize - 1);

        if(counter > 0)
        {
            noDataTime = 0;
            bufferChar[counter] = '\0';
            wholeAnswer += std::string(bufferChar);
        } else
        {
            noDataTime++;
            usleep(1000);
        }
    }
    if(!wholeAnswer.empty())
    {
        return 1;
    } else
    {
        return -1;
    }