Quiero usar el Sensor Ultrasonico y al mismo tiempo usar el Control remoto +IR

Realice el siguiente programa pero me sale error con la placa de arduino uno. Me gustaría que me ayudaran para saber que error o cuales errores estoy cometiendo. Gracias. :confused:

#include <SoftwareSerial.h>
#include <Servo.h> 
#include "NewPing.h"
//#include <boarddefs.h>
#include <IRremote.h>
#include <IRremoteInt.h>
//#include <ir_Lego_PF_BitStreamEncoder.h>
//#include<stdlib.h>
#define SONAR_SERVO_PIN 4
#define TRIGGER_PIN     A0
#define ECHO_PIN        A1
#define MAX_DISTANCE    1000

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
Servo myServo;




const int enA = 11;
const int in1 = 9;
const int in2 = 8;
const int enB = 5;
const int in3 = 7;
const int in4 = 6;
const int receptor = 3;
const int triggerDistance = 30;
unsigned int time;           
int distance;                 
int fDistance;                
int lDistance;                
int rDistance;               

IRrecv irrecv(receptor); 
decode_results codigo; 


void setup() 
{ 
Serial.begin(9600);
irrecv.enableIRIn(); 
pinMode (TRIGGER_PIN, OUTPUT);         
pinMode (ECHO_PIN, INPUT);
myServo.attach(SONAR_SERVO_PIN);   
                            
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
} 


void loop()
{

if (irrecv.decode(&codigo))
{
Serial.println(codigo.value, HEX);

   if (codigo.value==0xFFB04F)
   {
      scan();                                
     fDistance = distance;                  
     if(fDistance < triggerDistance){       
        moveBackwards(127);                  
        delay(1000);                        
        moveRight(80);                     
        delay(300);                         
        moveStop();                         
        scan();                                
        rDistance = distance;               
        moveLeft(80);                      
        delay(300);                          
        moveStop();                         
        scan();                              
        lDistance = distance;               
        if(lDistance < rDistance){           
         moveRight(80);                   
         delay(300);                      
         moveForward(127);                 
         }
         else{
          moveForward(127);                 
          }
         }
         else{
             moveForward(127);                   
         }  
   }
    
    
    if (codigo.value==0xFF6897)
   {
  moveStop();                         
   }

   
    if (codigo.value==0xFF18E7)
   {
      moveForward(127);
      delay(1000); 
   }

   if (codigo.value==0xFF52AD)
   {
      moveBackwards(127);                  
      delay(1000);     
   }

   if (codigo.value==0xFF5AA5)
   {           
      moveRight(127);                   
      delay(1000); 
   }

   if (codigo.value==0xFF10EF)
   { 
     moveLeft(127);                      
     delay(1000);       
   }
 
   delay(500);
   irrecv.resume();

}



}

void scan()    
{
int deg = 90;  
myServo.write(deg);
delay(10);

digitalWrite (TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite (TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite (TRIGGER_PIN, LOW);

time=pulseIn(ECHO_PIN, HIGH);

distance= time/58;
//delay(30);
}




void moveForward(int speed) 
{
// turn on motor A
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);

// turn on motor B
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);

analogWrite(enA, speed);
analogWrite(enB, speed);
}

//Subrutina para mover atras
void moveBackwards(int speed) 
{
// turn on motor A
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);

// turn on motor B
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);

analogWrite(enA, speed);
analogWrite(enB, speed);
}

void moveRight(int speed)  
{

int deg = 0;    
myServo.write(deg);
delay(500);

deg = 90;       
myServo.write(deg);
delay(500);

// turn on motor A
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);

// turn off motor B
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);

analogWrite(enA, speed);
analogWrite(enB, speed);
}

void moveLeft(int speed)    

int deg = 180; 
myServo.write(deg);
delay(500);

deg = 90;   
myServo.write(deg);
delay(500);

// turn on motor A
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);

// turn off motor B
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);

analogWrite(enA, speed);
analogWrite(enB, speed);
}

void moveStop() 
{

int deg = 90; 
myServo.write(deg);
delay(200);

deg = 0; 
myServo.write(deg);
delay(1000);

deg = 90; 
myServo.write(deg);
delay(200);

deg = 180; 
myServo.write(deg);
delay(1000);

deg = 90;  
myServo.write(deg);
delay(10);

digitalWrite(in1, LOW);    
digitalWrite(in2, LOW);  
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);

delay(200);
}