繁体   English   中英

PC和Arduino之间的串行通信

[英]Serial communication between PC and Arduino

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

如果我在联合体内具有单个整数变量,则该代码有效。 但是,带有工会的结构不起作用。 只有一个整数获取数据,并且该数据是错误的。

我会造成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);
 };

}

问题是Arduino上的int 是两个字节 ,但是PC上的int可能是四个字节。 根据您的编译器,可能会有一个开关可用于设置int的大小,也可以只使用更明确的类型。 使用int的想法是,通过采用宿主平台的自然大小,可以使代码轻松地从一个平台适应另一个平台。 但是,出于同样的原因,这不是在平台之间传输数据的好选择。

要确认这是问题,请尝试读取的字节出SerialPacked ,而不是访问struc 我敢肯定,您会发现所有数据都在那里-这就是您尝试读取数据的方式。

我已经解决了,请整理一下...我将Arduino代码的结构中的整数更改为longs。 数据正确无误。

这是因为32位Ardunio上的long与64位vs2010代码上的整数大小相同吗? 还是我在这里想念什么? 感谢您的反馈!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM