串口发来的HEX数据为"AA 6F 00 60 00 01 20 20 32 30 30 30 2D 30 31 2D 31 30 20 20 30 37 3A 32 37 3A 33 38 20 20 20 20 20 20 20 20 20 20 CC 33 C3 3C,包头""AA6F",包尾"CC33C33C",提取有效数据的arduino代码
时间: 2024-01-21 10:02:07 浏览: 139
串口传输数据,带包头,包尾为校验和
4星 · 用户满意度95%
以下是提取有效数据的 Arduino 代码示例:
```
byte receivedData[]; // 存储接收到的数据
int dataIndex = 0; // 数据索引
bool dataStarted = false; // 数据是否开始标记
void loop() {
if (Serial.available() > 0) { // 如果串口有数据可读
byte incomingByte = Serial.read(); // 读取一个字节
if (incomingByte == 0xAA && !dataStarted) { // 如果读到包头并且数据未开始
dataStarted = true; // 标记数据开始
dataIndex = 0; // 重置数据索引
} else if (incomingByte == 0xCC && dataStarted && dataIndex > 0) { // 如果读到包尾并且数据已开始并且数据索引大于0
dataStarted = false; // 标记数据结束
// 处理接收到的数据
processData(receivedData, dataIndex);
} else if (dataStarted) { // 如果数据已开始
receivedData[dataIndex++] = incomingByte; // 存储数据
}
}
}
void processData(byte data[], int length) {
// 提取有效数据的代码
byte validData[length - 5];
for (int i = 0; i < length - 5; i++) {
validData[i] = data[i + 2];
}
// 处理有效数据的代码
// ...
}
```
代码中使用了一个 `dataStarted` 标记来表示数据是否已开始,通过读取包头和包尾来改变标记的值。在数据开始后,将每个读取的字节存储到 `receivedData` 数组中,当读取到包尾时,将数据提取出来并传递给 `processData()` 函数处理。在 `processData()` 函数中,通过复制原始数据数组的一部分来提取有效数据。
阅读全文