Introduction: C/C++ En Arduino: Funciones

About: Músico, matemático, computación, ciencia... insolente y subversivo, pero siempre propositivo

La funciones permiten ordenar el código y hacerlo más legible y eficiente. Culquier porción de código que se repita muchas veces, probablemente es mejor escribirla en una función. En este instrucable hacemos un semáforo automático, creando una función para el cambio de color, que luego aplicamos en la sección loop del programa.

Step 1: Funciones

Una función es una porción de código que definimos con un nombre (identificador) y que puede ser utilizado (ejecutado) múltiples veces, desde cualquier punto en el código.

Una función es un bloque de código con un encabezado y cuerpo principal, como se muestra en la foto. Por ejemplo la siguiente función:

int mySum(int m, int n){
   return m+n;
}

La función lo que hace es sumar dos valores que dentro de la función se les llama m y n, y regresa (por eso el comando return), un entero que es el resultado de la suma de ambas variables. Así por ejemplo, al ejecutar en cualquier parte del código:

int resultado = mySum(3 , 2);

Almacena en la variable resultado el valor de 5.

De hecho setup y loop son también funciones sin argumentos y que no retornan valor, por eso el encabezado se escribe :

void setup(){
  ...
}

el tipo void, indica vacío dado que estas son funciones que no retornan nada.

En general las funciones pueden regresar con return variables de cualquier tipo. Todas las funciones que regresen un tipo que no sea void, deben incluir el comando return, que indica cuando se sale de la función y que es lo que debe retornar.

Step 2: Materiales

Ocupamos:

  1. Arduino UNO
  2. Leds rojo, amarillo y verde
  3. Resistencias de 330 Ohmn
  4. Cables
  5. Breadboard

Step 3: Conexiones

Las conexiones son las mismas que en este instructable. Únicamente no vamos a ocupar el botón

Step 4: Código

Acá les adjuntamos dos código. El primero "IntroC_Switch.ino", fue el que utilizamos en este instructable, pero ahra querémos hacer un semáforo automático. En el primer código, para poder cambiar la luz de color, teníamos que apretar el botón para cambiar la luz, ahroa queremos hacer cambios de luz, pero repetir la sección la condicional de switch para lograrlo sería tedioso y poco eficiente. Es allí donde es mejor hacer una función de cambio de color.

En el código "IntroC_Fun.ino" hacemos eso, creamos una función para cambiar de luz, que se ve entre las líneas 34 a 52:

void cambioColor(int val) {
switch (val) {
    case 0:
      digitalWrite(2, HIGH);
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      break;
    case 1:
      digitalWrite(2, LOW);
      digitalWrite(3, HIGH);
      digitalWrite(4, LOW);
      break;
    case 2:
      digitalWrite(2, LOW);
      digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      break;
  }
}

Vean que lo que hicimos fue tomar toda la condicional switch que teníamos en "ntroC_Switch.ino" y lo colocamos en dentro de una función, que toma como argumento una variable entero que en la función se llama "val", y funciona exactamente igual, solo que ahora llamamos a esa función con "cambioColor()", indicando entre paréntesis el estado.

Agregamos además ptra función para apagar todos los leds:

void allOff() {
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
}

Esta función, no tiene argumentos, y simplemente coloca todos los leds en LOW.

Noten además que en la línea 4 del código escribimos:

#define TIME 2000

La directiva #define, es lo que se conoce como un macro, que permite identificar la palabra "TIME", en este caso, con el texto "2000", lo que hace el compilador es sustituir en el código la palabra "TIME", donde sea que la encuentre en el código, con el texto "2000", de esa forma no tenemos que usar una variable para algo que solamente se cambia cuando se está programando

Step 5: Funcionando

Cargar el código y listo. Pueden cambiar en la línea cuatro valores para TIME, para cambiar el rango de duración de la roja y verde