gpt4 book ai didi

c++ - Arduino - 如何从 serial.read() 中获取结构?

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:30 24 4
gpt4 key购买 nike

我是一个初学者,我正在尝试用一个指针输入一个包含 4 个成员的结构表,然后将它们发送到另一个 serial2。我没有这样做。

我从 serial1.read() 收到 4 个字符,例如 'A' '10' '5' '3'。为了减少数据的大小,我想使用一个结构:

struct structTable {
unsigned int page:1; // (0,1)
unsigned int cric:4; // 10 choices (4 bits)
unsigned int crac:3; // 5 choices (3 bits)
unsigned int croc:2; // 3 choices (2 bits)
};

我声明并设置:实例和指针

struct structTable structTable;
struct structTable *PtrstructTable;
PtrstructTable = &structTable;

然后我尝试这样喂:

for(int i = 0; i<=4; i++) {
if(i == 1) {
(*PtrProgs).page = Serial.read();
if(i == 2) {
(*PtrProgs).cric = Serial.read();

等等。但它不起作用...

我尝试输入第一个字符表并尝试转换结果:

(*PtrProgs).page = PtrT[1], BIN;

而现在,我意识到我一次无法提供 3 位数据!哦!所有这些看起来都非常薄弱,而且对于只有 4 个值来说肯定是一个太长的过程。 (我想为更多实例保留这种结构表)。

拜托,你能帮我找到一种更简单的方法来喂我的 table 吗?

最佳答案

您只能通过串行端口发送完整的字节。但您也可以直接发送原始数据。

void send (const structTable* table)
{
Serial.write((const char*)table, sizeof(structTable)); // 2 bytes.
}

bool receive(structTable* table)
{
return (Serial.readBytes((char*)table, sizeof(structTable)) == sizeof(structTable));
}

你还必须知道 sizeof(int) 在所有 CPU 上都是不一样的

关于字节序的一句话。如果在具有不同字节顺序的 CPU 上运行,则串行链接另一端程序的结构定义将变为:

struct structTable {
unsigned short int croc:2; // 3 choices (2 bits)
unsigned short int crac:3; // 5 choices (3 bits)
unsigned short int cric:4; // 10 choices (4 bits)
unsigned short int page:1; // (0,1)
};

请注意 short int 的使用,您也可以在 arduino 代码中使用它以更加精确。原因是short int在大多数CPU上都是16位的,而int可能是16,32甚至64位。

关于c++ - Arduino - 如何从 serial.read() 中获取结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45600202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com