首先 - 我是来自德国的学生,请原谅我的英语不好。
目前,我正在开发一个项目,目标是通过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);
}
}
答案 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]));