/** * 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 . */ #include #include /* 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(); // serial high uint8_t shCmd[] = {'S','H'}; // serial low uint8_t slCmd[] = {'S','L'}; // association status uint8_t assocCmd[] = {'A','I'}; AtCommandRequest atRequest = AtCommandRequest(shCmd); AtCommandResponse atResponse = AtCommandResponse(); void setup() { xbee.begin(9600); // start soft serial nss.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(); // set command to AI atRequest.setCommand(assocCmd); sendAtCommand(); // we're done. Hit the Arduino reset button to start the sketch over while (1) {}; } void sendAtCommand() { 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! // should be an AT command response if (xbee.getResponse().getApiId() == AT_COMMAND_RESPONSE) { xbee.getResponse().getAtCommandResponse(atResponse); if (atResponse.isOk()) { nss.print("Command ["); nss.print(atResponse.getCommand()[0]); nss.print(atResponse.getCommand()[1]); nss.println("] was successful!"); if (atResponse.getValueLength() > 0) { nss.print("Command value length is "); nss.println(atResponse.getValueLength(), DEC); nss.print("Command value: "); for (int i = 0; i < atResponse.getValueLength(); i++) { nss.print(atResponse.getValue()[i], HEX); nss.print(" "); } nss.println(""); } } else { nss.print("Command return error code: "); nss.println(atResponse.getStatus(), HEX); } } else { nss.print("Expected AT response but got "); nss.print(xbee.getResponse().getApiId(), HEX); } } else { // at command failed if (xbee.getResponse().isError()) { nss.print("Error reading packet. Error code: "); nss.println(xbee.getResponse().getErrorCode()); } else { nss.print("No response from radio"); } } }