gpt4 book ai didi

c++ - PC与Arduino串口通信

转载 作者:行者123 更新时间:2023-11-28 07:56:27 25 4
gpt4 key购买 nike

我已经为 Arnuino 编写了一个程序,该程序将 union 结构发送到 PC 上的程序。该结构必须为整数,但我没有得到正确的输出。 PC 上的程序使用 boost 库进行串口连接。并以 64 位构建和编译(使用 vs2010)。

如果我在一个 union 中有一个整数变量,代码就可以工作。但是 union 中的结构不起作用。只有一个整数获取数据并且该数据是错误的。

我可能是 64 位(pc)和 32 位(Ardunio)问题?谁能帮我解决这个问题。提前致谢。

PC代码段(省略串口设置):

union packed{
struct test{
unsigned int data;
unsigned int data2;
} struc;

unsigned char bytes[8];
}SerialPacked;

SerialPacked.struc.data = 0;
SerialPacked.struc.data2 = 0;

cout << "Data before: " << SerialPacked.struc.data << endl;
cout << "Data2 before: " << SerialPacked.struc.data2 << endl;

read(port,buffer((unsigned char*)&SerialPacked.bytes[0], 1));
read(port,buffer((unsigned char*)&SerialPacked.bytes[1], 1));
read(port,buffer((unsigned char*)&SerialPacked.bytes[2], 1));
read(port,buffer((unsigned char*)&SerialPacked.bytes[3], 1));
read(port,buffer((unsigned char*)&SerialPacked.bytes[4], 1));
read(port,buffer((unsigned char*)&SerialPacked.bytes[5], 1));
read(port,buffer((unsigned char*)&SerialPacked.bytes[6], 1));
read(port,buffer((unsigned char*)&SerialPacked.bytes[7], 1));

cout << "Data after: " << SerialPacked.struc.data << endl;
cout << "Data2 after: " << SerialPacked.struc.data2 << endl;

Arduino 代码:

int ledPin = 13;


union packed{
struct test{
unsigned int data;
unsigned int data2;
}struc;
unsigned char bytes[8];
}
SerialPacked;

void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);

SerialPacked.struc.data = 0;
SerialPacked.struc.data2 = 0;
};




void loop() {

while(1){
digitalWrite(ledPin,HIGH);
SerialPacked.struc.data = SerialPacked.struc.data + 1;
SerialPacked.struc.data2 = SerialPacked.struc.data2 + 1;;

for(int i=0;i <8; i++){
Serial.write(SerialPacked.bytes[i]);
};

digitalWrite(ledPin,LOW);
delay(1000);
};

}

最佳答案

问题是 int on Arduino is two bytes ,但是您 PC 上的 int 可能是四个字节。根据您的编译器,可能有一个开关可用于设置 int 的大小,或者您可以只使用更明确的类型。 int 的想法是,它应该允许通过采用主机平台的自然大小,轻松地将代码从一个平台适配到另一个平台。但是,出于同样的原因,它不是在平台之间传输数据的好选择。

要确认这是问题所在,请尝试从 SerialPacked 中读取字节,而不是访问 struc。我相信您会发现所有数据都在那里 - 问题在于您尝试读取数据的方式。

关于c++ - PC与Arduino串口通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12605519/

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