『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 481|回复: 4

[技术探讨] 初学者请教关于串口读取

[复制链接]

2

主题

9

帖子

268

积分

中级会员

Rank: 3Rank: 3

积分
268
金钱
259
HASS币
0
发表于 2023-12-23 10:57:03 | 显示全部楼层 |阅读模式
void loop() override {
data[0]=0xff;
// Wait for sensor's 0xff header
while (read()!=0xff) {
}
// Read the remaining 3 UAT bytes
for (int i=1;i<4;i++)
{
data[i]=read();
}
这段代码中,data[0]=0xff;是一个赋值操作吧,没看到与读取的到串口数值对比啊,怎么能做到等待0xff的协议头?
下面应该是从不是0xff的串口数据中读取3个字节,存到data[1]到data[3],也没有等待0xff啊
回复

使用道具 举报

1

主题

41

帖子

476

积分

中级会员

Rank: 3Rank: 3

积分
476
金钱
435
HASS币
0
发表于 2023-12-23 13:55:25 | 显示全部楼层
本帖最后由 idummy 于 2023-12-23 14:00 编辑

这段代码看起来是用于从某个传感器中读取数据的 Arduino 代码。让我来解释一下:


void loop() override {
  data[0] = 0xff;  // 将数据数组的第一个元素设置为 0xff
  // 等待传感器发送的 0xff 头部
  while (read() != 0xff) {
  }
  // 读取剩余的 3 个 UAT 字节
  for (int i = 1; i < 4; i++) {
    data = read();
  }
}
这段代码中的关键部分是 loop 函数,它是 Arduino 中一个常见的循环函数,在这个函数中执行了以下操作:

data[0] = 0xff;:将数据数组 data 的第一个元素设置为 0xff。

while (read() != 0xff) {}:这是一个 while 循环,它一直等待读取到传感器发送的 0xff 头部。read() 函数的具体实现没有在提供的代码中显示,但可以假设它是用于从传感器读取数据的函数。
while (read() != 0xff) 表示当从传感器读取的数据不等于 0xff 时,循环会一直执行。这样的代码结构通常用于等待特定的标志或头部。

在这个上下文中,这个 while 循环在等待从传感器读取的数据中出现 0xff 头部。一旦读取到了 0xff,循环就会退出,然后通过后续的 for 循环读取接下来的 3 个字节数据。


for (int i = 1; i < 4; i++) { data = read(); }:使用 for 循环读取剩余的 3 个 UAT(可能是UART,串口通信)字节,并将它们存储在 data 数组中。循环从 i=1 开始,因为第一个字节已经在前面的操作中设置为 0xff。

这段代码的作用是等待传感器发送的特定头部(0xff),然后读取接下来的 3 个字节,并将它们存储在 data 数组中。可能的应用是通过串口接收传感器的数据,但确切的用途还需要查看完整的代码或了解传感器的通信协议。
回复

使用道具 举报

2

主题

9

帖子

268

积分

中级会员

Rank: 3Rank: 3

积分
268
金钱
259
HASS币
0
 楼主| 发表于 2023-12-23 14:05:33 | 显示全部楼层
idummy 发表于 2023-12-23 13:55
这段代码看起来是用于从某个传感器中读取数据的 Arduino 代码。让我来解释一下:

这是哪个ai,貌似明白点了,我用文心一言看了下说的太笼统了
这段代码应该是默认收的数据中一定有0xff,没考虑其他情况
回复

使用道具 举报

1

主题

41

帖子

476

积分

中级会员

Rank: 3Rank: 3

积分
476
金钱
435
HASS币
0
发表于 2023-12-23 14:15:48 | 显示全部楼层
chatgpt呀,他这说的就是while (read() != 0xff) {} 如果收到的不是0xff 就一直循环,就不会执行后面的for 直到收到了0xff,才去执行后面的for
回复

使用道具 举报

2

主题

9

帖子

268

积分

中级会员

Rank: 3Rank: 3

积分
268
金钱
259
HASS币
0
 楼主| 发表于 2023-12-23 14:34:42 | 显示全部楼层
idummy 发表于 2023-12-23 14:15
chatgpt呀,他这说的就是while (read() != 0xff) {} 如果收到的不是0xff 就一直循环,就不会执行后面的for  ...

我以为后面的for循环是在while的大括号里面的,总算是白了,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-5-17 13:21 , Processed in 3.847233 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表