Я сделал настройку, состоящую из 3 Zigbee, 2 маршрутизаторов (Zigbee S2C) и 1 координатора (Zigbee S2). Каждый маршрутизатор подключен к arduino nano, который собирает данные с 2 FSR и IMU (тип кадра: запрос на передачу zigbee и размер пакета 46 байт) и отправляет их координатору, подключенному к arduino UNO. Все Xbee находятся в режиме API 2 и работают со скоростью 115200 бод. Я использую библиотеку под названием «Простая библиотека Zigbee» для отправки всех собранных данных координатору. Сбор и отправка данных работает нормально, за исключением того, что в пути теряются пакеты. Выборочные данные nano на частоте около 25 Гц независимо друг от друга. Координатор пытается прочитать данные, отправленные с zigbees (конечно, используя библиотеку) в каждом цикле, но, к сожалению, он получает только около 40-45 выборок (должно было быть 25 * 2 = 50 всего выборок из 2). хби). Кто-нибудь может подсказать, почему это происходит. Мне нужно как можно меньше потерь данных, чтобы моя установка достигла своей цели. Любая помощь приветствуется.
P.S: Может быть важно отметить, что координатор считывает данные только с одного xbee в каждом цикле.
Спасибо.
void setup()
{
// Start the serial ports ...
Serial.begin( 115200 );
while( !Serial ){;} // Wait for serial port (for Leonardo only).
xbeeSerial.begin( 115200 );
// ... and set the serial port for the XBee radio.
xbee.setSerial( xbeeSerial );
// Set a non-zero frame id to receive Status packets.
xbee.setAcknowledgement(true);
}
void loop()
{
// While data is waiting in the XBee serial port ...
while( xbee.available() )
{
// ... read the data.
xbee.read();
// If a complete message is available, display the contents
if( xbee.isComplete() ){
Serial.print("\nIncoming Message: ");
printPacket( xbee.getIncomingPacketObject() );
}
}
delay(10); // Small delay for stability
// That's it! The coordinator is ready to go.
}
// Function for printing the complete contents of a packet //
void printPacket(SimpleZigBeePacket & p)
{
//Serial.print( START, HEX );
//Serial.print(' ');
//Serial.print( p.getLengthMSB(), HEX );
//Serial.print(' ');
//Serial.print( p.getLengthLSB(), HEX );
//Serial.print(' ');
// Frame Type and Frame ID are stored in Frame Data
uint8_t checksum = 0;
for( int i=10; i<p.getFrameLength(); i++){
Serial.print( p.getFrameData(i), HEX );
Serial.print(' ');
checksum += p.getFrameData(i);
}
// Calculate checksum based on summation of frame bytes
checksum = 0xff - checksum;
Serial.print(checksum, HEX );
Serial.println();
}