C++ 从com端口C+读取+;

C++ 从com端口C+读取+;,c++,arduino,fstream,C++,Arduino,Fstream,我正在尝试与Arduino微控制器通信。这在C语言中是很容易做到的,但是我不能用C++来理解。这是我的arduino代码 void loop() { if (Serial.available() > 0) { byte input = Serial.read(); Serial.write(input); } } 所以你送去arduino的任何东西都会被送回给你 我能够使用fstream库读写它。问题是当我试图从缓冲区读取数据时,什么都没有 int main(

我正在尝试与Arduino微控制器通信。这在C语言中是很容易做到的,但是我不能用C++来理解。这是我的arduino代码

void loop()
{
  if (Serial.available() > 0)
  {
    byte input = Serial.read();
    Serial.write(input);
  }
}
所以你送去arduino的任何东西都会被送回给你

我能够使用fstream库读写它。问题是当我试图从缓冲区读取数据时,什么都没有

int main(int argc, char** argv)
{
fstream filestr;
filestr.open ("COM4", fstream::in | fstream::out | fstream::trunc);

if (!filestr.is_open())
{
    cout << "error opening port";
}
else
{
    cout << "port opened";
}

char* input = new char();
cin >> input;
filestr.write(input, 1);
filestr.flush();

char * buffer = new char [1];
buffer[0] = -1;

filestr.read (buffer,1);
while ((int)buffer[0] == -1)
{
    filestr.read (buffer,1);
}
cout << buffer[0];

cin >> input;

filestr.close();
return 0;  
}
int main(int argc,char**argv)
{
fstream文件tr;
filestr.open(“COM4”,fstream::in | fstream::out | fstream::trunc);
如果(!filestr.is_open())
{
不能输入;
filestr.write(输入,1);
filestr.flush();
char*buffer=新字符[1];
缓冲区[0]=-1;
filestr.read(缓冲区,1);
而((int)缓冲区[0]=-1)
{
filestr.read(缓冲区,1);
}
cout>输入;
filestr.close();
返回0;
}

所以我发送一些数据并开始循环读取,直到arduino响应。第一次读取不会得到任何回复,因为arduino没有时间响应,所以我一直读取,直到它得到数据。但我似乎从来没有得到响应。如果我在第一次读取之前稍微延迟一点,并给arduino响应时间,这是可行的d、 当我读取某个内容时,读卡器的位置是否向前移动?当我从缓冲区读取某个内容时,读卡器是否会自动从缓冲区中删除?有人知道如何执行此操作吗?

您应该获取arduino firmata windows工具的代码。它完成了您尝试执行的所有操作


检查关于使用Boost Asio读取串行端口的另一个问题:

什么平台?它在Windows上吗?fstream不是一件很好的事情,因为它隐藏了低级错误。