XBee系统:loop()挂起

时间:2014-10-24 17:24:47

标签: arduino communication xbee

对于我的应用,我使用两个微控制器系统,每个都有一个XBee。一个是接收器,一个是发射器。

变送器是Teensy 3.1,它处理编码器信息,连续将其发送到第二个系统。

接收端是Arduino Due,它从连接到XBee的串行通道接收数据,然后显示在Arduino IDE的串行监视器(使用默认UART)中。

一件奇怪的事情正在发生,我无法理解问题的所在。连续数据暂停或停止后,接收端的循环()挂起0.5到1.5秒(不一致)。我知道这是因为serial.print函数发生在loop()中,当数据暂停时,串行监视器也会暂停。下面我列出了一些有用的代码。

Teensy 3.1传输



#define ENCODER_OPTIMIZE_INTERRUPTS

#include <Encoder.h>

long EncoderPosition1 = 0;
long EncoderPosition2 = 0;
long EncoderPosition3 = 0;

Encoder Encoder1(10, 9);
Encoder Encoder2(8, 7);
Encoder Encoder3(12, 11);

void loop() {  
 // Read Controller Encoders
  newEncoderPosition1 = Encoder1.read();
  newEncoderPosition2 = Encoder2.read();
  newEncoderPosition3 = Encoder3.read();
  
  if (newEncoderPosition1 != EncoderPosition1 || newEncoderPosition2 != EncoderPosition2 || newEncoderPosition3 != EncoderPosition3) {
     
    // XBEE TX Position
    Serial1.print(',');
    Serial1.print(newEncoderPosition1);
    Serial1.print(',');
    Serial1.print(newEncoderPosition2);
    Serial1.print(',');
    Serial1.print(newEncoderPosition3);
    Serial1.print(',');
    Serial1.flush();
    
    EncoderPosition1 = newEncoderPosition1;
    EncoderPosition2 = newEncoderPosition2;
    EncoderPosition3 = newEncoderPosition3; 
  }
}
&#13;
&#13;
&#13;

Arduino到期接收

&#13;
&#13;
volatile long EncoderPosition1 = 0; 
volatile long EncoderPosition2 = 0;
volatile long EncoderPosition3 = 0; 

void serialEvent3(){
  EncoderPosition1 = Serial3.parseInt();
  EncoderPosition2 = Serial3.parseInt();
  EncoderPosition3 = Serial3.parseInt();
}

void loop()
{  
  Serial.print(EncoderPosition1);
  Serial.print(',');
  Serial.print(EncoderPosition2);
  Serial.print(',');
  Serial.println(EncoderPosition3);
}
&#13;
&#13;
&#13;

先谢谢大家的帮助。

0 个答案:

没有答案