Curso C para Arduino

¿Qué son las funciones?

Una función es un bloque de código que realiza una tarea específica, que puede ejecutarse cada vez que sea invocada. Permiten organizar y reutilizar código, haciendo el programa más sencillo y eficiente.

Estructura básica de una función:

1tipoDato nombreFuncion(tipoDato parametro1, tipoDato parametro2, ...) {
2  // instrucciones
3  return valor; // opcional
4}

Ejemplo de función simple:

1// función que suma dos números y devuelve el resultado
2int suma(int a, int b) {
3  int resultado = a + b;
4  return resultado;
5}

Para usarla dentro del código principal:

1void setup() {
2  Serial.begin(9600);
3  int total = suma(5, 3); // llama a la función suma
4  Serial.print("La suma es: ");
5  Serial.println(total); // imprime 8
6}
7
8void loop() {
9  // código repetitivo
10}

Funciones sin retorno (void)

Las funciones pueden no devolver ningún valor. Esto se indica con void.

1// función que enciende un LED en un pin dado
2void encenderLED(int pin) {
3  digitalWrite(pin, HIGH);
4}

Llamado:

1void setup() {
2  pinMode(13, OUTPUT);
3  encenderLED(13);
4}

Parámetros y retorno de valores

Parámetros:

Permiten enviar datos o valores hacia una función para que los procese.

1// función con parámetros para encender o apagar un LED
2void controlLED(int pin, boolean estado) {
3  digitalWrite(pin, estado);
4}

Llamado:

1controlLED(13, HIGH); // enciende LED
2controlLED(13, LOW);  // apaga LED

Retorno de valores:

Permite devolver el resultado de la función al punto desde donde fue llamada.

1float convertirTemperatura(float celsius) {
2  float fahrenheit = (celsius * 9 / 5) + 32;
3  return fahrenheit;
4}

Llamado:

1float tempF = convertirTemperatura(25.0);
2Serial.println(tempF); // imprime 77.00

Modularización del código

Consiste en organizar el código en diferentes archivos o módulos para mejorar la claridad y facilitar el mantenimiento.

Un módulo suele dividirse en dos archivos:

  • Cabecera (.h): Declaraciones de funciones, variables globales y constantes.
  • Implementación (.c): Contiene el código de las funciones.

Ejemplo práctico:

Archivo: ledControl.h

1#ifndef LEDCONTROL_H
2#define LEDCONTROL_H
3
4void encenderLED(int pin);
5void apagarLED(int pin);
6
7#endif

Archivo: ledControl.c

1#include <Arduino.h>
2#include "ledControl.h"
3
4void encenderLED(int pin) {
5  digitalWrite(pin, HIGH);
6}
7
8void apagarLED(int pin) {
9  digitalWrite(pin, LOW);
10}

Para utilizar estos módulos en tu archivo principal (.ino):

1#include "ledControl.h"
2
3void setup() {
4  pinMode(13, OUTPUT);
5}
6
7void loop() {
8  encenderLED(13);
9  delay(1000);
10  apagarLED(13);
11  delay(1000);
12}