所以我使用Visual Studio Windows窗体创建GUI,以便将数据发送到Arduino。我一直在测试如何在Arduino端接收数据,但似乎找不到关于数据如何发送的解释。我一直在使用端口。Write()
发送缓冲区。
端口。从Microsoft页面写入
信息
Arduino串行监视器读取ASCII字符,但由于我使用GUI与Arduino通信,所以我不确定数据是如何传输的。在Arduino串行监视器中,我输入数据并按enter键。这意味着,如果我输入所有数据并按enter键,它将以1字节的形式读取所有数据。通过分别输入数据,然后输入enter,可以读取一个字节,并以换行符终止。
>
数据到底是如何传输的?从MS页面来看,因为它说“使用缓冲区中的数据将指定数量的字节写入串行端口”,所以我假设它同时发送所有字节,而不是单独发送。
i、 e如果我以端口发送数据。写入(新字节[]{b0,b1,b2,b3,b4,b5,b6,b7},0,8)
基本上是一次发送全部8个字节,还是单独发送每个元素,如果是,字节之间的终止是什么?我假设这是第一次,因为它要求写入(计数)字节数,所以它从数组中发送8个字节。
在传输过程中,字节之间终止的是什么?逗号分隔数组数据,但在传输过程中,它是发送逗号终止还是只是一个数据流?
例如,在我的串行监视器中,代码运行时,我分别输入每个字节,后跟换行符。然后,Arduino读取字节,直到遇到换行符
在C中的Arduino上,您可以使用Serial.print或Serial.println让它自动应用新行。在MS页面上,WriteLine方法只写一个字符串,没有任何重载,所以我假设这意味着没有办法在这个命令中使用字节?
如果我尝试使用for循环来打印单个数组,它会说无法从
字节
转换为字符[]
。当我把它定义为字节数组时,为什么说它是一个字符数组?我之前使用的是//端口。写入(sendbyte,0,8)
发送整个阵列并获取部分数据。
要从Windows窗体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;
}
}
}
>
串行端口通常是缓冲的,但微软的文档让我相信它会将整个缓冲区一次写入线路,因为它可能引发超时异常。但是,如果一次从windows写入1000字节,则不能保证在arduino上的每个循环中读取相同数量的字节。
单个字节之间没有分隔符。分隔数组字节的逗号实际上只是编程语言的语法,也就是说,它只存在于代码文件中。字节在内存中总是按顺序排列的。
除非您将字节数组强制转换为字符串值。如何将字节数组转换为字符串
试试port。写(
我想通过Android中的media player对象播放现场流媒体。 因此,我计划从源读取缓冲区数据,并将其写入媒体播放器的缓冲区,请注意,我不会使用任何URL为媒体播放器的流源,音频缓冲区数据将以字节形式通过输入流接收。 到目前为止,我可以使用音频跟踪对象,但该方法只适用于未压缩的PCM数据
下面的代码尝试使用缓冲区将WAV文件的头写入流,然后将其写入可写流。 出于某种原因,文件的前8个字节是错误的: 第一行应该是: 这条线路有故障: 它需要:
我正在尝试向arduino的串行监视器发送一些数据,并使led亮起,但我还无法获取它。我的代码中有什么问题请检查这里是arduino代码 下面是java代码
每个人 我试图通过Python从中继板控制中继,并编写以下代码。不幸的是,我总是出错。有人能告诉我我做错了什么吗?对于构造,我链接了文档(参见第二个链接)。我还发现了另一个帖子,其中有人试图从中继板读取数据(参见第一个链接)。但是代码对我也不起作用。 致以最诚挚的问候 翻译为www.DeepL。com/Translator 有用信息 stackoverflow关于从Velleman K8090读取
(这与(或者相反)如果有足够的数据,FileChannel.read读取的字节会比指定的少吗?) TL;博士: 这会一直写入整个缓冲区吗。。。 ...或者有必要使用这样的循环: ? 由于另一个答案中的评论,我想问一下,通过调用向写入
问题内容: 从Windows,我可以使用以下命令与串行端口设备进行通信: 设备开始请求的操作。 当我尝试从独立的debian盒子或同一Windows机器的debian virtualbox实例完成相同的操作时,到目前为止我还没有运气。 这是等效的linux命令(至少我这样认为) 什么都没发生。 有人可以指导我正确的方向吗? 问题答案: 不会被解释,并且会按字面意义将字符串写入(并添加换行符)到指定