串行通信c ++ SerialPort-Class

时间:2017-02-06 20:48:14

标签: c++ serial-port

首先 - 我是来自德国的学生,请原谅我的英语不好。 目前,我正在开发一个项目,目标是通过xbee模块通过串行通信控制arduino板上的伺服电机。 所以现在我正在研究SerialPort但是使用write()来解决问题。

我的计划是通过串口发送由逗号分隔的整数值。 Visual Studio报告错误,并表示没有适合的参数类型。 我真的不知道如何处理这个问题,因为我对整个编程主题都是全新的。

   #include <iostream>
using namespace std;
#using <System.dll>;

using namespace System;
using namespace System::IO::Ports;
using namespace System::Threading;

int main() {
    unsigned char values[2] = { 50, 120 };
    SerialPort^ mySerialPort = gcnew SerialPort("COM3");
        mySerialPort->BaudRate = 9600;
        mySerialPort->Open();
while (true) {

            mySerialPort->Write(values);

    }
}

1 个答案:

答案 0 :(得分:0)

您可以这样修复:

#include <iostream>
using namespace std;
#using <System.dll>

using namespace System;
using namespace System::IO::Ports;
using namespace System::Threading;

int main() {
  // Managed array
  cli::array<unsigned char> ^values = { 50, 120 };
  SerialPort^ mySerialPort = gcnew SerialPort("COM3");
  mySerialPort->BaudRate = 9600;
  mySerialPort->Open();
  while (true) {

    // some work with values goes here...

    // We should specify buffer offset and length
    mySerialPort->Write(values, 0, values->Length);
  }
}

正如您所注意到的,您也可以将此数据作为字符串发送:

mySerialPort->WriteLine(String::Format("val1 = {0}; val2 = {1}", values[0], values[1]));

但要注意mySerialPort->Write()发送原始字节,而mySerialPort->WriteLine()将每个字符作为单个字节发送。 例如:

cli::array<unsigned char> ^buffer = {123};

// Send one single byte 0x7b
mySerialPort->Write(buffer, 0, buffer->Length);

// Send 3 bytes (0x49, 0x50, 0x51)
mySerialPort->WriteLine(String::Format("{0}", buffer[0]));