Error compilando y librerías (SOLUCIONADO)

Imagino que alguien me asesinaría si me tuviera a mano, pero me arriesgaré. Según he podido leer, es un problema muy común, pero no encuentro directrices para solucionarlo. He mirado y remirado los post y en san Google, pero no solamente no encuentro la solución, si no que incrementa las dudas.
Estoy trabajando con el tema de mandos a distancia y infrarrojos. He descargado un sketch sobre el tema:

/*Codis per ordenar a Arduino que executi les ordres
Enviades pel comandament a distància.

(01 Control per infrarojos)
http://www.trastejant.es/circuitos/ArduinoIR.html

Març 2015*/

#include <WProgram.h>
 //Llamamos a librería del protocolo NEC
 #include <NECIRrcv.h>
 //Pin del sensor
 #define sensor 2;
 
 //Indicamos el pin en el que tenemos conectado el Led 
 int led = 12;
 
 /*Ahora vamos a definir cada orden del mando a distancia 
                     con una variable para que nos sea más cómodo utilizarlas despues. 
                     Recuerda que cada modelo y/o marca de mando a distancia 
                     envia sus propios códigos,asi que tendrás que investigar cuales 
                     son los de tu mando antes de poder usarlo.
 
 En la sección de circuitos encontrarás todo lo necesario para hacerlo.*/
 
 //Código del botón que usaremos para encender. 
 long enciende =  0xEF10BF00;
 //Código del botón que usaremos para apagar.
 long apaga = 0XEE11BF00;
 
 //Creamos un objeto de la libreria NEC llamado ir para poder usarla.
 NECIRrcv ir(sensor); 
 void setup{
 
 //iniciamos la recepcion
 ir.begin();
 
 //indicamos que el pin del led es una salida
 pinMode(led,OUTPUT);
 }
 
 void loop{
 //Almacenaremos la orden del mando en una variable llamada orden
 unsigned long orden; 
 
 //mientras la conexion de infrarrojos este disponible...
 while (ir.available()) {
 //..Comprobaremos si es la que estamos esperando
 if(orden == enciende){
 
 //si lo es, encendemos
 digitalWrite(led,HIGH);
 
 }else if(orden == apaga){
 
 //Si la orden es apagar, apagamos
 digitalWrite(led,LOW);
 
 }
 }
 }

Clico sobre “Verificar” el código y me da “Error compilando”, pero ninguna pista más.

Buscando cual es el problema, parece ser que la librería “WProgram.h” es obsoleta.

También he visto que, algunos han solucionado el problema, simplemente cambiando este #include, por otro llamado “Arduino.h”. Y ahí empieza la empanada, o parte de ella.

Entiendo que esta “Arduino.h” es una librería o parte de ella pero, según he leído, con solo cambiar esta palabra en el IDE, ya funcionaría, pues está incluida en alguna otra librería.

Antes, pero, he estado buscando por internet y por san Google que librería es de la que forma parte, para descargarla y ni la encuentro por ninguna parte, ni leo ninguna referencia esclarecedora sobre el tema (Adjunto imagen de las librerías que tengo en el archivo “Libraries”).

También entiendo que si fuera un problema de librerías, al correr la “verificación” me daría error en este aspecto específico, pero no solamente no da error concreto, si no que solamente indica “Error de compilación”, con lo que me deja absolutamente incapaz de buscar ninguna solución.

Ya no se si realmente tengo que cambiar la librería y borrar la “WProgram.h” (y si fuera el caso, donde la encuentro) o el sketch contiene algún error que no se ver.

He probado con otros sketch que se seguro que funcionan y el resultado es correcto, funcionan y los verifica correctamente, por lo que deduzco que se trata o bien de un error en el sketch, o bien de la santa librería.

Ya no se por donde navegar.

Alguien puede echarme un cable?

Gracias por la ayuda.

Salu2

Las versiones antiguas del ide usan WProgram.h y las nuevas Arduino.h,cambia :
#include <WProgram.h> por #include <Arduino.h> ,no tienes que añadir ni borrar nada ,esa libreria viene con el IDE.

Ni siquiera sigas con ese ejemplo. Busca la libreria IRemote en el foro arduino.

Esta es de 2015. Librería IRremote

Tiene demos para que pruebes.

Supongo que tendras un IDE actualizado.

Gracias Jose, así lo he hecho y parece que funciona algo mejor.

Gracias, Surbyte. Sí, el IDE está actualizado, es el último. Ya he descargado el IRremote y he cargado la librería en el IDE. Sigue dando error de compilación, pero al menos, ahora, da pistas.

Adjunto una imagen de los errores. ¿Podrías indicarme cómo debo corregir estos errores? Por ejemplo en la primera línea dice:

Control_IR_curro.ino:13:19: error: expected ‘)’ before ‘;’ token

“Control_IR_curro.ino” és el nombre del archivo.

“:13:19” ¿A qué se refiere? ¿Al número de línea? ¿A qué?

"error: expected ‘)’ before ‘;’ token ¿Se esperaba (cerrar paréntesis) antes de (punto y coma)?

¿Indica o da alguna pista de donde hay que corregir, en que fila o comando?

Perdona, pero aun no entiendo a fondo este programa.

Gracias y salu2

Hola. Te viene a decir que en la línea 13 te falta un cierre de paréntesis. Si tienes más dudas, pega el código (entre etiquetas code, para que salga bonito en el foro) y te podemos decir más concretamente qué errores de sintaxis tienes. Saludos

Gracias, noter. Entonces entiendo que el número que sale después del nombre del archivo (13:19), se refiere al número de l'ínia, que ya imaginaba que fuera así, (entiendo el 13, pero ¿y el 19 a que se refiere?).

Vale, le he añadido un paréntesis cerrando (la línia 13 queda así: #define sensor 2);...), pero es que no veo donde lo abre ni por que hace falta ponerlo... de todas maneras, parece que este era uno de los problemas. Al pasarle de nuevo el "Verificador", ya solo me da un error que adjunto:

Opcions de compilat canviades, re-compilant tot
Control_IR_curro.ino:32:21: error: expected unqualified-id before ')' token
Error compilant.

Otro parentesis en la línia 32 sin saber donde va...

Gracias

Hola. Será más productivo si pones el código de tu sketch, y así podremos revisarlo mejor, porque como bien dices, no tiene sentido ese paréntesis sin apertura previa. El 13:19 se refiere a la línea y columna en las que salta el error, que no tiene por qué ser el lugar donde se comete el error.

De acuerdo, aquí va:

/*Codis per ordenar a Arduino que executi les ordres
Enviades pel comandament a distància.

(01 Control per infrarojos)
http://www.trastejant.es/circuitos/ArduinoIR.html

Març 2015*/

#include <Arduino.h>
		//Llamamos a librería del protocolo NEC
		#include <NECIRrcv.h>
		//Pin del sensor
		[color=red]#define sensor 2);[/color]
		
		//Indicamos el pin en el que tenemos conectado el Led				
		int led = 12;
		
		/*Ahora vamos a definir cada orden del mando a distancia 
                     con una variable para que nos sea más cómodo utilizarlas despues. 
                     Recuerda que cada modelo y/o marca de mando a distancia 
                     envia sus propios códigos,asi que tendrás que investigar cuales 
                     son los de tu mando antes de poder usarlo.
		
		En la sección de circuitos encontrarás todo lo necesario para hacerlo.*/
		
		//Código del botón que usaremos para encender. 
		long enciende =  0xEF10BF00;
		//Código del botón que usaremos para apagar.
		long apaga = 0XEE11BF00;
		
		//Creamos un objeto de la libreria NEC llamado ir para poder usarla.
		NECIRrcv ir(sensor);		
		void setup(){
		
			//iniciamos la recepcion
			ir.begin();
			
			//indicamos que el pin del led es una salida
			pinMode(led,OUTPUT);
		}
		
		void loop(){
			//Almacenaremos la orden del mando en una variable llamada orden
			unsigned long orden; 
			
			//mientras la conexion de infrarrojos este disponible...
			while (ir.available()) {
			//..Comprobaremos si es la que estamos esperando
				if(orden == enciende){
				
					//si lo es, encendemos
					digitalWrite(led,HIGH);
					
				}else if(orden == apaga){
				
					//Si la orden es apagar, apagamos
					digitalWrite(led,LOW);
				
				}
			}
		}

La línia 13, resaltada en rojo, es donde poniendo el “)” deja de marcar error… Bueno, no sale el color, pero es esta: #define sensor 2);.

Gracias, Noter…

¡Visto!

A mí me compila con esta librería, quitando (no es necesario)
#include <arduino.h>
Además te sobra el paréntesis de cierre que habías puesto al final del define, y el punto y coma al final del define.

Osea así:

/*Codis per ordenar a Arduino que executi les ordres
Enviades pel comandament a distància.

(01 Control per infrarojos)
http://www.trastejant.es/circuitos/ArduinoIR.html

Març 2015*/

#include <Arduino.h>
		//Llamamos a librería del protocolo NEC
		#include <NECIRrcv.h>
		//Pin del sensor
		#define sensor 2
		
		//Indicamos el pin en el que tenemos conectado el Led				
		int led = 12;
		
		/*Ahora vamos a definir cada orden del mando a distancia 
                     con una variable para que nos sea más cómodo utilizarlas despues. 
                     Recuerda que cada modelo y/o marca de mando a distancia 
                     envia sus propios códigos,asi que tendrás que investigar cuales 
                     son los de tu mando antes de poder usarlo.
		
		En la sección de circuitos encontrarás todo lo necesario para hacerlo.*/
		
		//Código del botón que usaremos para encender. 
		long enciende =  0xEF10BF00;
		//Código del botón que usaremos para apagar.
		long apaga = 0XEE11BF00;
		
		//Creamos un objeto de la libreria NEC llamado ir para poder usarla.
		NECIRrcv ir(sensor);		
		void setup(){
		
			//iniciamos la recepcion
			ir.begin();
			
			//indicamos que el pin del led es una salida
			pinMode(led,OUTPUT);
		}
		
		void loop(){
			//Almacenaremos la orden del mando en una variable llamada orden
			unsigned long orden; 
			
			//mientras la conexion de infrarrojos este disponible...
			while (ir.available()) {
			//..Comprobaremos si es la que estamos esperando
				if(orden == enciende){
				
					//si lo es, encendemos
					digitalWrite(led,HIGH);
					
				}else if(orden == apaga){
				
					//Si la orden es apagar, apagamos
					digitalWrite(led,LOW);
				
				}
			}
		}

Vale, perfecto. Me he limitado a quitar el paréntesis ese que no se a que venía, y también el punto y coma, y ahora compila perfectamente.

Con permiso voy a intentar resumir que pasaba:

1.- Siguiendo a Surbyte, cambié la librería IRremote que tenía, por la que él recomendó ( Está el enlace arriba), y

2.- Siguiendo a Jose, cambié en el sketch, el #include <WProgram.h> por #include <Arduino.h>

La cosa empezó a funcionar

3.- I por último, siguiendo a Noter, eliminé un punto y coma que no debería estar donde estaba

Y, sobre todo, he entendido un poco más el IDE de Arduino. Espero poder empezar a solucionar solito los problemas… Espero…

Muchísimas gracias a Jose, Surbyte y Noter por la ayuda y la paciencia.

Seguimos en contacto.

Salu2 cordiales