
Iniciando a programar con Arduino (Estructura, Entradas/Salidas)
Descripción:
En la programación y creación de proyectos con Arduino se manejan algunos conceptos fundamentales, en esta práctica veremos los más básicos, los ejercicios se pueden realizar en un Arduino UNO o cualquier simulador como TinkerCAD o Proteus.
Aquí se ven los conceptos básicos de la programación en Arduino, si necesitas aprender a usar Arduino IDE, TinkerCAD o Proteus, revísalo en otro artículo o práctica.
Contenido/Competencias:
- Programa aplicaciones para sistemas automatizados.
- CE9 Diseña modelos o prototipos para resolver problemas, satisfacer necesidades o
demostrar principios científicos - CG6.1 Elige las fuentes de información más relevantes para un propósito específico y
discrimina entre ellas de acuerdo a su relevancia y confiabilidad - OM1 Actualizarse respecto a las mejores prácticas en su especialidad o área de
trabajo
El Plan:
Para iniciar programando con Arduino, se necesitan entender varios conceptos, los más importantes son:
- La estructura de un programa para Arduino
- Funciones principales
- Manejo de entradas y salidas
- Manejo de Variables
Hardware:
| Descripción | Cantidad | Notas |
|---|---|---|
| Arduino UNO | 1 | Compatible |
| Resistencia | 1 | 330 Ohms |
| Boton de presion | 1 | |
| LED | 1 | Cualquier color |
| Cables | Varios |
Software:
- Arduino IDE o Editor de preferencia
- Arduino UNO o Simulador (Proteus VSM, TinkerCAD)
Recursos:
- http://www.tinkercad.com
- Archivo Proteus
Diagrama:

Desarrollo Teórico
Estructura de un programa Arduino
Vamos viendo la estructura principal de un programa de Arduino.
Principalmente como mínimo se requieren dos funciones en las que vamos a trabajar setup() y Loop(). Sabemos que son funciones por tres indicadores (funciones se cubre más a detalle en otra practica):
-
inician con
void: son funciones que no regresan valor -
después del nombre de la función se usan parámetros entre paréntesis
()en este caso no hay -
marcan inicio
{y fin de bloque}, todo lo que encierren estas llaves es el contenido de la función.
void setup()
{
// Contenido setup
}
void loop()
{
// Contenido loop
}
El contenido de la función setup contiene las inicializaciones de variables, puertos y funciones, solo se ejecuta una vez el contenido cuando inicia el Arduino, es decir se prende Arduino luego se ejecuta el contenido de setup y continua a loop.
El contenido de la función loop se va a ejecutar después de la función setup y se repite una vez que termine, es decir se crea un ciclo infinito de todo el bloque loop. También se pueden inicializar variables y funciones, pero solo se hace esto cuando se requiera hacerlo, si solo se necesita hacer una vez al inicio, se inicializan en setup.
Variables
Un concepto de programación que debemos entender es el de variable, que para nosotros va a ser un nombre que le ponemos a cualquier dato que pueda o no cambiar durante nuestro programa, nos facilita saber con qué estamos trabajando.
Por ejemplo, si nosotros ya sabemos que un led rojo esta conectado en el puerto 13, podemos hacer una referencia a esto dándole un nombre (Sin espacios) y asignarle el valor que queremos dándole un formato como este:
<tipo de dato> <nombre> = <valor>
Los tipos de datos pueden ser varios, por lo pronto solo usaremos números enteros (int). Entonces quedaría:
int Led_rojo=13;
Con esto cuando hagamos una referencia a Led_rojo sabremos que es un 13.
Y podemos cambiarlo cuando necesitemos con una simple asignación, recuerda el ; al final.
Led_rojo=2;
Por lo pronto solo usaremos variables globales, así que estas las puedes inicializar antes de la función setup; conforme avanzas en tu programación, usaras variables locales.
int Led_rojo=13;
void setup()
{
}
void loop()
{
}
Funciones
Para este ejercicio vamos a utilizar funciones básicas.
- pinMode
- digitalWrite
- digitalRead
- delay
Al terminar una linea no se te olvide poner ;, es necesario.
pinMode()
La función pinMode es la responsable de configurar el puerto del Arduino como lo necesitamos, tiene un formato:
pinMode(<numero de pin>, <modo de pin>);
en numero de pin se refiere al numero de puerto del Arduino por ejemplo el puerto 2 es solamente un numero 2, si es un puerto análogo se toma el nombre del puerto AD0, AD1, etc.
En el tipo de Puerto tenemos 3 valores
- OUTPUT donde el puerto se activa como salida digital (0v y 5v)
- INPUT el puerto se activa como una entrada digital (0v es 0 y 5v es 1)
- INPUT_PULLUP se activa una resistencia PULLUP interna para utilizar una configuración mas sencilla en el botón pero la lógica cambia.
Si utilizas INPUT para que cuando se presione el botón sea un 1 (5v) se requiere este diagrama:

Si utilizas INPUT_PULLUP para que cuando se presione el botón sea un 1 (5v) se requiere este diagrama:

digitalWrite()
Si témenos algún puerto configurado de salida digital, podemos escribir sobre él, la función se escribe así:
digitalWrite(<numero de puerto>, <estado>);
igual que en otras funciones el numero de puerto es nuestro puerto destino y el estado acepta HIGH que enciende a 5v o un LOW que apaga a 0v. de igual forma se toman 1 y 0.
Si se necesita encender el led del puerto 13, se vería asi:
digitalWrite(13,HIGH);
y cuando se requiera apagar:
digitalWrite(13,LOW);
digitalRead()
Cuando es necesario leer un botón se configura un puerto con INPUT o INPUT_PULLUP, esto se configura dependiendo de como configures el botón. Pero en cualquiera de los casos la entrada solo puede ser 0v o 5v, dependiendo como conectaste el botón. En cualquier caso la entrada la lectura se realiza con:
<variable> = digitalRead(<puerto>);
Para poder usar el resultado es necesario depositarlo en una variable para usarla después.
Si queremos leer el botón 2 hacemos esto:
int botón;
botón= digitalRead(2);
Primero declaramos una variable llamada botón, no es necesario ponerle un valor, tampoco sobra ponerle algo.
Después leemos el valor del puerto 2 y el resultado se deposita en la variable botón.
delay()
La función más sencilla y útil es la de delay(), esta función lleva un solo parámetro, el tiempo en que se va a esperar sin hacer nada, el tiempo está en milisegundo.
delay(<milisegundos>);
en el ejemplo de intermitencia, el programa encendía un led, después esperaba un tiempo con un delay() y luego lo apagaba.
Desarrollo Practico
Una vez armado el circuito del diagrama podremos iniciar, en tinkercad quedaría algo así:

Ya tenemos lo suficiente para ver algo de programación, tendremos varias mini practicas para ver como funcionan juntas estas funciones.
- Led Intermitente
- Led controlado por Boton
Led Intermitente
El led intermitente solo usaremos el led conectado en el puerto 13, para mayo facilidad usaremos una variable para identificar el puerto 13
int led_rojo=13;
Luego necesitamos indicar que el puerto es una salida digital, esto se configura dentro de setup().
pinMode(led_rojo,OUTPUT);
esto solo se realiza una vez, cuando el Arduino inicia, por ello corresponde a setup().
Como el encendido y apagado esta en un ciclo sin terminar, va dentro de loop().
Para encender y que permanezca encendido por 1 segundo el código es:
digitalWrite(led_rojo,HIGH);
delay(1000);
el procedimiento para apagar y mantener apagado es similar:
digitalWrite(led_rojo,LOW);
delay(1000);
al encontrase todo en el bloque de loop() se repite una vez que termina esa secuencia.
El código completo queda así:
int led_rojo=13;
void setup()
{
pinMode(led_rojo, OUTPUT);
}
void loop()
{
digitalWrite(led_rojo,HIGH);
delay(1000);
digitalWrite(led_rojo,LOW);
delay(1000);
}
Led controlado por Boton
Para este ejercicio usaremos el circuito completo, utilizaremos la entrada del botón para ponerla en el LED.
Como en el ejercicio anterior se declaran las variables para facilitar la lectura del código y hacerlo mas amigable en el futuro.
int led_rojo=13;
int boton=2;
La configuración de los puertos es sencilla, puerto 13(led_rojo) como salida y puerto 2 (boton) como entrada con pullup interno (Presionado es 0 y sin presionar es 1).
pinMode(led_rojo, OUTPUT);
pinMode(boton,INPUT_PULLUP);
En el ciclo loop() hacemos el trabajo de leer el puerto del botón y desplegarlo en el puerto del led.
int estado;
estado=digitalRead(boton);
digitalWrite(led_rojo,estado);
El código completo queda así:
int led_rojo=13;
int boton=2;
void setup()
{
pinMode(led_rojo, OUTPUT);
pinMode(boton,INPUT_PULLUP);
}
void loop()
{
int estado;
estado=digitalRead(boton);
digitalWrite(led_rojo,estado);
}
Juega con el codigo
Es importante que juegues con el código y las funciones que trabajamos para que maximices tu entendimiento de como y que hacen estas funciones. Intenta lo siguiente
En led intermitente:
- Cambia
HIGHpor 1, yLOWpor 0. - juega con los valores del
delay(). - cambia el valor fijo del tiempo por una variable en los dos
delay(). - elimina el ultimo
delay().
En el Led controlado por Botón:
- Cambia las variables por su valor,
led_rojopor el 13, ybotónpor un 2. - Cambia la configuración física del interruptor agregando la resistencia a 5v y usando
INPUT.
Conclusiones:
Es importante que aprendamos la estructura básica de un programa de Arduino, cada sección tiene su forma de trabajar lo cual podemos aprovechar para optimizar nuestro código y que nuestros proyectos hagan lo que tengan que hacer de la mejor manera.
En este ejercicio se vieron funciones sencillas que se utilizan prácticamente en todo programa para Arduino, por ello es importante que juegues con estas funciones, el entenderlas mejor te da las armas para ser creativo y saber cuándo utilizarlas.
Ten cuidado con terminar cada instrucción con un ;, el compilador lo necesita para saber cuándo terminaste una instrucción completa, cualquier plataforma te ayudara a detectarlos, pero es buena costumbre agregarlos desde un principio.