¿Qué es una función y para que sirve?

Una función es una porción de código que realiza una tarea concreta, por ejemplo sumar dos números.

Estas porciones de código son muy útiles cuando tenemos que realizar una tarea recurrentemente, imagina por ejemplo un robot esquiva obstáculos que tiene que medir la distancia al obstáculo una y otra vez, por lo tanto no sería eficiente tener que escribir la porción de código que lee el ultrasonidos una y otra y otra vez, te imaginas la longitud de este programa sería de locos.

Es decir podemos llamar a la función desde multitud de sitios diferentes del programa pero solo escribimos una vez la porción de código que realiza esta tarea por lo que hace el programa mucho más eficiente y ordenado.

Las funciones en Arduino las vamos a dividir en:

-Llamadas a la función pasando parámetros

-Llamadas a la función sin parámetros

-funciones que devuelven parámetro

-funciones que no devuelven parámetro (void)

llamada a la función que devuelve parámetro
llamada a la función que devuelve parámetro
funciones que no devuelve parámetro
funciones que no devuelve parámetro
Función que devuelve parámetro
Función que devuelve parámetro
Función que no devuelve parámetro
Función que no devuelve parámetro

¿Qué procesos ocurren al llamar a una función?

Primero nos debemos plantear si la función, nos va a devolver algún parámetro o no y en caso afirmativo de que tipo será ese dato, variable o parámetro, por lo tanto la variable que recibirá el resultado de la función será del mismo tipo.

En segundo lugar ¿esa función necesita que le pasemos parámetros (variables o constantes) para que pueda ejecutarse?, por ejemplo la función suma dos números he de pasarle esos dos números, en caso de que no necesitase de que se le pasaran parámetros se dejaría el paréntesis vacío ().

En tercer lugar en la declaración de la función si no devuelve nada escribiremos la sentencia void delante del nombre de la función.

En cuarto lugar si la función no necesita recibir parámetros dejaremos el paréntesis junto al nombre de la función vacío (), en caso contrario indicaremos dentro del paréntesis separado por comas tantos parámetros(variables) y su tipo como sean necesarios, sus nombres no coincidirán con los de la llamada solo la posición debido a que podremos hacer diferentes llamadas y en cada una de ellas estaremos mandando variables o parámetros diferentes, lo que tiene en cuenta la función es el lugar que ocupa no la coincidencia del nombre.

En quinto lugar en caso de que la función devuelva un parámetro (valor, variable) deberemos de escribir la sentencia return acompañada de la variable a devolver es decir el nombre que le hemos dado a esa variable dentro de la función aunque desde donde se llamó a la función, el nombre de la variable a la que se va a asignar esta devolución se llame de forma diferente, en realidad lo que devolvemos es un valor que dentro de la función esta dentro de una variable pero ese valor al ser devuelto desde donde se llamo se meterá dentro de una variable con nombre distinto.

En sexto lugar si la función devuelve parámetro retornará a la línea de código desde donde fue llamada para asignarle el valor devuelto a la variable, en caso contrario de que la función no devuelva nada cuando termine de ejecutarse la función retornará a la línea de código inmediatamente siguiente desde donde se efectuó la llamada.

¿Cómo es el proceso que se sigue al llamar a una función en Arduino?

Proceso al llamar a una función

Vamos a tomar como ejemplo para que te sea más fácil su comprensión una función que suma dos números enteros sumando1, sumando 2 y nos devuelve la suma por medio de la variable resultado.

Y a continuación volvemos a hacer otra llamada esta vez con dos sumandos diferentes, sumando3 y sumando4

Sketch función suma dos numeros
Sketch función suma dos números

*Hay que tener en cuenta que una función no se puede declarar dentro de otra función

*Que las funciones se declaran fuera del void Loop, yo por costumbre las declaro al final

*En los nombres de las funciones no puede haber espacios deberemos usar guiones en su lugar.

Sé que esto de las funciones es bastante lioso al principio pero son muy útiles y trabajándolas un poco estoy seguro que lograras entenderlas y para ello te voy a poner otros dos ejemplos más para que practiques ambas funciones hacen lo mismo pero en una vamos a pasarle parámetros y nos devolverá un parámetro y sin embargo en la segunda función no vamos a pasar ni a devolver parámetros.

Esta función la usaremos posteriormente en nuestro robot esquiva obstáculos y es la encargada de medir la distancia al objeto cuando se le requiera, esta es otra ventaja de las funciones y es que pueden ser reutilizadas en otros códigos, a que mola 😉 .

Función que pasa y recibe parámetros:

Función que pasa y recibe parámetros
Función que pasa y recibe parámetros

Misma función pero en este caso ni se le pasa ni devuelve parámetros:

Función que ni pasa ni recibe parámetros
Función que ni pasa ni recibe parámetros