Los errores de compilación en las placas Arduino ocurren en el momento en que el IDE comprueba el sketch. Si el código está bien y el compilador no encuentra ningún error nos mostrará un mensaje de que finalizó satisfactoriamente . Por el contrario, si el código fuente del programa está mal escrito o si el compilador no encuentra los archivos de alguna biblioteca, variables o alguna función o método especificado el IDE nos mostrará un mensaje con la descripción del error.
La gran mayoría de las veces los errores de compilación en Arduino están relacionados con un descuido del programador, como el olvido de un punto y coma o algún paréntesis sin cerrar. Lo que es seguro es que cualquier error que muestre el compilador tiene solución y puede ser encontrado y corregido. Veamos cuáles pueden ser estos errores y cómo se solucionan.
Errores de sintaxis
Uno de los errores de compilación más comunes en cualquier lenguaje de programación se da al no usar la sintaxis correcta. Como regla general, estos errores son fácilmente encontrados y corregidos, ya que el Arduino IDE te dará una pista, mostrándote el número de la línea del código donde se encontró el problema.
Pero en ocasiones deberás analizar todo un bloque, analizando las líneas que puedan tener el error. Por ejemplo, si tienes varios condicionales anidados y omitiste cerrar alguno con un corchete, el compilador te mostrará como si el error estuviese en el último corchete, pero puede que esté antes. Si el código tiene muchas líneas esto la revisión puede complicarse, deberás ser cuidadoso y mirar línea por línea.
Lo principal es no entrar en pánico y recordar que este tipo de errores son muy habituales, y que la búsqueda y resolución de problemas es una de las tareas a las que más tiempo dedican los programadores.
Vamos a enumerar las variantes más comunes de los errores de compilación de Arduino/Genuino:
- Error «a function-definition is not allowed here before ‘{‘ token».
Este error significa que olvidamos cerrar algún bloque de código. Comprueba todas las funciones y los bloques de código internos. Para cada paréntesis o corchete de apertura también debes tener un paréntesis o corchete de cierre. El IDE de Arduino te ayudará a resolverlo – haz clic en el signo de apertura «{» y el programa resaltará el bloque que se está cerrando. - Error «expected initializer before ‘}’ token».
El error se produce en el caso contrario: cuando se olvida abrir o se borra accidentalmente el corchete de apertura. Muchas veces este error ocurre si tenemos varios corchetes de cierre juntos, por lo que es más dificil darse cuenta a simple vista si hay alguno de más. En cualquier caso, debemos revisar cuidadosamente el código y poner los corchetes en orden. - Error «‘lo que sea’ was not declared in this scope».
Significa que Arduino ha detectado palabras en el código que no son palabras reservadas y no están declaradas como variables. Normalmente se produce este error si olvidamos declarar variables o métodos. También es posible que accidentalmente hayamos escrito caracteres extra o borrado alguna marca de comentario. - Error «undefined reference to loop» y «undefined reference to setup».
Estos errores aparecen si borramos o renombramose la función loop o la función setup. Arduino no podrá ejecutar el sketch si no declaramos estas funciones.
Errores de compilación para el microcontrolador Arduino
En el IDE de Arduino podemos escribir código para ser ejecutado en diferentes modelos de microcontroladores. Muy a menudo esto genera errores cuando cambiamos de microcontrolador o no seleccionamos correctamente el microcontrolador con el que queremos trabajar.
Por defecto, el IDE Arduino trae seleccionada en el menú la placa Arduino/Genuino, por lo que si queremos montar nuestro proyecto con una placa Arduino Nano o con otra que no sea Arduino UNO será necesario seleccionar esta placa para que no de error.
Esto ocurre porque cuando se compila para una plataforma en particular, Arduino carga los módulos y librerías necesarias para esa placa. Como algunas librerías son diferentes para cada plataforma, es muy posible que en el código que hemos escrito haya referencias a variables y métodos que simplemente no existen en la configuración elegida.
Errores «exit status 1» al compilar para placas Uno, Mega y Nano
El mensaje «exit status 1» que aparece en la mayoría de los errores de compilación del Arduino significa que el proceso de compilación ha fallado. Puede haber muchas razones para esto, como regla general, todas se arreglan rápidamente, por lo que no hay nada de preocupante en este error. Pero hay situaciones en las que el error es causado por problemas internos del compilador. Por ejemplo, cuando se trabaja en un sistema operativo de 64x-bits o cuando se cambia la versión o las bibliotecas del IDE.
Errores en las bibliotecas
Muchos errores de compilación para Arduino pueden ser causados por bibliotecas mal conectadas o errores dentro de las propias bibliotecas. Consideremos sólo algunos de ellos:
- Error «fatal error: … No such file or directory».
Esto ocurre si conectamos una biblioteca que no hemos instalado previamente en la carpeta de bibliotecas. Arduino simplemente no puede encontrar el archivo de declaración especificado y te informa del error. - Mensaje de error en uno de los archivos conectados. Indica que ha descargado una biblioteca mal escrita o que está intentando conectar bibliotecas incompatibles. Póngase en contacto con el desarrollador de la biblioteca en el foro o compruebe de nuevo la corrección de la estructura de su aplicación.
- El error «redefinition of void setup» aparece si por alguna razón tenemos declaradas las mismas funciones en el sketch y en alguna librería. Se soluciona muy facilmente renombrando las funciones con nombre duplicado ya sea en el sketch o en la biblioteca.
Errores del compilador de Arduino
Este tipo de errores son los más complicados, y están relacionados con un comportamiento inestable del propio compilador. En este caso, no hay una única receta para solucionarlos. En algunos casos lo solucionaremos actualizando a la ultima versión del compilador, en otros, por el contrario, volviendo a alguna versión anterior en la que las librerías que deseamos utilizar funcionen correctamente.