因此,我正在使用Visual Studios Windows窗体创建GUI,以便将数据发送到Arduino。我一直在测试如何在Arduino端接收数据,但似乎找不到关于如何发送数据的解释。我一直在使用port.Write()
发送缓冲区。
port.Write
Information from the Microsoft page
Arduino串行监视器读取ASCII字符,但是由于我使用的是GUI与Arduino通信,因此我不确定如何传输数据。在Arduino串行监视器中,我输入数据,然后按Enter。这意味着,如果我输入了所有数据并按Enter,它将读取所有数据为1个字节。通过分别输入数据,然后输入,将读取一个字节并以换行符终止。
数据传输的准确度如何?从MS页面开始,因为它说“它使用来自缓冲区的数据将指定数量的字节写入串行端口”,我假设它是同时发送所有字节的,而不是单独发送的。
i.e如果我以port.Write(new byte[] { b0, b1, b2, b3, b4, b5, b6, b7}, 0, 8);
的形式发送数据,是基本上一次发送所有8个字节,还是单独发送每个元素,如果是,字节之间的终止是什么?我认为这是第一个,因为它要求写入的字节数(计数),因此它从数组发送8个字节。
在传输期间在字节之间终止的是什么?逗号分隔数组数据,但在传输时,它是否甚至发送逗号来终止或只是数据流?
即。在运行代码的串行监视器中,我分别输入每个字节,然后输入换行符。然后,Arduino读取字节,直到遇到换行符
在C ++中的Arduino上,您可以使用Serial.print或Serial.println使它自动应用新行。在MS页面上,WriteLine方法仅写入一个字符串,并且没有任何重载,因此我认为这意味着无法通过此命令使用字节吗?
如果我尝试使用for循环打印单个数组,则说无法从byte
转换为char[]
。当我将其定义为字节数组时,为什么说它是一个char数组?
我以前使用/// port.Write(sendbyte, 0, 8);
发送整个数组并获取了一些数据。
要从Windows Form GUI发送的代码:
//bytes declared and data stored earlier
byte[] sendbyte = new byte[] { b1, b2, b3, b4, b5, b6, b7, b8};
port = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
port.Open();
//port.Write(sendbyte, 0, 8);
port.Write(new byte[] { b1, b2, b3, b4, b5, b6, b7, b8}, 0, 8);
/*for( int x = 0; x <=7; x ++)
{
port.Write( sendbyte[x], 0, 1);
}
*/
port.Close();
读取传入字节的代码
void recvBytesWithStartEndMarkers() {
static boolean recvInProgress = false;
static byte ndx = 0;
byte startMarker = 42;
byte endMarker = 24;
byte rb;
byte comp;
while (Serial.available() > 0 && newData == false)
{
rb = Serial.read();
if (recvInProgress == true)
{
if (rb != endMarker)
{
receivedBytes[ndx] = rb;
ndx++;
if (ndx >= numBytes)
{
ndx = numBytes - 1;
}
}
else
{
receivedBytes[ndx] = ','; // terminate the string
recvInProgress = false;
numReceived = ndx; // save the number for use when printing
ndx = 0;
newData = true;
}
}
else if (rb == startMarker)
{
recvInProgress = true;
}
}
}
答案 0 :(得分:2)
串行端口通常是缓冲的,但是Microsoft文档使我相信它会一次将整个缓冲区都写到线路上,因为它可能引发超时异常。但是,如果您一次从Windows写入1000个字节,则不能保证在arduino的每个循环中读取相同数量的字节。
各个字节之间没有定界符。分隔数组字节的逗号实际上只是您编程语言的语法,即。它仅存在于您的代码文件中。字节总是按顺序排列在内存中。
否,除非将字节数组转换为字符串值。 How convert byte array to string
尝试port.Write(&sendByte [x],0,1);