ArduinoGeneral

MEGA sensor shield v2.3 Xbee connection I'm Stumped

userHead DrJeff 2014-04-13 17:22:07 5241 Views6 Replies
Ok I am totally stumped Trying to get 1 Xbee working on the Mega Sensor Shield V2.3.
Do I set the serial to Serial1 instead of Serial? and if yes is that the same if I want to use the slot with the sd card then set to Serial2 in the arduino code?
Also do I need to jump wires on the board for the Xbee to work and or the serial?
Here is the code Im using:

[code]/*

Sprinkler Controller connected to XTension Created by Jeff
4/12/14

*/

//input and output pin definitions
const int zone1 = 13;
const int zone2 = 12;
const int button1 = 2;

//these globals are used by the serial interface for talking to and getting commands
//from XTension via the Arduino interface. All commands are sent as NAME=value pairs with a
//carriage return at the end. Set your buffer sizes to be at least as big as the longest command
//you expect to receive. These are oversized as only a single value is sent.

const int commandBufferSize = 19;
const int valueBufferSize = 22;
char commandBuffer[ commandBufferSize + 1];
int commandBufferIndex = 0;
char valueBuffer[ valueBufferSize + 1];
int valueBufferIndex = 0;
boolean gotCommand = false;


//debounce necessities
unsigned long lastButtonMillis = 0;
unsigned long currentMillis = 0;
int currentButtonPushed = -1;


void setup(){

//make sure xBee is set to same serial speed. Could use faster of course
Serial.begin(9600);

//set the pinmodes for in or out as appropriate
pinMode( zone1, OUTPUT);
pinMode( zone2, OUTPUT);
pinMode( button1, INPUT);

//turnon the pullup resisters
//to simplify the wiring I'm using internal pullup resisters for the buttons
//that way I only have to connect them to ground.
digitalWrite( button1, HIGH);

//make sure we startup off
digitalWrite( zone1, LOW);
digitalWrite( zone2, LOW);

//could always save the current value of the light to the eeprom
//and retrieve it at startup so that a power outage for a few seconds
//wouldn't result in the light being off.
//give the led a flash

//digitalWrite( led1, HIGH);
//delay( 500);
// digitalWrite( led1, LOW);

//write to XTension that the system is ready.
Serial.println( "Sprinklers Ready!");

//and update it's unit so that it knows that it's not on

Serial.println( "ZONE1=off");
Serial.println( "ZONE2=off");



}


void loop(){
// /*
//serial read and write hardware to software

{
if (sprinklerSerial.available())
Serial.write(sprinklerSerial.read());
if (Serial.available())
sprinklerSerial.write(Serial.read());
}
// */
//currentMillis is used in the button processing in several places
//so instead of constantly calling to millis() just do it once and put it
//in this variable.
currentMillis = millis();
//check the serial buffer for any waiting command data and process it
//if there is any
processSerialCommands();

//check for any button state changes
processButtons();



}

/*
this is part of the Arduino interface to XTension
it can easily be reused in future projects.
this just manages the command and value buffers and reading of data
from the port. Any actual received commands will be passed to the next
processCommand() method. Add any other incoming value handlers or special
commands there. This handler shoulnd't need to be changed for most things
*/

void processSerialCommands(){
int workByte;

//if no data available then just return, nothing to do this cycle through loop
if (Serial.available() == 0){
return;
}
//read a byte
workByte = Serial.read();

//since all data is sent and received as name=value pairs
//initial data is added to the command buffer. When a 61 or "=" is recieved
//we finalize the end of the commandBuffer with a nul and start adding future characters
//to the value buffer.
if (workByte == 61){
commandBuffer[ commandBufferIndex] = 0;
commandBufferIndex = 0;
gotCommand = true;
return;
}


//this is looking for the carriage return at the end of the command line
//if it finds the return then it finalizes the value buffer with a nul and
//resets the buffer indexes to get them all ready for the next command
// and finally passes the most recently received command=value pair to the process command
if (workByte == 13){
valueBuffer[ valueBufferIndex]=0;
valueBufferIndex = 0;
commandBufferIndex = 0;
gotCommand = false;
processCommand();
return;
}


//if we haven't finalized the command yet (or address as it's now called in XTension)
//then we add the byte to the commandBuffer and increment the index to wait for the next one
if (!gotCommand){
commandBuffer[ commandBufferIndex] = workByte;
commandBufferIndex++;

//make sure that we dont overrun the buffer though and reset it if we're receiving garbage
if (commandBufferIndex > commandBufferSize + 1){
commandBufferIndex = 0;
return;
}

} else {

//we've already got the command because gotCommand has been set to true by the
//check above for a 61 value or "="
//so now add instead to the value buffer, increment it's counter and continue
valueBuffer[ valueBufferIndex] = workByte;
valueBufferIndex++;

//make sure that the value buffer doesn't overflow and if so then
//reset both the command and value buffer due to garbage on the line.
if (valueBufferIndex > valueBufferSize + 1){
commandBufferIndex = 0;
valueBufferIndex = 0;
return;
}
}

}

//XTENSION here is where you will receive incoming commands use the string objects to manage your response
// add as many addresses as you need.

void processCommand(){
String theCommand = String( commandBuffer);
String theValue = String( valueBuffer);

if (theCommand == "ZONE1"){
if (theValue == "on"){
digitalWrite (zone1, HIGH);
}else if (theValue == "off"){
digitalWrite (zone1, LOW);
} else {
digitalWrite (zone1, LOW);
}

return;
}

//add as many more comparisons for theCommmand as you need to for your application
//XTension will always send address=value pairs if it's a change to a unit, though
//any data may be sent with the "send data" verb including commands that have no value
//though in that case you should still send the = and then immediately the return. like
//reboot=/13 do not omit the equal sign.

}




void processButtons(){
boolean debounceTimeout;

if ((currentMillis - lastButtonMillis) > 100){
debounceTimeout = true;
} else {
debounceTimeout = false;
}


if (digitalRead( button1) == LOW){
//button1 is pushed
if ((debounceTimeout) && (currentButtonPushed != button1)){
currentButtonPushed = button1;
lastButtonMillis = currentMillis;
Serial.println( "button1=on");
return;
}
} else if (currentButtonPushed == button1){
//the button is up but the last button pushed was ours so we can reset it
if (debounceTimeout){
lastButtonMillis = currentMillis;
currentButtonPushed = -1;
}
}
}
[/code]

Please help me get the Xbee working this all works via USB just as I want but need it to be wireless with this shield, I am ready to add a lot more things to this board but need it to work via the Xbee.

Thanks,
Jeff
2014-04-17 18:31:09 Hello Jeff,

I saw you have commented the Serial1 data receive with "/*...*/" in the loop. Why? It won't receive anything from the Serial1 port after commented these code.
You could try my sample code.
It is easy way to test whether mega has received data.
userHeadPic Grey.CC
2014-04-17 09:13:15 Got it all working here is how it looks...

[code]/*

  Sprinkler Controller connected to XTension Created by Jeff
4/12/14

*/
//Added for delaying with out delaying the loop only delays the actual call
long previousMillis = 0;
long interval10 = 600000; //10 minute delay without delaying the rest of the loop
long interval1 = 100000; //1 minute delay  without delaying the rest of the loop

//input and output pin definitions
const int zone1 = 38;
const int zone2 = 39;
const int zone3 = 40;
const int zone4 = 41;
const int zone5 = 42;
const int zone6 = 43;
const int zone7 = 44;
const int zone8 = 45;
const int zone9 = 46;
const int zone10 = 47;
const int zone11 = 48;
const int zone12 = 49;
const int zone13 = 50;
const int zone14 = 51;
const int zone15 = 52;
const int zone16 = 53;

const int button1 = 37;
const int button2 = 36;
const int button3 = 35;
const int button4 = 34;
const int button5 = 33;

//globals for moisture reading Garden Stuff
int moistureSensor = 2;
int moisturePower1 = 27;
int lightSensor = 3;
int tempSensor = 4;
int moisture_val;
int light_val;
int temp_val;
//Setup Moisture Float values
//float workMoisture;
//float lastMoisture;

//these globals are used by the serial interface for talking to and getting commands
//from XTension via the Arduino interface. All commands are sent as NAME=value pairs with a
//carriage return at the end. Set your buffer sizes to be at least as big as the longest command
//you expect to receive. These are oversized as only a single value is sent.

const int commandBufferSize = 19;
const int valueBufferSize = 22;
char commandBuffer[ commandBufferSize + 1];
int commandBufferIndex = 0;
char valueBuffer[ valueBufferSize + 1];
int valueBufferIndex = 0;
boolean gotCommand = false;


//debounce necessities
unsigned long lastButtonMillis = 0;
unsigned long currentMillis = 0;
int currentButtonPushed = -1;


void setup(){

//make sure xBee is set to same serial speed. Could use faster of course
Serial.begin(9600);
Serial1.begin(9600);
Serial2.begin(9600);

//set the pinmodes for in or out as appropriate
pinMode( zone1, OUTPUT);
pinMode( zone2, OUTPUT);
pinMode( zone3, OUTPUT);
pinMode( zone4, OUTPUT);
pinMode( zone5, OUTPUT);
pinMode( zone6, OUTPUT);
pinMode( zone7, OUTPUT);
pinMode( zone8, OUTPUT);
pinMode( zone9, OUTPUT);
pinMode( zone10, OUTPUT);
pinMode( zone11, OUTPUT);
pinMode( zone12, OUTPUT);
pinMode( zone13, OUTPUT);
pinMode( zone14, OUTPUT);
pinMode( zone15, OUTPUT);
pinMode( zone16, OUTPUT);

pinMode(moisturePower1, OUTPUT);

pinMode( button1, INPUT);
pinMode( button2, INPUT);
pinMode( button3, INPUT);
pinMode( button4, INPUT);
pinMode( button5, INPUT);

//turnon the pullup resisters
//to simplify the wiring I'm using internal pullup resisters for the buttons
//that way I only have to connect them to ground.
digitalWrite( button1, HIGH);
digitalWrite( button2, HIGH);
digitalWrite( button3, HIGH);
digitalWrite( button4, HIGH);
digitalWrite( button5, HIGH);

//make sure we startup off
digitalWrite( zone1, HIGH);
digitalWrite( zone2, HIGH);
digitalWrite( zone3, HIGH);
digitalWrite( zone4, HIGH);
digitalWrite( zone5, HIGH);
digitalWrite( zone6, HIGH);
digitalWrite( zone7, HIGH);
digitalWrite( zone8, HIGH);
digitalWrite( zone9, HIGH);
digitalWrite( zone10, HIGH);
digitalWrite( zone11, HIGH);
digitalWrite( zone12, HIGH);
digitalWrite( zone13, HIGH);
digitalWrite( zone14, HIGH);
digitalWrite( zone15, HIGH);
digitalWrite( zone16, HIGH);


//could always save the current value of the light to the eeprom
//and retrieve it at startup so that a power outage for a few seconds
//wouldn't result in the light being off.
//give the led a flash

//digitalWrite( led1, HIGH);
//delay( 500);
// digitalWrite( led1, LOW);

//write to XTension that the system is ready.
Serial.println( "Sprinklers Ready!");

//and update it's unit so that it knows that it's not on

Serial.println( "ZONE1=off");
Serial.println( "ZONE2=off");
Serial.println( "ZONE3=off");
Serial.println( "ZONE4=off");
Serial.println( "ZONE5=off");
Serial.println( "ZONE6=off");
Serial.println( "ZONE7=off");
Serial.println( "ZONE8=off");
Serial.println( "ZONE9=off");
Serial.println( "ZONE10=off");
Serial.println( "ZONE11=off");
Serial.println( "ZONE12=off");
Serial.println( "ZONE13=off");
Serial.println( "ZONE14=off");
Serial.println( "ZONE15=off");
Serial.println( "ZONE16=off");

 
 
}


void loop(){

/*
  //serial read and write hardware to software
 
// read from port 1, send to port 0:
  if (Serial1.available()) {
    int inByte = Serial1.read();
    Serial.write(inByte);
  }
 
  // read from port 0, send to port 1:
  if (Serial.available()) {
    int inByte = Serial.read();
    Serial1.write(inByte);
  }
// read from port 2, send to port 0:
  if (Serial2.available()) {
    int inByte = Serial2.read();
    Serial.write(inByte);
  }
 
  // read from port 0, send to port 2:
  if (Serial.available()) {
    int inByte = Serial.read();
    Serial2.write(inByte);
  }
  */
  //moisture readings
//unsigned long LcurrentMillis = millis();

if(currentMillis - previousMillis > interval10) {
  previousMillis = currentMillis;
digitalWrite(moisturePower1, HIGH);
//delay (10);
if (moisture_val = analogRead(moistureSensor)){ // read the value from the moisture-sensing probes)

Serial.print("moisture1=");
Serial.println( moisture_val );

}else{



}



}
/*
//only show changes in moisture readings
  moisture_val = analogRead(moistureSensor); // read the value from the moisture-sensing probes
  workMoisture =  moisture_val;
  if (workMoisture != lastMoisture){
      Serial.print("Moisture=");
      Serial.println( workMoisture,0);
      lastMoisture = workMoisture;
  }
*/
  //currentMillis is used in the button processing in several places
  //so instead of constantly calling to millis() just do it once and put it
  //in this variable.
  currentMillis = millis(); //added the unsigned long below
//unsigned long LcurrentMillis = millis();
  //check the serial buffer for any waiting command data and process it
  //if there is any
  processSerialCommands();
 
  //check for any button state changes
  processButtons();

 
 
}

/*
  this is part of the Arduino interface to XTension
  it can easily be reused in future projects.
  this just manages the command and value buffers and reading of data
  from the port. Any actual received commands will be passed to the next
  processCommand() method. Add any other incoming value handlers or special
  commands there. This handler shoulnd't need to be changed for most things
*/

void processSerialCommands(){
  int workByte;
 
    //if no data available then just return, nothing to do this cycle through loop
    if (Serial.available() == 0){
    return;
    }
  //read a byte
  workByte = Serial.read();

  //since all data is sent and received as name=value pairs
  //initial data is added to the command buffer. When a 61 or "=" is recieved
  //we finalize the end of the commandBuffer with a nul and start adding future characters
  //to the value buffer.
  if (workByte == 61){
      commandBuffer[ commandBufferIndex] = 0;
      commandBufferIndex = 0;
      gotCommand = true;
      return;
  }
 
 
  //this is looking for the carriage return at the end of the command line
  //if it finds the return then it finalizes the value buffer with a nul and
  //resets the buffer indexes to get them all ready for the next command
  // and finally passes the most recently received command=value pair to the process command
  if (workByte == 13){
    valueBuffer[ valueBufferIndex]=0;
    valueBufferIndex = 0;
    commandBufferIndex = 0;
    gotCommand = false;
    processCommand();
    return;
  }
 
 
  //if we haven't finalized the command yet (or address as it's now called in XTension)
  //then we add the byte to the commandBuffer and increment the index to wait for the next one
  if (!gotCommand){
    commandBuffer[ commandBufferIndex] = workByte;
    commandBufferIndex++;
   
    //make sure that we dont overrun the buffer though and reset it if we're receiving garbage
    if (commandBufferIndex > commandBufferSize + 1){
      commandBufferIndex = 0;
      return;
    }
   
  } else {
   
    //we've already got the command because gotCommand has been set to true by the
    //check above for a 61 value or "="
    //so now add instead to the value buffer, increment it's counter and continue
    valueBuffer[ valueBufferIndex] = workByte;
    valueBufferIndex++;
   
    //make sure that the value buffer doesn't overflow and if so then
    //reset both the command and value buffer due to garbage on the line.
    if (valueBufferIndex > valueBufferSize + 1){
      commandBufferIndex = 0;
      valueBufferIndex = 0;
      return;
    }
  }
 
}

//XTENSION here is where you will receive incoming commands use the string objects to manage your response
//  add as many addresses as you need.

void processCommand(){
  String theCommand = String( commandBuffer);
  String theValue = String( valueBuffer);
 
  if (theCommand == "ZONE1"){
  if (theValue == "on"){ 
  digitalWrite (zone1, LOW);
  }else if (theValue == "off"){
  digitalWrite (zone1, HIGH);
  } else {
      digitalWrite (zone1, HIGH);
    }
   
    return;
  }
  if (theCommand == "ZONE2"){
  if (theValue == "on"){ 
  digitalWrite (zone2, LOW);
  }else if (theValue == "off"){
  digitalWrite (zone2, HIGH);
  } else {
      digitalWrite (zone2, HIGH);
    }
   
    return;
  }
  if (theCommand == "ZONE3"){
  if (theValue == "on"){ 
  digitalWrite (zone3, LOW);
  }else if (theValue == "off"){
  digitalWrite (zone3, HIGH);
  } else {
      digitalWrite (zone3, HIGH);
    }
   
    return;
  }
  if (theCommand == "ZONE4"){
  if (theValue == "on"){ 
  digitalWrite (zone4, LOW);
  }else if (theValue == "off"){
  digitalWrite (zone4, HIGH);
  } else {
      digitalWrite (zone4, HIGH);
    }
   
    return;
  }
  if (theCommand == "ZONE5"){
  if (theValue == "on"){ 
  digitalWrite (zone5, LOW);
  }else if (theValue == "off"){
  digitalWrite (zone5, HIGH);
  } else {
      digitalWrite (zone5, HIGH);
    }
   
    return;
  }
  if (theCommand == "ZONE6"){
  if (theValue == "on"){ 
  digitalWrite (zone6, LOW);
  }else if (theValue == "off"){
  digitalWrite (zone6, HIGH);
  } else {
      digitalWrite (zone6, HIGH);
    }
   
    return;
  }
  if (theCommand == "ZONE7"){
  if (theValue == "on"){ 
  digitalWrite (zone7, LOW);
  }else if (theValue == "off"){
  digitalWrite (zone7, HIGH);
  } else {
      digitalWrite (zone7, HIGH);
    }
   
    return;
  }
  if (theCommand == "ZONE8"){
  if (theValue == "on"){ 
  digitalWrite (zone8, LOW);
  }else if (theValue == "off"){
  digitalWrite (zone8, HIGH);
  } else {
      digitalWrite (zone8, HIGH);
    }
   
    return;
  }
  if (theCommand == "ZONE9"){
  if (theValue == "on"){ 
  digitalWrite (zone9, LOW);
  }else if (theValue == "off"){
  digitalWrite (zone9, HIGH);
  } else {
      digitalWrite (zone9, HIGH);
    }
   
    return;
  }
  if (theCommand == "ZONE10"){
  if (theValue == "on"){ 
  digitalWrite (zone10, LOW);
  }else if (theValue == "off"){
  digitalWrite (zone10, HIGH);
  } else {
      digitalWrite (zone10, HIGH);
    }
   
    return;
  }
  if (theCommand == "ZONE11"){
  if (theValue == "on"){ 
  digitalWrite (zone11, LOW);
  }else if (theValue == "off"){
  digitalWrite (zone11, HIGH);
  } else {
      digitalWrite (zone11, HIGH);
    }
   
    return;
  }
  if (theCommand == "ZONE12"){
  if (theValue == "on"){ 
  digitalWrite (zone12, LOW);
  }else if (theValue == "off"){
  digitalWrite (zone12, HIGH);
  } else {
      digitalWrite (zone12, HIGH);
    }
   
    return;
  }
  if (theCommand == "ZONE13"){
  if (theValue == "on"){ 
  digitalWrite (zone13, LOW);
  }else if (theValue == "off"){
  digitalWrite (zone13, HIGH);
  } else {
      digitalWrite (zone13, HIGH);
    }
   
    return;
  }
  if (theCommand == "ZONE14"){
  if (theValue == "on"){ 
  digitalWrite (zone14, LOW);
  }else if (theValue == "off"){
  digitalWrite (zone14, HIGH);
  } else {
      digitalWrite (zone14, HIGH);
    }
   
    return;
  }
  if (theCommand == "ZONE15"){
  if (theValue == "on"){ 
  digitalWrite (zone15, LOW);
  }else if (theValue == "off"){
  digitalWrite (zone15, HIGH);
  } else {
      digitalWrite (zone15, HIGH);
    }
   
    return;
  }
  if (theCommand == "ZONE16"){
  if (theValue == "on"){ 
  digitalWrite (zone16, LOW);
  }else if (theValue == "off"){
  digitalWrite (zone16, HIGH);
  } else {
      digitalWrite (zone16, HIGH);
    }
   
    return;
  }
 
  //add as many more comparisons for theCommmand as you need to for your application
  //XTension will always send address=value pairs if it's a change to a unit, though
  //any data may be sent with the "send data" verb including commands that have no value
  //though in that case you should still send the = and then immediately the return. like
  //reboot=/13 do not omit the equal sign.

}




void processButtons(){
  boolean debounceTimeout;
 
  if ((currentMillis - lastButtonMillis) > 100){
    debounceTimeout = true;
  } else {
    debounceTimeout = false;
  }
 
 
  if (digitalRead( button1) == LOW){
    //button1 is pushed
    if ((debounceTimeout) && (currentButtonPushed != button1)){
      currentButtonPushed = button1;
      lastButtonMillis = currentMillis;
      Serial.println( "button1=on");
      return;
    }
  } else if (currentButtonPushed == button1){
      //the button is up but the last button pushed was ours so we can reset it
      if (debounceTimeout){
        lastButtonMillis = currentMillis;
        currentButtonPushed = -1;
      }
    }
    if (digitalRead( button2) == LOW){
    //button2 is pushed
    if ((debounceTimeout) && (currentButtonPushed != button2)){
      currentButtonPushed = button2;
      lastButtonMillis = currentMillis;
      Serial.println( "button2=on");
      return;
    }
  } else if (currentButtonPushed == button2){
      //the button is up but the last button pushed was ours so we can reset it
      if (debounceTimeout){
        lastButtonMillis = currentMillis;
        currentButtonPushed = -1;
      }
    }
    if (digitalRead( button3) == LOW){
    //button3 is pushed
    if ((debounceTimeout) && (currentButtonPushed != button3)){
      currentButtonPushed = button3;
      lastButtonMillis = currentMillis;
      Serial.println( "button3=on");
      return;
    }
  } else if (currentButtonPushed == button3){
      //the button is up but the last button pushed was ours so we can reset it
      if (debounceTimeout){
        lastButtonMillis = currentMillis;
        currentButtonPushed = -1;
      }
    }
    if (digitalRead( button4) == LOW){
    //button4 is pushed
    if ((debounceTimeout) && (currentButtonPushed != button4)){
      currentButtonPushed = button4;
      lastButtonMillis = currentMillis;
      Serial.println( "button4=on");
      return;
    }
  } else if (currentButtonPushed == button4){
      //the button is up but the last button pushed was ours so we can reset it
      if (debounceTimeout){
        lastButtonMillis = currentMillis;
        currentButtonPushed = -1;
      }
    }
    if (digitalRead( button5) == LOW){
    //button5 is pushed
    if ((debounceTimeout) && (currentButtonPushed != button5)){
      currentButtonPushed = button5;
      lastButtonMillis = currentMillis;
      Serial.println( "button5=on");
      return;
    }
  } else if (currentButtonPushed == button5){
      //the button is up but the last button pushed was ours so we can reset it
      if (debounceTimeout){
        lastButtonMillis = currentMillis;
        currentButtonPushed = -1;
      }
    }
  }[/code]

Do you se anything that should be changed it works as I want but cleaning it up is always a plus.
Thanks,
Jeff
userHeadPic DrJeff
2014-04-16 22:09:07 If you are not using the the Software Serial port, i t is better to comment these useless code .
It won't pass the "verify".

By the way, did you set the parameter of the xbee with XCTU? And how do you receive the data?
What about change another serial port?
It is better to attach a hardware connection here help us know what is happened.

Here is a Serial1 received data check sketch:
[code]void setup()

  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop()

  if(Serial1.available()>0)
  {
    char inbyte=Serial1.read();
    Serial.print(inbyte);
  }
}


[/code]
It will print all Serial1 received in the monitor
userHeadPic Grey.CC
2014-04-16 19:40:03 Hey Grey,
I couldn't get the Arduino to communicate via Xbee with the computer suppling power to the Arduino from the USB port. Everything lights up, but no Xbee communication only Serial communication via USB. That is why I removed the USB and supplied power via VIN. I am using hardware serial I am not using "sprinklerSerial" at all it was an attempt at softwareSerial but didn't want to use it because of the three hardware serial connections.

Thanks
Jeff
userHeadPic DrJeff
2014-04-14 22:34:39 Hello Jeff,
I find you haven't defined "sprinklerSerial" in your code.
Is it a SoftwareSerial port?

It is no need to use jumper wire to connect xbbee. MEGA I/O shield has 3 xbee slots on the board, which is connect Serial0~2. And SD card slot won't affect xbee.

Anyway, what is your mean of "The shield would not work with the USB cable power" no led? or something else?


userHeadPic Grey.CC
2014-04-14 20:58:30 Ok the brilliant guy figured it out...Yep I'm talking about myself. The shield would not work with the USB cable powering the arduino and the Xbee. When I used the VIN as the power source without the USB plugged in everything is functional. Yet I still have not figured how to use the alternate serial connections. Any thoughts?

Thanks,
Jeff
userHeadPic DrJeff