Tx-Rx IR con Arduino Leonardo

Ciao a tutti, sono Piero e da poco mi sto cimentando con Arduino.
Ho dei problemi di programmazione. Spero che qualcuno mi possa dare qualche suggerimento. Voglio implementare due coppie di Tx - Rx ad infrarosso. Il ricevitore è un TSOP (a 38 kHz). Utilizzando il seguente sketch (sotto riportato) e collegando il trasmettitore (un semplice LED ad infrarosso) alla porta PWM 11 tutto funziona.
Se cambio porta non và. Tra parentesi io utilizzo un Arduino Leonardo mentre lo sketch è ottimizzato per un ATMega 328 (Arduino Uno). Penso che sia questo il problema ... problemi di registri ma non riesco a risolverlo. Grazie in anticipo.

#define RXTSOP 2 //Pin output TSOP
#define TXIR 11 //or pin 3 LED IR
#define LED12 12 //LED on pin 13

//flag
boolean transmitting_IR; //transmission flag

// turn_off , turn_on, detect functions come as is from
// http://www.eng.utah.edu/~cs1410/Labs/lab09.html
void turn_off_IR ()
{
// Instead of just adjusting the output on pin 11, this code also
// turns off the timer controlling the PWM output on pin 11

TCCR0A = 0; // Disconnect PWM
TCCR0B = 0; // Stops the timer
OCR0A = 0; // No timer top
digitalWrite(TXIR, LOW); // Ensure output is off

transmitting_IR = false;
}

void turn_on_IR ()
{
// Set up Timer2 (which can be connected to pins 3 and 11)
// For full details, see:
// arduino.cc/en/Tutorial/SecretsOfArduinoPWM
// The syntax here has me baffled, but the patterns of usage
// are clear if you look at the ATMega328 diagrams.
// _BV appears to stand for 'bit value'
// Different bits need to be set to control each timer
// Refer to diagrams for clarity

TCCR0A = _BV(WGM01) | _BV(COM0A0); // This mode toggles output once per timer cycle
TCCR0B = _BV(CS00); // Do not scale the clock down - use 16 MHz timer rate.
OCR0A = 210; // Divide sys. clock by 210, 1/2 cycle = 76 khz, 1 cycle = 38 khz

// Output pin 11 should now be emitting a 38 khz signal.

transmitting_IR = true;
}

void detectIR()
{
if(digitalRead(RXTSOP)){
digitalWrite(LED12 ,HIGH);
}else{
digitalWrite(LED12 ,LOW);
}
}

void setup(){
pinMode(TXIR, OUTPUT);
pinMode(RXTSOP, INPUT);
turn_on_IR();
delay(100);
}

void loop(){
detectIR(); // search for IR
delay(50);
}

Cambiando porta devi anche cambiare i settaggi dei timer.
Trovi tutte le info nel datasheet del micro --> Smart | Connected | Secure | Microchip Technology

@rosanna74, ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Il codice deve essere racchiuso nei tag code, vedi sezione 7 del regolamento, spiega bene come fare. Altrimenti parte del codice può risultare illeggibile.

Paolo ha ragione ed in più stai usando il Timer0 che è usato da milis().

Meglio usare un altro timer tra quelli disponibili con Leonardo/Micro, ovvero 1, 3 o 4.