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}