Problemi tra libreria Servo.h e IrRemote.h

Buongiorno Ragazzi, sono alle prime armi con Arduino (Io nel caso specifico utilizzo Arduino Uno - Ide 1.0.5). Vi spiego il mio problema. Sto realizzando un programmino che implementi un accesso automatico ad un parcheggio attraverso un comune telecomando TV (che tenga conto dei posti disponibili- I posti disponibili sono 9- Se vi sono posti disponibili si accende un led verde e una sbarra comandata da un servomotore permetterà l'ingresso; se non vi sono posti disponibili si accende un led rosso) In pratica decodifica i segnali provenienti da un telecomando. Nel caso specifica decodifico due stati (ingresso e uscita) corrispondenti a due pulsanti del telecomando. Ho verificato che fino a che non includo il servo e la relativa libreria (Servo.h) il programma funziona correttamente. Non appena introduco la libreria Servo.h il servomotore vedo non fa quello che dico io. La sbarra si alza una prima volta ma poi non scende più e il resto del circuito vedo che non gira proprio come dovrebbe. Ad esempio ho notato che la ricezione del comando del telecomando viene recepito con un certo ritardo...
Io ipotizzo un conflitto tra librerie Servo.h e IrRemote.h (tra parentesi ho alimentato a parte il servo, non utilizzo la stessa alimentazione usb di Arduino). Come posso risolvere il problema? Grazie in anticipo. Ecco qui sotto lo sketch che vorrei implementare:

#include <IRremote.h> // use the library
int receiver = 8; // pin 1 of IR receiver to Arduino digital pin 8
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;


int  Available= 9;                    // Number of places available.

#include <Servo.h>
Servo myservo;  // create servo object to control a servo

#define ServoM    12        //Connected to the servo motor.

#define BarLow    177       //Low position of the barrier.
#define BarUp     95        //Up position of the barrier.




void setup()
{
  Serial.begin(9600); // for serial monitor output
  irrecv.enableIRIn(); // Start the receiver
  pinMode(7, OUTPUT); // Pin verde - Segnalazione Posti disponibili
  
    pinMode(2, OUTPUT); // Pin rosso - Segnalazione Posti esauriti

  


}
void loop()
{
   myservo.attach(ServoM);          // attaches the servo.
  // myservo.write(BarLow);          //Barrier in the low position


  
  
  if (irrecv.decode(&results)) // have we received an IR signal?
  {

    irrecv.resume();// receive the next value
    
  }
 
  if ( results.value == 551520375 ||  results.value == 0x10406 ){ //tasto 1 sul telecomando - ingresso autoveicolo
  
  
  if(Available != 10){
    
    if(Available != -177){ 
    Available--;
        Serial.println(Available); // display it on serial monitor in hexadecimal

    }
}
  
    

    




    }
    
    
  // In baso al valore Available scelgo cosa fare
  switch (Available)  
  {  
    // 
  case 9:  //posti dispnibili 9
    digitalWrite(7, HIGH);  // accendo il LED verde
    digitalWrite(2, LOW);  // spengo il LED rosso
    
    myservo.write(BarLow);

 
  
    break;  
  
    // 
  case -18:  //posti dispnibili 8
    digitalWrite(7, HIGH);  // 
    digitalWrite(2, LOW);  //   
    
    myservo.write(BarUp);
    delay(5000);
    myservo.write(BarLow);


  
    break;  
  
    // 
  case -40:  //posti dispnibili 7
    digitalWrite(7, HIGH);  // 
    digitalWrite(2, LOW);  // 
   
    myservo.write(BarUp);
    delay(5000);
    myservo.write(BarLow);
 
    break;  
 
    // Led si spegne  
  case -62:  //posti dispnibili 6
    digitalWrite(7, HIGH);  // 
    digitalWrite(2, LOW);  // 
  
    myservo.write(BarUp);
    delay(5000);
    myservo.write(BarLow);
  
    break; 
   
   
    case -84:  //posti dispnibili 5
    digitalWrite(7, HIGH);  // 
    digitalWrite(2, LOW);  // 
   
    myservo.write(BarUp);
    delay(5000);
    myservo.write(BarLow);
 
    break;  
    
    case -105://posti dispnibili 4  
    digitalWrite(7, HIGH);  // 
    digitalWrite(2, LOW);  // 
   
    myservo.write(BarUp);
    delay(5000);
    myservo.write(BarLow);
 
    break; 
   
    case -123:  //posti dispnibili 3
    digitalWrite(7, HIGH);  // 
    digitalWrite(2, LOW);  //
   
    myservo.write(BarUp);
    delay(5000);
    myservo.write(BarLow);
 
    break; 
   
    case -141:  //posti dispnibili 2
    digitalWrite(7, HIGH);  // 
    digitalWrite(2, LOW);  // 
  
    myservo.write(BarUp);
    delay(5000);
    myservo.write(BarLow);
  
    break; 
   
    case -159:  //posti dispnibili 1
    digitalWrite(7, HIGH);  // 
    digitalWrite(2, LOW);  // 
   
    myservo.write(BarUp);
    delay(5000);
    myservo.write(BarLow);
 
    break;  
    
    case -177:  //posti dispnibili 0
    digitalWrite(7, LOW);  // 
    digitalWrite(2, HIGH);  // 
  
    myservo.write(BarUp);
    delay(5000);
    myservo.write(BarLow);
  
    break;  

  }  

    
    
    


 if ( results.value == 551504055 ||  results.value == 0x10404 ){ //tasto 2 sul telecomando
     if(Available != 9){

    Available++;
  

   Serial.println(Available); // display it on serial monitor in hexadecimal


  
 

  }  
}
}

La Servo disattiva gli interrupt mentre spedisce i comandi al motore, per cui la IRremote, che funziona con gli interrupt ed i timer, viene temporaneamente bloccata.

Il GND delle alimentazioni è tutto in comune ?