[AIUTO] Problema comunicazione XBEE2

Buongiorno a tutti, sono uno studente di informatica in procinto di laurea. Sto facendo una tesi a proposito del riconoscimento di una persona in una stanza utilizzando il valore di potenza del segnale RSSI emesso da uno shield XBEE connesso ad un arduino.

Sono praticamente piantato da 1 mese su questo problema: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1276095487.

Qualcuno di voi potrebbe darmi supporto? eventualmente posso contribuire con un riconoscimento monetario.

Vi prego aiutatemi!

Grazie!! :slight_smile:

invece di linkare il post in inglese, avresti dovuto riscriverlo quì in italiano, forse avresti avuto anche il supporto dei non anglofili :slight_smile:

POST IN ITALIANO:

Ciao a tutti. Scrivo in quanto ho un problema con lo scambio di dati fra
moduli xbee in particolare la lettura del segnale RSSI.
Tecnologia utilizzata: 2 Arduini "Duemilanove" + shield xbee series 2

Al fine di catturare il segnale RSSI ho impostato i due moduli in modo
tale da avere un Router/End Device ed un Coordinator. Ho caricato quindi nel modulo 1 (http://www.joomlabay.it/sh/screenshot1.jpg) il firmware ZNET 2.5 coordinator API con le
impostazioni come in http://www.joomlabay.it/sh/screenshot2.gif, mentre nel secondo modulo
(http://www.joomlabay.it/sh/screenshot3.jpg) ho caricato il firmware ZNET 2.5 Router API con le
impostazioni come in http://joomlabay.it/sh/screenshot4.gif.

Nel modulo router, su cui è montato il processore dell'arduino "ATMEGA328" ho caricato il software tratto da http://code.google.com/p/xbee-arduino/ dell'appendice A con l'obiettivo di inviare al coordinator (connesso al pc tramite USB) il segnale RSSI.

Nel momento in cui collego il coordinator all'usb e il router alla batteria da 9V, quest'ultimo dopo aver creato la rete zigbee, invia il
proprio identificativo (ROUT1) al coordinator che viene correttamente
letto, quindi non invia nessun altro dato.

Al fine di capire se si trattasse un problema delle librerie utilizzate,
ho deciso di caricare un programma semplicissimo che a cadenza di 1 secondo
scrivesse il messaggio "" sullo standard output. Con il firmware API
ottengo lo stesso comportamento errato descritto precedentemente. Se carico
il firmware AT, la trasmissione avviene correttamente.

Sapete come poter risolvere questo enorme problema che mi blocca?

Grazie

APPENDICE A

/**

  • Copyright (c) 2009 Andrew Rapp. All rights reserved.
  • This file is part of XBee-Arduino.
  • XBee-Arduino is free software: you can redistribute it and/or modify
  • it under the terms of the GNU General Public License as published by
  • the Free Software Foundation, either version 3 of the License, or
  • (at your option) any later version.
  • XBee-Arduino is distributed in the hope that it will be useful,
  • but WITHOUT ANY WARRANTY; without even the implied warranty of
  • MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  • GNU General Public License for more details.
  • You should have received a copy of the GNU General Public License
  • along with XBee-Arduino. If not, see http://www.gnu.org/licenses/.
    */

#include <XBee.h>
#include <NewSoftSerial.h>

/*
This example is for Series 1 (10C8 or later firmware) or Series 2 XBee
radios
Sends a few AT command queries to the radio and checks the status response
for success

This example uses the NewSoftSerial library to view the XBee
communication. I am using a
Modern Device USB BUB board (http://moderndevice.com/connect) and viewing
the output
with the Arduino Serial Monitor.
You can obtain the NewSoftSerial library here
http://arduiniana.org/libraries/NewSoftSerial/
*/

// Define NewSoftSerial TX/RX pins
// Connect Arduino pin 9 to TX of usb-serial device
uint8_t ssRX = 9;
// Connect Arduino pin 10 to RX of usb-serial device
uint8_t ssTX = 10;
// Remember to connect all devices to a common Ground: XBee, Arduino and
USB-Serial device
NewSoftSerial nss(ssRX, ssTX);

XBee xbee = XBee();
//seria plus
uint8_t plusCmd[] = {'+','+','+'};
// serial high
uint8_t shCmd[] = {'S','H'};
// serial low
uint8_t slCmd[] = {'S','L'};
// association status
uint8_t assocCmd[] = {'D','B'};

AtCommandRequest plusRequest = AtCommandRequest(plusCmd);

AtCommandRequest atRequest = AtCommandRequest(assocCmd);

AtCommandResponse atResponse = AtCommandResponse();

void setup() {
xbee.begin(19200);
// start soft serial
Serial.begin(9600);

// Startup delay to wait for XBee radio to initialize.
// you may need to increase this value if you are not getting a response
delay(5000);
}

void loop() {

// get SH
//sendAtCommand();

// set command to SL
//atRequest.setCommand(slCmd);
//sendAtCommand();

//plusRequest.setCommand(plusCmd);
// set command to db
atRequest.setCommand(assocCmd);
sendAtCommand();

}

void sendAtCommand() {

Serial.println("Sending command to the XBee");
//nss.println("Sending command to the XBee");

// send the command
xbee.send(atRequest);

// wait up to 5 seconds for the status response
if (xbee.readPacket(5000)) {
// got a response!
Serial.print("Got a response");
// should be an AT command response
if (xbee.getResponse().getApiId() == AT_COMMAND_RESPONSE) {
xbee.getResponse().getAtCommandResponse(atResponse);

if (atResponse.isOk()) {
Serial.print("Command [");
Serial.print(atResponse.getCommand()[0]);
Serial.print(atResponse.getCommand()[1]);
Serial.println("] was successful!");

if (atResponse.getValueLength() > 0) {
Serial.print("Command value length is ");
Serial.println(atResponse.getValueLength(), DEC);

Serial.print("Command value: ");

for (int i = 0; i < atResponse.getValueLength(); i++) {
Serial.print(atResponse.getValue(), HEX);

  • Serial.print(" ");*
  • }*
  • Serial.println("");*
  • }*
  • }*
  • else {*
  • Serial.print("Command return error code: ");*
  • Serial.println(atResponse.getStatus(), HEX);*
  • }*
  • } else {*
  • Serial.print("Expected AT response but got ");*
  • Serial.print(xbee.getResponse().getApiId(), HEX);*
  • } *
  • } else {*
  • // at command failed*
  • if (xbee.getResponse().isError()) {*
  • Serial.print("Error reading packet. Error code: "); *
  • Serial.println(xbee.getResponse().getErrorCode());*
  • }*
  • else {*
  • Serial.print("No response from radio"); *
  • }*
  • }*
    }