What could be different about the Fio/Xbee?

I have working on a quadcopter telemetry system and had it running pretty good on a Uno and then moved it to a home brew 8mhz arduino, which also worked well. I posted my code and a fellow flyer tried the system with a Fio v2 and we can't get it to run properly. It seems that the serial buffer gets overrun. The first set of data comes in fine but then the values get all jumbled up after that. The communication is done by Xbees Pros set at 115200.

A brief explaination of whats happening:
Sending "s" to the quadcopter will tell it to send a stream of data. The expected return is:

0,0.02,-0.01,9.82,2.0,0,1500,1500,1500,1000,1000,2000,0,0,1000,1000,1000,1000,0,0,0,0,11.3,0\r\n

Sending "x" will stop the stream. From there I'm just sorting and displaying the data (and a few other small things).

Please let me know if there is anything special that needs to be done for this code to run with the Fio.

Thank you!

#include <TextFinder.h>
#include "PCD8544.h"
#include <EEPROM.h>

TextFinder finder(Serial);

const int NUMBER_OF_FIELDS = 24; // how many comma-separated fields we expect
int fieldIndex = 0; // the current field being received
float values[NUMBER_OF_FIELDS]; // array holding values for all the fields

//Adafruit Pin out. Sparkfun may be different
// pin 7 - (SCLK) 
// pin 6 - (DIN)
// pin 5 - (D/C)
// pin 4 - (CS)
// pin 3 - (RST)
PCD8544 nokia = PCD8544(7, 6, 5, 4, 3);

const int upBut = 14;
const int dnBut = 15;
const int rtBut = 16;
const int ltBut = 17;
const int cnBut = 18;
const int buzzPin = 9;
const int motorPin = 11;

int batPix = 0; //Pixel for battery graphics
float deltaV = 0; //Used for the battery graphic
int craftHeading = 0;
int alarmHeading = 0;
int craftAlt = 0;
int alarmAlt;
float craftBattery = 0;
float alarmBattery;
int menuVal = 0;
int debounce = 25;
int shortwait = 75;
float tempBat;
int confirmHead = 0;
int confirmAlt = 0;
int craftMode = 0;
unsigned long time = 0;
String mode;

void setup()
{
  
  Serial.begin(111111);

  pinMode(upBut, INPUT);
  pinMode(dnBut, INPUT);
  pinMode(rtBut, INPUT);
  pinMode(ltBut, INPUT);
  pinMode(cnBut, INPUT);
  pinMode(motorPin, OUTPUT);
  
  
//  alarmHeading = EEPROM.read(0); Not sure what the value of storing the heading is yet... It will always be different so...
  alarmAlt = EEPROM.read(1);
  tempBat = (EEPROM.read(2));
  alarmBattery = tempBat / 10; //converting int back to a float.


  nokia.init();
  nokia.setContrast(60);
  
  nokia.setCursor(0, 0);
  nokia.print("Connecting to Craft.......");
  nokia.display();
  
  delay(2500); //waiting for system to catch up
  Serial.print('s'); //sending the "s" command will tell the craft to "Read All Flight Values" and send them via serial
                     //refer to http://aeroquad.com/showwiki.php?title=Serial+Commands:+AeroQuad+Ground+Station+Interface+Definitions

}

void loop()
{
  
nokia.clear(); //clearing LCD

Serial.print('s');

while (Serial.available() ==0)
{
//wait for availiable serial data
}
//Reading and sorting serial data into an array
for(fieldIndex = 0; fieldIndex < 24; fieldIndex ++)
{
values[fieldIndex] = finder.getFloat(); // get a numeric value
}
Serial.print('x');

//Assigning craft values based on array index numbers

  craftHeading = (values[3] * 57.17); //57.17 is to convert 0-6 to 0-359*
  craftAlt = (values[4] * 3.28084); //3.28084 to convert to feet
  craftBattery = values[22] + 0.28; //0.28 is a battery correction factor for the AQ32 wacky battery VD
  craftMode = values[23]; // 0= Rate, 1= Att
  
//Battery Graphic Math

deltaV = 12.4 - craftBattery;
batPix = (60 - (25 * deltaV));

//Setting up grapfics display

nokia.setCursor(0, 0);
nokia.println("CRAFT    STTNG");
nokia.setCursor(0, 9);
nokia.print(craftHeading);
nokia.setCursor(33, 9);
nokia.print("HDG");
nokia.setCursor(54, 9);
nokia.print(alarmHeading);

nokia.setCursor(0, 18);
nokia.print(craftAlt);
nokia.setCursor(33, 18);
nokia.print("ALT");
nokia.setCursor(54, 18);
nokia.print(alarmAlt);

nokia.setCursor(0, 27);
nokia.print(craftBattery);
nokia.setCursor(33, 27);
nokia.print("BAT");
nokia.setCursor(54, 27);
nokia.print(alarmBattery);

nokia.setCursor(40, 0);
nokia.println(craftMode);

nokia.setCursor(0, 38);
nokia.print("E");
nokia.setCursor(78, 38);
nokia.print("F");

//Drawing battery at bottom

nokia.drawline(8, 36, 69, 36, BLACK);
nokia.drawline(8, 47, 69, 47, BLACK);
nokia.drawline(69, 36, 69, 47, BLACK);
nokia.drawline(8, 36, 8, 47, BLACK);
nokia.drawline(70, 38, 72, 38, BLACK);
nokia.drawline(70, 45, 72, 45, BLACK);
nokia.drawline(73, 38, 73, 45, BLACK);

nokia.fillrect(9, 37, batPix, 10, 1);
nokia.display();

fieldIndex = 0; // ready to start character index over

//Rate or Att mode display

//  if(craftMode == 0){
//    mode = ('R');
//  }
// else{
//    mode = ('A');
//  }

//menu nav
//menuVal 0 = Heading, 1 = Alt, 2 = Bat
if(digitalRead(dnBut) == LOW && millis() - time > debounce){
        menuVal = menuVal + 1;
//        delay(wait);
        time = millis();
  if(menuVal  > 2){
    menuVal = 2;
    singleBEEP();
  }
}

if(digitalRead(upBut) == LOW && millis() - time > debounce){
        menuVal = menuVal - 1;
//        delay(wait);
        time = millis();
  if(menuVal  < 0){
     menuVal = 0;
     singleBEEP();
  }
}

Code Part 2 (was greater than 9500 characters)

//Alarm Adjustment

//Heading

if(menuVal == 0){
    nokia.drawrect(31, 8, 21, 9, 1); //8, 17, 26
    nokia.display();
      for( ; digitalRead(ltBut) == LOW && millis() - time > debounce ; alarmHeading++ ){
        nokia.setCursor(54, 9);
        nokia.print(alarmHeading);
        nokia.display();
//        delay(shortwait);
        time = millis();
      }
        if(alarmHeading  > 359){
          alarmHeading = 0;
        }
      for( ; digitalRead(rtBut) == LOW && millis() - time > debounce ; alarmHeading-- ){
        nokia.setCursor(54, 9);
        nokia.print(alarmHeading);
        nokia.display();
//        delay(shortwait);
        time = millis();
      }
        if(alarmHeading  < 0){
          alarmHeading = 359;
        }
}

//Alt

if(menuVal == 1){
    nokia.drawrect(31, 17, 21, 9, 1); //8, 17, 26
    nokia.display();
      for( ; digitalRead(ltBut) == LOW && millis() - time > debounce ; alarmAlt++ ){
        nokia.setCursor(54, 18);
        nokia.print(alarmAlt);
        nokia.display();
//        delay(shortwait);
        time = millis();
       }
      for( ; digitalRead(rtBut) == LOW && millis() - time > debounce ; alarmAlt-- ){
        nokia.setCursor(54, 18);
        nokia.print(alarmAlt);
        nokia.display();
//        delay(shortwait);
        time = millis();
       }
      if(alarmAlt  < 0){
        alarmAlt = 0;
	singleBEEP();
	}

// We wait for the center button to confirm that the value should get stored in the EEPROM
  if(digitalRead(cnBut) == LOW && millis() - time > debounce){  //Caution!!!! EEPROM will not accept anything greater than 255!
    EEPROM.write(1, alarmAlt);    //If you need to save Alts greater than 255, research arduino's
//    delay(wait);             //website for instruction and more information.
        time = millis();
    doubleBEEP();
    confirmAlt = 0;
    }
}

//Bat

if(menuVal == 2){
    nokia.drawrect(31, 26, 21, 9, 1); //8, 17, 26
    nokia.display();
      for( int i = 0; digitalRead(ltBut) == LOW && millis() - time > debounce ; i++ ){
        alarmBattery = alarmBattery + (i * 0.1);
        nokia.setCursor(54, 27);
        nokia.print(alarmBattery);
        nokia.display();
//        delay(shortwait);
        time = millis();
       }
      for( int i = 0; digitalRead(rtBut) == LOW && millis() - time > debounce ; i-- ){
        alarmBattery = alarmBattery + (i * 0.1);
        nokia.setCursor(54, 27);
        nokia.print(alarmBattery);
        nokia.display();
//        delay(shortwait);
        time = millis();
       }
      if(alarmBattery  < 10.0){
        alarmBattery = 10.0;
        singleBEEP();
       }
      if(alarmBattery  > 12.4){
        alarmBattery = 12.4;
        singleBEEP();
       }
// We wait for the center button to confirm that the value should get stored in the EEPROM
  if(digitalRead(cnBut) == LOW && millis() - time > debounce){
    tempBat = (alarmBattery * 10); //this will convert our float to an int that we will convert back during power up.
    EEPROM.write(2, tempBat);      //for example 10.2 * 10 = 102. 102 / 10 = 10.2... make sense?
//    delay(wait);
        time = millis();
    doubleBEEP();
    }
}

//Bat Alarm

if(craftBattery < alarmBattery){
  doubleBEEP(); //if the battery is equal to or less than the setting, make a lot of noise continuously.
}
if(alarmHeading == craftHeading){ // maybe add && confirmHead == 0
  doubleBEEP();
  shortVib();
//  confirmHead = 1;
}

//Alt Alarm

if(alarmAlt == craftAlt && confirmAlt == 0){
  tripleBEEP(); //if the battery is equal to or less than the setting, make a lot of noise continuously.
  shortVib();
  confirmAlt = 1;
}
if(confirmAlt == 1 && craftAlt <= (alarmAlt - 3)){ //Notify that craft has lost alt below set point and 3 foot dead band
  dnBEEP();
  confirmAlt = 0;
}
if(confirmAlt == 1 && craftAlt >= (alarmAlt + 3)){ //Notify that craft has gained alt above set point and 3 foot dead band
  upBEEP();
  confirmAlt = 0;
}

}

//-------------------------------------------

void singleBEEP() {			
  // play a note on pin 9 at 1000hz for 75 ms:
  tone(buzzPin, 1000, 75);
}

//-------------------------------------------

void doubleBEEP() {
  tone(buzzPin, 1000, 75);
  delay(125);
  tone(buzzPin, 1000, 75);
}

//------------------------------------------

void tripleBEEP() {			
  tone(buzzPin, 1000, 75);
  delay(125);
  tone(buzzPin, 1000, 75);
  delay(125);
  tone(buzzPin, 1000, 75);
}

//-----------------------------------------

void upBEEP() {			
  tone(buzzPin, 800, 125);
  delay(100);
  tone(buzzPin, 1000, 125);
}

//----------------------------------------

void dnBEEP() {			
  tone(buzzPin, 1000, 125);
  delay(100);
  tone(buzzPin, 800, 125);
}

//---------------------------------------

void shortVib() {      
  analogWrite(motorPin, 100); //where speed = 0-255
  delay(250);
  analogWrite(motorPin, 0); //where speed = 0-255}
}