Aquí nos encontramos con una nueva entrega sobre Arduino. Hasta ahora, hemos estado explorando conceptos básicos, ya que las entradas anteriores eran, en esencia, introducciones centradas en la teoría. Por ello, en esta ocasión, vamos a sumergirnos en un proyecto práctico. Aunque se trata de un proyecto muy básico, es un excelente punto de partida para familiarizarse con la estructura fundamental de cualquier proyecto de Arduino. Hoy, nuestro foco será aprender cómo hacer parpadear un LED de manera intermitente e infinita. En este primer proyecto, la intención es que te familiarices con los entornos de trabajo y su estructura básica, por lo que he decidido utilizar el LED que viene incorporado en la propia placa de Arduino. ¿La razón? Para utilizar un LED externo (lo cual aprenderemos en las siguientes entradas), necesitaría introducirte a conceptos que, aunque más adelante verás como muy básicos, al principio podrían representar una avalancha de información difícil de digerir, llevándote a un posible bloqueo. Así que, para evitar que este proceso se perciba como algo complejo y frustrante, y en cambio, lo veas como una experiencia divertida, he optado por comenzar con el LED incorporado.
Descubriendo el LED Incorporado y el Pin 13
Como mencioné anteriormente, la placa de Arduino viene con un LED incorporado por defecto. Este LED está conectado al pin 13, y representa una excelente manera de introducirte al aspecto del software con Arduino, ya que te permitirá entender de manera muy sencilla cómo interactúa el código que vas escribiendo con el microcontrolador (la placa). Pero primero, permíteme explicarte qué es un LED. Un LED es, de hecho, un diodo emisor de luz. Resalto "diodo emisor de luz" porque existe una gran variedad de diodos diferentes, cada uno utilizado para objetivos completamente distintos. En lo que respecta al uso del LED, en la actualidad, dudo que no estés consciente de algunos de sus usos más comunes, como en señalización de tránsito, carteles publicitarios, iluminación automotriz, indicadores en dispositivos electrónicos (para mostrar visualmente si el dispositivo está encendido o apagado, por ejemplo), y pantallas de televisores y monitores, entre otros.

Configurando Nuestro Entorno de Desarrollo
La verdad es que estoy emocionado porque ha llegado un momento muy esperado para mí: escribir código. Antes de simplemente lanzarnos a explicar cómo empezar a desarrollar el código, primero necesito comentarte sobre el entorno de desarrollo que vamos a utilizar. Perfectamente podríamos usar el Arduino IDE, del cual hicimos una introducción detallada en entradas anteriores, pero, por cuestiones de simplicidad y en caso de que aún no tengas una placa Arduino en tus manos, vamos a desarrollar el código en la plataforma de Tinkercad. Si no has creado una cuenta aún, ese será el primer paso. No entraré en detalles sobre cómo hacerlo, ya que eso lo cubrimos en la segunda entrada, así que te dejo el enlace aquí: Crear una cuenta en Tinkercad, para que puedas seguir los pasos de manera sencilla.
Empezando con el Código: Nuestro Primer Guiño a Arduino
Una vez creada la cuenta, simplemente necesitas ir al botón que dice 'Crear', y al desplegarse el menú, elegir 'Circuito'. Al abrirse la página para crear el nuevo circuito, primero debes arrastrar y soltar la placa Arduino al lienzo. Luego, haz clic en el botón 'Código', y al desplegarse el menú, selecciona el botón 'Bloques', y luego elige la opción 'Texto'. Todo lo que vamos a aprender a hacer será directamente con el código.
Automáticamente, verás el código que viene preinstalado por defecto en el microcontrolador, pero no te detendrás a revisarlo; simplemente selecciona todo y elimínalo. Como mencioné en la entrada anterior, este código predeterminado hace parpadear un LED en intervalos de manera infinita, lo cual utilizaremos como punto de partida para introducirnos en el software. Para simplificar la explicación que acabo de darte, a continuación te dejo una imagen de la interfaz de Tinkercad, donde podrás identificar más claramente los botones que mencioné anteriormente.

Del Concepto a la Codificación: Entendiendo las Funciones en Arduino
Ahora comencemos a hablar sobre una de las partes más emocionantes para mí de Arduino, que es el código. Lo primero que necesito explicarte en este punto es qué es una función. Y desviándonos un poquito del mundo virtual e yéndonos al mundo físico, podríamos comparar una función con una máquina en una fábrica. En esta máquina, lo que vamos a procesar, en vez de materiales, son líneas de código. Esta máquina(función) puede contener entre una y, en teoría, infinitas líneas de código. Digo en teoría ya que por cuestiones de legibilidad nunca van a ser tan extensas. Además, dicha máquina puede recibir ciertos insumos (que en programación llamamos argumentos o parámetros) y proporcionar un resultado (o salida) después de procesar estos insumos. Es importante mencionar que existen dos categorías de funciones: las que nosotros vamos a definir (o crear) y las que ya están predefinidas. Las funciones predefinidas ya tienen una funcionalidad específica asignada y vienen incorporadas en el entorno de Arduino o en las bibliotecas que podemos agregar a nuestros proyectos.
Las Dos Funciones Esenciales de Arduino
Ahora ya que sabes qué es una función, quiero comentarte sobre la estructura básica de cualquier proyecto de Arduino. Pues su estructura está constituida por dos funciones principales. La primera es la función setup() y la segunda es loop(). Ahora, no quiero simplemente mencionar nombres sino que darte a entender el funcionamiento de cada una y así incluso podrás encontrarle el sentido a sus nombres.
Configurando Nuestro Entorno: La Importancia de setup()
La función setup() se ejecuta solo una vez en cuanto se provee de energía a la placa Arduino. En esta función vamos a definir, por ejemplo, los pines que vamos a utilizar en nuestro proyecto y cómo queremos utilizarlos. Aclarando más aún el ejemplo, podrías definir ciertos pines como INPUT que son los que reciben información ya sea a través de sensores o botones, solo por poner un ejemplo. También en setup() es un buen lugar para iniciar comunicaciones, como la comunicación en serie, que es esencial para depurar programas de Arduino.
El Ciclo Infinito: Explorando la Función loop()
Ahora expliquemos la función loop(). Pues como su nombre lo indica, esta función se va a ejecutar una y otra vez de manera infinita mientras la placa tenga una fuente de alimentación. En esta función es donde se va a escribir el código que define lo que queremos que haga nuestro programa. En este caso en particular que vamos a estudiar a continuación, ahí escribiremos el código que va a hacer parpadear un led.
Un Detalle Técnico Importante: Retorno de Funciones
Aunque ya tienes una noción básica de lo que es una función y conoces la estructura fundamental de cualquier proyecto Arduino, no puedo avanzar sin explicarte algo más que es sumamente importante. Cuando declaramos una función o hacemos uso de una que ya está predefinida, como es el caso de setup() y loop(), además de mencionar su nombre para utilizarlas o, en caso de que las estemos creando desde cero para definirlas, necesitamos indicar antes del nombre de la función el tipo de datos que va a devolver dicha función. En estos dos casos específicos, dado que ambas funciones principales no devuelven ningún valor, se utiliza la palabra clave void. Esta palabra clave indica que la función no devuelve nada, y es necesario especificarlo así porque el lenguaje en el que está basado Arduino, que es C++, lo requiere. Quiero destacar que esto es solo un pequeño vistazo para aclarar cualquier duda sobre lo que veremos hoy, pero profundizaremos en este tema en entradas futuras. Así que, sin más preámbulos, llegó el momento de hacer lo que hemos venido a hacer... ¡Escribir código!
Declarando las Funciones Principales: setup() y loop()
Como mencionamos anteriormente, todo proyecto de Arduino se compone de dos funciones principales. Así que lo primero que vamos a hacer es declarar estas funciones esenciales. Comenzaremos con la función setup(), que es la primera que se ejecuta. Basándonos en lo que discutimos previamente, primero colocamos la palabra clave void, seguido del nombre de la función, en este caso setup(), acompañado de los paréntesis —es crucial no olvidarlos—, y finalmente, abrimos y cerramos las llaves, quedando de la siguiente manera: void setup() {}. Dentro de estas llaves es donde comenzamos a escribir nuestras líneas de código que definirán lo que deseamos ejecutar dentro de esa función. Para la función loop() el procedimiento es exactamente el mismo, por lo que no considero necesario repetir la explicación para evitar redundancia. Sin embargo, a continuación te dejo un fragmento de código para que puedas visualizar con mayor claridad cómo va estructurado el código hasta este punto.
Utilizando pinMode() para Configurar Pines
El siguiente paso, una vez declaradas las funciones principales, es dirigirse a la función setup para especificar los pines que vamos a utilizar, definiéndolos como INPUT (entrada) o OUTPUT (salida) según su finalidad en nuestro proyecto. Como mencionamos anteriormente, el pin 13 está asociado al LED integrado en la placa Arduino, y es precisamente este pin el que vamos a designar como OUTPUT. Ahora bien, ¿cómo se realiza esto? Contamos con la función pinMode() para tal propósito. Esta función acepta dos argumentos dentro de sus paréntesis: el número del pin y el modo del pin (ya sea INPUT o OUTPUT). Si no estás familiarizado con el término "argumento", se refiere a la información que proporcionamos a una función para que pueda ejecutar su tarea designada. En este caso, la tarea de pinMode() es establecer el modo del pin 13 como salida. Por lo tanto, le pasamos el número del pin, que es 13, y luego, separado por una coma, indicamos si será un pin de salida (OUTPUT) o de entrada (INPUT). En este caso, es OUTPUT. Así, esa línea de código se verá así: pinMode(13, OUTPUT);. Es crucial incluir el punto y coma final (;), de lo contrario, se producirá un error. Ahora quiero hacer una pequeña pausa para sugerirte que vayas escribiendo el código en Tinkercad junto conmigo; de esta manera, te será más sencillo familiarizarte con los conceptos. A continuación, te presento el código completo hasta este punto para clarificar totalmente este proceso.
Alimentando el LED: Uso de digitalWrite()
Una vez que hemos declarado el pin a utilizar y su modo (en este caso, OUTPUT), pasamos a la función loop(), donde haremos parpadear el LED de manera continua. Como se mencionó antes, un pin digital solo tiene dos estados: HIGH (encendido) o LOW (apagado). Por defecto, el pin está en estado LOW, así que el primer paso es cambiarlo a HIGH. Aquí es donde la función digitalWrite() entra en acción. Esta función acepta dos argumentos: el pin (13) y el estado deseado, en este caso, HIGH. La línea quedaría así: digitalWrite(13, HIGH);. Abajo encontrarás el código completo hasta ahora y, si lo copias y pegas en el editor de Tinkercad, verás que el LED simplemente permanece encendido. En caso de que aún no sepas cómo iniciar la simulación en Tinkercad, debajo del código te dejaré una imagen señalando el botón que debes presionar para comenzar dicha simulación. Necesitamos que se encienda, luego se apague tras un intervalo, y dado que la función loop() se ejecuta infinitamente, el LED parpadeará sin cesar. En la siguiente sección, te explicaré cómo utilizar la función delay().

Completando el Ciclo: Apagar el LED y Usar la Función delay()
Una vez que se ha encendido el LED, para completar el ciclo del parpadeo, necesitamos apagarlo. El procedimiento para apagar el LED es bastante similar al de encendido, utilizando la función digitalWrite(), pero en esta ocasión, cambiaremos el estado del pin 13 a LOW. Así la línea quedaría: digitalWrite(13, LOW);. Sin embargo, la función loop() se ejecuta con tal rapidez que nuestros ojos no podrían captar estos cambios; básicamente, todo sucede en milésimas de segundo. Aquí es donde la función delay() se vuelve crucial. La función delay() pausa la ejecución del programa por la cantidad de milisegundos especificada. Para lograr una pausa de 1 segundo, le pasaríamos el número 1000 como argumento, quedando así: delay(1000);. Entonces, tendríamos que colocar esta línea de código entre la línea que cambia el estado del pin a HIGH y la que lo cambia a LOW. Además, deberíamos agregar la misma línea después de cambiar el estado del pin a LOW; de lo contrario, la función loop() se ejecutaría tan rápidamente que parecería que el LED está constantemente encendido. Abajo encontrarás el código completo para que puedas revisarlo, y si lo deseas, copiarlo y pegarlo en el editor de Tinkercad.
Observando la Magia del Código: ¡El LED Parpadea!
Si copiaste el código en el editor de Tinkercad, podrás observar que, efectivamente, el LED incorporado en la placa parpadea de manera infinita. Como mencioné anteriormente, este código es el que viene por defecto en el microcontrolador cuando es nuevo, pero es una excelente manera de sembrar las bases del desarrollo con Arduino. En la siguiente entrada del blog, haremos algo mucho más cool: en vez de solo encender el LED que viene por defecto, vamos a aprender cómo utilizar un LED externo. Lo mejor de todo es que comenzaremos a adentrarnos en términos no necesariamente complejos, pero sí más profundos de la electrónica. Estaremos explorando la Ley de Ohm y cómo es esencial conocerla para poder conectar un LED externo a la placa.
Repasando lo Aprendido
En esta entrada, dimos nuestros primeros pasos en el mundo de Arduino, descubriendo sus funciones básicas y cómo hacer parpadear un LED. A continuación, un resumen de los puntos clave para tener una revisión rápida y concisa.
🚀 Resumen Rápido: Iniciando con Arduino
- Conociendo el LED Incorporado y el Pin 13: Introducción al LED integrado en la placa Arduino y su conexión con el pin 13.
- Configurando el Entorno de Desarrollo en Tinkercad: Preparando el entorno virtual para empezar a codificar.
- Declaración de Funciones Principales: Comprendiendo y declarando las funciones setup() y loop().
- Uso de pinMode() para Configurar Pines: Definiendo el modo de los pines como INPUT o OUTPUT.
- Haciendo Parpadear el LED con digitalWrite(): Utilización de la función digitalWrite() para cambiar el estado del pin.
- Utilización de la Función delay(): Introducción a la función delay() para controlar el tiempo entre cambios de estado.
- Observando la Magia del Código: Verificación del funcionamiento del código en Tinkercad, observando el parpadeo del LED.
¡Hasta la próxima, Código-Lover!
Y hasta aquí llegamos con esta entrada. Espero de corazón que estés tan emocionado como yo de poder dar los primeros pasos en el mundo de la electrónica con Arduino. La verdad es que Arduino es mucho más que una placa y unos cuantos LEDs. En una de las primeras entradas lo definí como un vasto cosmos y ese es el único modo en que puedo referirme a él. Poco a poco iremos adentrándonos en su universo y verás que con cada paso que des te vas a ir enamorando un poquito más de esta fascinante área de la tecnología. Oye, eso sí, recuerda que puedes dejarme un mensaje cuando quieras en este enlace a la pestaña contacto. Es fundamental para mí saber qué crees de las entradas y si de veras te están aportando valor en tu camino. Así que corre y déjame un mensaje, yo estaré más que emocionado de responderte. ¡Nos leemos en la siguiente!
¡Un Abrazo! Braulio de AprendeCode.