(SOLVED)Can any one help?

/*
Sketch to read information from a cars ECU via the STN1110 IC.

Created by - Andrew Hughes
Created on - 21 July 2012
Changed on - 31 July 2012

Software version - v0_1_0
*/

#define Device_Name "...STNunioOBD...\r"
#define Software_Version "v0_1_0\r"

//Includes and inculed setups.
#include <avr/pgmspace.h>
#include <SoftwareSerial.h>
SoftwareSerial SoftwareSerial(2, 3); //Rx pin 2, Tx pin 3.

//Define pin names.
#define pin_Heartbeat_LED     13
#define pin_STN_Enable        4
#define pin_Ignition_Monitor  5

//Setup globle variables.
//byte HeartbeatLED = HIGH;
//int HeartbeatOldMillis = 0;

byte IgnitionStatusNew = HIGH;
byte IgnitionStatusOld = HIGH;

//unsigned long SupportedPID00 = 0;
//unsigned long SupportedPID20 = 0;
//unsigned long SupportedPID40 = 0;

//STN AT cmd's.
//Asterisk (*) marks default setting.
#define STN_D    "ATD\r"   //Set all settings to defaults.
#define STN_DPN  "ATDPN\r" //Describe current protocol by number.
#define STN_E0   "ATE0\r"  //Echo off.
#define STN_E1   "ATE1\r"  //Echo on*.
#define STN_L0   "ATL0\r"  //Linefeeds off*.
#define STN_L1   "ATL1\r"  //Linefeeds on.
#define STN_M0   "ATM0\r"  //Memory off.
#define STN_M1   "ATM1\r"  //Memory on*.
#define STN_RV   "ATRV\r"  //Read voltage.
#define STN_WS   "ATWS\r"  //Warm start.
#define STN_S0   "ATS0\r"  //Printing of spaces off.
#define STN_S1   "ATS1\r"  //Printing of spaces on*.
#define STN_SP0  "ATSP0\r" //Protocol - Automatic.
#define STN_SP1  "ATSP1\r" //Protocol - SAE J1850 PWM (41.6 kbaud).
#define STN_SP2  "ATSP2\r" //Protocol - SAE J1850 VPW (10.4 kbaud).
#define STN_SP3  "ATSP3\r" //Protocol - ISO 9141-2 (5 baud init, 10.4 kbaud).
#define STN_SP4  "ATSP4\r" //Protocol - ISO 14230-4 KWP (5 baud init, 10.4kbaud).
#define STN_SP5  "ATSP5\r" //Protocol - ISO 14230-4 KWP (fast init, 10.4 kbaud).
#define STN_SP6  "ATSP6\r" //Protocol - ISO 15765-4 CAN (11 bit ID, 500 kbaud).
#define STN_SP7  "ATSP7\r" //Protocol - ISO 15765-4 CAN (29 bit ID, 500 kbaud).
#define STN_SP8  "ATSP8\r" //Protocol - ISO 15765-4 CAN (11 bit ID, 250 kbaud).
#define STN_SP9  "ATSP9\r" //Protocol - ISO 15765-4 CAN (29 bit ID, 250 kbaud).
#define STN_Z    "ATZ\r"   //Reset device.

//PID list.
#define PID00   0x00 //PIDs supported [01 - 20].
#define CEL     0x04 //Calculated engine load value.
#define ECT     0x05 //Engine coolant temperature.
#define FP      0x0A //Fuel pressure.
#define ERPM    0x0C //Engine RPM.
#define VS      0x0D //Vehicle speed.
#define MAF     0x10 //MAF air flow rate.
#define TP      0x11 //Throttle position.
#define PID20   0x20 //PIDs supported [21 - 40].
#define FLI     0x2F //Fuel Level Input.
#define PID40   0x40 //PIDs supported [41 - 60].
#define AAT     0x46 //Ambient air temperature.
#define EOT     0x5C //Engine oil temperature.
#define EFR     0x5E //Engine fuel rate.

//Setup.
void setup()
{
  //Setup pin states.
  //pinMode(pin_Heartbeat_LED, OUTPUT);
  //digitalWrite(pin_Heartbeat_LED, HIGH);
  pinMode(pin_Ignition_Monitor, INPUT_PULLUP);
  pinMode(pin_STN_Enable, OUTPUT);
  digitalWrite(pin_STN_Enable, LOW);
  
  //Initialize the hardware and software serial ports.
  Serial.begin(9600);
  Serial.println(F(Device_Name));
  SoftwareSerial.begin(9600);
  
  //Check if ignition is on and enable the STN IC if it is.
  if(Ignition_Status_check() == 0)
  {
    Serial.println(F("Ignition........"));
    while(Ignition_Status_check() == 0)
    {
      delay(1000); //Wait for ignition to be turned on.
      //Heartbeat(); //Heartbeat will run once a second.
    }
  }
  
  Serial.println(freeRam());
}

//Main.
void loop()
{
  long result = 0;
  char result_str[16];
  
  //Heartbeat();
  
  get_PID(ERPM, &result, result_str);
  Serial.print(result_str);
  delay(100);

}

//Heartbeat to show program is alive.
/*void Heartbeat()
{
  int HeartbeatNewMillis = millis();
  if(HeartbeatNewMillis - HeartbeatOldMillis > 500)
  {
    HeartbeatOldMillis = HeartbeatNewMillis;
    if(HeartbeatLED == LOW)
    {
      HeartbeatLED = HIGH;
    }
    else
    {
      HeartbeatLED = LOW;
    }
    digitalWrite(pin_Heartbeat_LED, HeartbeatLED);
  }
}*/

//Check ignition status.
byte Ignition_Status_check()
{
  IgnitionStatusNew = digitalRead(pin_Ignition_Monitor);
  if(IgnitionStatusNew == LOW && IgnitionStatusOld == HIGH)
  {
    Serial.println(F("Ignition on....."));
    digitalWrite(pin_STN_Enable, HIGH); //Enable the STN IC.
    IgnitionStatusOld = IgnitionStatusNew;
    delay(1000); //Wait for STN IC to power up.
    while(STN_Setup() == 0) //Call the STN_Setup function.
    {
      Serial.println(F("STN setup fail.."));
      delay(1000);
      //Heartbeat(); //Heartbeat will run once a second.
    }
    return 1;
  }
  else if(IgnitionStatusNew == HIGH && IgnitionStatusOld == LOW)
  {
    Serial.println(F("Ignition off...."));
    digitalWrite(pin_STN_Enable, LOW); //Disable the STN IC.
    IgnitionStatusOld = IgnitionStatusNew;
    return 0;
  }
  else
  {
    return 0; //No change.
  }
}

//Setup the STN IC ready for use.
byte STN_Setup()
{
  char str_cmd[16];
  
  Serial.println(F("STN setup......"));
  SoftwareSerial.flush();
  if(STN_Command(str_cmd, PSTR(STN_M0)) != 1 || str_cmd[4] != 'O' || str_cmd[5] != 'K')
  {
    return 0;
  }
  Serial.println(str_cmd);
  STN_Command(str_cmd, PSTR(STN_SP0));
  Serial.println(str_cmd);
  STN_Command(str_cmd, PSTR(STN_E0));
  Serial.println(str_cmd);
  Serial.println(F("STN setup done.."));
  return 1;
}