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

How to receive strings from Arduino in C++?

本文关键字:字符串 Arduino 中从 c++      更新时间:2023-10-16

嘿,我有从Arduino接收字符串的问题。我在linux上运行,我想使用c++。我可以很容易地从c++代码发送字符串到arduino。为此,我使用像这样的c++代码。

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    fstream arduino("/dev/ttyACM0");
    arduino << "Led onn";
    arduino.close();
    return 0;
}

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

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

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

希望有帮助!

使用boost。asio与串行设备和c++进行通信。它像一个魅力,很容易使用。参见:http://www.boost.org/doc/libs/1_40_0/doc/html/boost_asio/overview/serial_ports.html和这个:从串行端口读取Boost Asio

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

修改这段代码来满足你的需要应该不难。

int Serial::waitForResponse()
{
    const int buffSize = 1024;
    char bufferChar[buffSize] = {''};
    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] = '';
            wholeAnswer += std::string(bufferChar);
        } else
        {
            noDataTime++;
            usleep(1000);
        }
    }
    if(!wholeAnswer.empty())
    {
        return 1;
    } else
    {
        return -1;
    }