Como dice en su propia site, Arduino es una plataforma basada en microcontroladores Atmel, abierta para crear prototipos electrónicos de una manera sencilla y está pensada no sólo para ingenieros, sino para artistas, aficionados, etc.

Ciertamente, estos pequeños equipos son muy sencillos de programar y utilizar sin grandes conocimientos ni de programación ni de electrónica y podemos aplicarlos en una infinidad de aplicaciones útiles.

Todo esto está muy bien, sin embargo, para alguien que pretenda realizar un proyecto serio basado en microcontroladores  se encontrará con las siguientes deficiencias:

  • El IDE o entorno integrado de desarrollo de Arduino es decepcionantemente primitivo. Es imposible crear un proyecto complejo con multitud de archivos, etc.
  • No hay forma de acceder, al menos de una manera clara, a los registros internos del micro y utilizar todo su potencial ni de lejos.

Además de lo anterior, alguien que pretenda iniciarse en el arte de programar microcontroladores se encontrará con que el susodicho lenguaje es tan pobre, primitivo y tan poco adecuado para la enseñanza que no aprenderá nada.

Sin embargo, también hay buenas noticias para aquellos que deseen abordar proyectos más serios, y es que es posible sustituir el entorno IDE de Arduino por un entorno de los medio buenos, como es Eclipse (y que además resulta gratuito para los amantes del software libre).

Otra buena noticia es que las bibliotecas de Arduino que nos permiten controlar el hardware de manera tan sencilla, están escritas en C y se encuentran disponibles dentro del IDE Arduino.

Tenemos dos posibilidades (se pueden usar ambas dentro de Eclipse) para integrar el funcionamiento de estos chismes en Eclipse:

Utilizar un plug-in de Arduino: Una vez instalado, nos permite desarrollar software como si estuviésemos dentro del IDE Arduino pero con una "pequeña" diferencia: Los programas que creemos estarán escritos en C o en C++, lo que nos da acceso directo a la potencia del lenguaje y también tenemos acceso (si importamos las bibliotecas) a las funciones de alto nivel que nos permiten acceder al control sencillo de hardware (serán llamadas a simples funciones C) sin tener que desarrollarlas nosotros mismos. Existen todo tipo de bibliotecas: para el control de puertos serie, control de LEDs, control de motores, etc. 

Con este esquema, el programa principal no es, como es habitual, el main.c o main.cpp, sino que es un archivo en C o C++ con el nombre del proyecto y en que existen predefinidas dos funciones: "setup()" que se encargará de iniciar todo lo iniciable y "loop()" que ejecutará el bucle sin fin propio de este tipo de cacharros. Por supuesto, podemos crear archivos en C o C++ que contengan nuestro propio código y enlazarlos al archivo principal.

Utilizar un plug-in AVR: Esta pieza de software está pensada para controlar directamente los microcontroladores de Atmel (que no sólo se emplean en plataformas Arduino). Ya que está diseñada en una capa inferior, no tiene ni idea del mapeado de los pines de micro con el conexionado externo de las plataformas Arduino y es algo que el propio diseñador ha de tener en cuenta. También es posible integrar las bibliotecas de Arduino aunque con algo más de trabajo.

En teoría también es posible integrar esta funcionalidad en el entorno de desarrollo por excelencia de Apple que es Xcode. Para que funcione es necesario instalar un compilador cruzado AVR (para OSX, evidentemente) y un template para proyectos Arduino. Yo he encontrado algunos por ahí, pero no he sido capaz de hacer que funcionen adecuadamente con Xcode 5.1, entre otras cosas porque en esta nueva versión, la estructura interna de los templates ha sido modificada por Apple y los antiguos no son integrables directamente. 

También existe un pequeño módulo software que se denomina "embedXcode" que según dice el fabricante funciona bien en Xcode 5.1 pero yo no he sido capaz ni de instalarlo porque genera un error en el proceso.

Aquí dejo un documento que he desarrollado en el que se explica paso a paso como realizar desarrollos para Arduino sobre Eclipse en las últimas versiones; espero que sea de utilidad: