Home Assistant Fácil

Curso de Home Assistant y domótica

  • Blog
  • Soy un pardillo
  • Podcast
  • Curso Arduino
  • Curso Domótica
  • Acceder
Usted está aquí: Inicio / Blog / Arduino / Estructura de un sketch en Arduino, introducción a la programación

Estructura de un sketch en Arduino, introducción a la programación

Comentarios(6)
Luis del Valle Hernández

En este artículo vamos a ver lo primero que te encontrarás cuando quieres crear una rutina, programa o sketch en el lenguaje nativo de Arduino. El código que cargamos en nuestra placa, generalmente lo llamamos sketch, y así lo nombraré a lo largo de este artículo. En este caso he plasmado un ejemplo que viene incorporado con el IDE oficial salvo ciertas modificaciones que me permiten poder explicarte la estructura de un sketch en Arduino. A grandes rasgos podemos encontrar 3 bloques bien diferenciados.

En la cabecera encontramos la importación y declaración de variables y constantes. En la función setup sirve para dar valores iniciales a las variables y establecer los modos de los pines (entrada o salida) y por último la función loop es el bucle que se ejecuta infinitamente y donde reside el grueso de nuestro código, la funcionalidad del sketch.

Vamos a verlo con un simple ejemplo, el código del blink modificado donde el objetivo es hacer parpadear un LED en el pin número 13. Aquí tienes el código.

/*
  Blink
  Enciende un LED por dos segundos y lo apaga por dos segundo, repetidamente

  Creado: Alfonso Contreras (acontreras@programarfacil.com)
  http://www.programarfacil.com
 */

//Incluir librerías necesarias
#include <libreria.h>

//Constantes
const int ledPin = 13;

//Variables globales
int numero = 5;

//Función para inicializar elementos
void setup() {
  // Inicializamos el pin digital 13 como salida
  pinMode(ledPin, OUTPUT);
}

//Función principal, se repite indefinidamentes
void loop() {
  //Variable local
  int dy;

  //Lógica del programa
  digitalWrite(ledPin, HIGH);   // Enciende el LED (HIGH: voltaje alto)
  delay(2000);              // Esperamos dos segundos
  digitalWrite(ledPin, LOW);    // Apaga el LEdD (LOW: voltaje bajo)

//Llamada a otra función
  dy = OtraFuncion();

  delay (dy); //Esperamos segundos depende de OtraFuncion
}

//Función que realiza otra tarea
int OtraFuncion()
{
   //Variable local
   int aux;
   //Código a realizar por esta función
   aux = random(1000,2000);

   return aux;
}

Lo primero que nos encontramos son comentarios. Tenemos de dos tipos: los que comienzan por // que comentan una línea y los que empiezan por /* y terminan */ que son multilinea, comentan todo lo que este entre esta marcas. Los comentarios son muy importantes ya que nos facilitan la lectura del código, nos explica lo que el programador se propone hacer o nos marcan una región del programa.

Tras los comentarios iniciales encontramos como incluir una librería con la siguiente sintaxis:

#include <libreria.h>

Como puedes ver, tenemos que poner la palabra clave include tras el símbolo # y el nombre de la librería siempre entre < >. Las librerías son archivos que añaden funcionalidad a nuestros programas. Pueden ser de terceros o puedes crearte tus propias librerías donde por ejemplo tengas funciones más comunes en tus programas . En este caso es una librería propia que no existe en el IDE y que por lo tanto si compilas te dará un error.

Antes de llegar a las funciones, en esa parte de nuestro sketch definiremos las constantes y/o variables globales que vayamos a utilizar:

//Constantes
const int ledPin = 13;

//Variables globales
int numero = 5;

En este ejemplo hemos creado una constante numérica llamada ledPin la cual va a tener siempre el valor 13 durante toda la ejecución del programa y va a ser accesible a cualquier función que exista en nuestro sketch. Tras esta tenemos la variable global numero, también numérica y con valor inicial 5. Esta variable también es accesible por cualquier función de nuestro programa, (aquí es donde se diferencia con las variables locales que son solo accesibles en la función que se definan), pero su valor lo puede modificar cualquier función del sketch, al contrario que las constantes.

Y llegamos a la primera función en todo sketch de Arduino: void setup. La palabra reservada void nos indica que esta función no devuelve nada y el nombre de la función setup también nos da una ligera idea para que sirve esta función, en esta función inicializaremos todos los componentes que vayamos a utilizar. Al igual que el resto de lineas comentadas anteriormente, esta función tan solo se ejecuta una vez al encender nuestra placa, o tras la reprogramación o tras pulsar el botón reset.

//Función para inicializar elementos
void setup() {
  // Inicializamos el pin digital 13 como salida
  pinMode(ledPin, OUTPUT);
}

Como veis para este caso, estamos diciéndole a nuestra placa de Arduino que el pin 13 (a través de la constante ledPin) este en modo salida mediante el método pinMode().

La siguiente rutina void loop(), es nuestro programa principal. Es un bucle que se ejecuta una y otra vez hasta que desconectemos la alimentación a nuestra placa. Aquí estará el alma de nuestro programa. Las primeras líneas las reservaremos para definir las variables locales que vamos a utilizar (solo accesibles en esta funcón) y tras ellas implementaremos la lógica del sketch.

//Función principal, se repite indefinidamentes
void loop() {
  //Variable local
  int dy;

  //Lógica del programa
  digitalWrite(ledPin, HIGH);   // Enciende el LED (HIGH: voltaje alto)
  delay(2000);              // Esperamos dos segundos
  digitalWrite(ledPin, LOW);    // Apaga el LEdD (LOW: voltaje bajo)

  //Llamada a otra función
  dy = OtraFuncion();

  delay (dy); //Esperamos segundos depende de OtraFuncion
}


En el caso que tenemos encendemos y apagamos el LED mediante el método digitalWrite() y con el método delay() hacemos una pausa de dos segundos (2seg son 2000ms).

En este skecth de ejemplo he añadido una función para que veáis cómo funciona la llamadas a otras funciones, se llama OtraFuncion(). Como ves esta función si que nos devuelve un valor, que asignamos a la variable local dy y le pasamos al método delay(dy) para hacer la segunda espera antes de volver a repetirse la función de bulce.

Las funciones que definamos en nuestro sketch no tienen obligatoriamente que devolvernos algo, pueden ser como las funciones principales de tipo void. Este tipo de funciones las podemos utilizar para realizar particularidades de nuestro programa y así tener un código más limpio y estructurado que siempre sera más fácil a la hora de depurar errores. Da igual si la declaras antes o después de las funciones setup y loop, o incluso en medio. Al ser un lenguaje compilado no afecta la situación donde la pongas y va a funcionar exactamente igual, aunque si por mero hecho de estructura limpia hay que ser ordenado.

//Función que realiza otra tarea
int OtraFuncion()
{
   //Variable local
   int aux;
   //Código a realizar por esta función
   aux = random(1000,2000);

   return aux;
}

En este caso nos devuelve un numero y por eso en la definición de la función lo marcamos con la palabra reservada int. En esta función tenemos una variable local llamada aux que mediante el método random le asignamos un valor aleatorio entre 1000 y 2000. Tras obtenerlo devolvemos el resultado mediante la palabra reservada return. Así en nuestro programa principal hará una espera de entre 1 segundo y 2 segundos.

Cualquier skecth de Arduino sigue esta estructura. Si he pasado algo por alto o te queda alguna duda, deja un comentario y lo vemos!

broadlink home assistant

Broadlink Home Assistant con HAIR: mandos por infrarrojos sin YAML

Llegas a casa con el emisor Broadlink Home Assistant nuevecito. Lo sacas de la caja con toda la ilusión del mundo para integrar el ventilador del … [+ info...]

NUKI SMART LOCK

Nuki Smart Lock Go, Pro o Ultra: cuál comprar y la prueba que lo decide todo

Mira chapapote, imagina la cara de tonto que se te queda cuando te gastas casi 350 pavos en una cerradura inteligente Nuki, llega a casa, la abres con … [+ info...]

slzb-06

SLZB-06U: migrar coordinador Zigbee desde Sonoff Dongle P (y por qué el Dongle E es diferente)

Vale, lo confieso: no hay nada que me dé más pereza en domótica que tener que migrar toda la red Zigbee. El típico momento en el que tu viejo … [+ info...]

Copyright © 2026 · Programar Fácil · Aviso legal

Utilizamos cookies para ofrecerte la mejor experiencia en nuestra web.

Puedes aprender más sobre qué cookies utilizamos o desactivarlas en los .

Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.

Cookies estrictamente necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Cookies de terceros

Esta web utiliza Google Tag Manager para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

Dejar esta cookie activa nos permite mejorar nuestra web.