Algo muy raro entre infrarrojos e instruccion tone

Estimados compañeros, a ver si ustedes entienden el porque mi programa actua asi. Vereis os explico...
Estoy probando un programa de esta pagina El cajón de Arduino: Utilización mando infrarrojos I: Lectura del código y ejemplo, que lo que hace es recibir el codigo de cada tecla de un mando y mostrar dicho codigo por puerto serie. Hasta ahi todo correcto. Aparte, yo quiero que cada vez que se pulsa una tecla del mando, tambien haga destellar un led y hacer un pequeño bip con un zumbador, asi que le he añadido las ultimas lineas al programa para que haga tambien lo del led y el zumbador. Sin embargo, cuando añado la ultima linea es cuando sucede lo que me trae loco, y es que el programa deja de funcionar, osea, recibe el primer codigo, el led destella, pero solo lo hace una vez, a partir de la segunda ya no recibe codigo ni hace nada, y eso solamente al añadir la ultima linea, si la quito el programa vuelve a recibir todos los codigos que le envie. He leido en la web de arduino que el comando tone puede generar interferencias en los pines 3 y 11, sin embargo, yo tengo el zumbador en el pin 12.
Asi que mi pregunta es muy sencilla ¿Porque se bloquea el programa al añadir la ultima linea? Es raro, rarisimo pero alguna explicacion tiene que tener. Agradezco de antemano vuestra ayuda.


// Probando recepcion infrarrojos
// Placa usada ARDUINO UNO
// Sensor infrarrojos conectado al pin 8
// Led indicador de recepcion de datos conectado al pin 13
// Zumbador conectado al pin 12

#include <Arduino.h>
#include <NECIRrcv.h>
#define IRPIN 8 // pin al que conectamos el receptor de IR
static int aux = 1; // <--- Esta linea no se para que sirve, ya que si la elimino, el programa hace lo mismo
NECIRrcv ir(IRPIN) ;
int led=13;
int zumbador=12;
int ledOn=50;

void setup()
{
Serial.begin(9600) ;
Serial.println("NEC IR codigo recepcion") ;
ir.begin() ;
pinMode(led, OUTPUT);
pinMode(zumbador, OUTPUT);
}
void loop()
{
unsigned long ircode ;
while (ir.available())
{
ircode = ir.read() ;
Serial.println(ircode) ;
digitalWrite(led, HIGH);
delay(ledOn);
digitalWrite(led, LOW);
tone(zumbador,1000,100); // <--- ESTA ES LA INSTRUCCION QUE DETIENE EL PROGRAMA
}
}

He encontrado una posible respuesta, aunque no me lo soluciona ya que la solucion que proponen no funciona. Si alguien la entiende o sabe alguna alternativa o solucion estare muy agradecido. Tonos con mando a distancia - problema - Español - Arduino Forum

Chequea esto
http://playground.arduino.cc/Main/TimerPWMCheatsheet
Algun timer esta interfiriendo con la selección de tus pines.

Gracias surbyte, algo he leido porque he visto que a mucha gente le pasa lo mismo, pero soy aun demasiado novato para entender eso de los timmers y menos para modificar librerias. De todas formas sabiendo que por ahi van los tiros, con tiempo seguire investigando a ver, si lo soluciono. Gracias igualmente. :wink:

Tal vez me contradiga pero ahora que miro con detalle, el pin 12 teoricamente no debería generarte problemas.
Sin embargo porque no pruebas cambiar ese pin por alguno de estos a ver si funcionan.

Pines : 2, 4, 7
según este esquema para el pinout del ARDUINO UNO, dichos pines no tienen PWM hardware de modo que respetando eso alguno debe hacer que tu programa funcione bien.

Aclaro que el pin que elegiste tampoco interfiere pero bueno ya sabemos que algo ocurre.

Hola

Yo tuve que cambiar los timer en las librerias, un peñazo y encima no siempre sale bien..
No lo he probado aun, pero esto puede ser una solución:
(Es una librería de un tone que no gasta timer)

http://forum.arduino.cc/index.php?topic=235774.0

Salu2