对于我的应用,我使用两个微控制器系统,每个都有一个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;
Arduino到期接收
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;
先谢谢大家的帮助。