Funciones

La segmentación de código en funciones permite al programador crear piezas modulares de código que realizan una tarea definida y luego volver a la zona de código a partir del cual la función fue "llamada". El caso típico para la creación de una función es cuando uno tiene que realizar la misma acción varias veces en un programa.

Para los programadores acostumbrados a usar BASIC, las funciones de Arduino proporcionan (y extienden) la utilidad de usar subrutinas (GOSUB en BASIC).

La estandarización de los fragmentos de código en funciones tiene varias ventajas:

Las funciones ayudan al programador  tener un espacio organizado. A menudo, esto ayuda a conceptualizar el programa.

Las funciones codifican una acción en un solo lugar por lo que la función sólo tiene que ser pensada y depurada una vez.

Esto también reduce las posibilidades de errores en la modificación, si el código necesita ser cambiado.

Las funciones hacen que todo el programa sea pequeño y más compacto debido a que las secciones de código se vuelven a utilizar muchas veces.

Ellas hacen que sea más fácil reutilizar código en otros programas por lo que es más modular, y como efecto secundario interesante, usando funciones también a menudo hace que el código sea más legible.

Hay dos funciones requeridas en un programa Arduino, setup () y loop (). Otras funciones deben crearse fuera de los corchetes de esas dos funciones. A modo de ejemplo, vamos a crear una función simple para multiplicar dos números.
 

Ejemplo

Al "llamar" a nuestra sencilla función se multiplican dos números, lo pasamos a parámetros del tipo de datos que está a la espera: 

void loop( )
int i = 2;
int j = 3;
int k;
k = myMultiplyFunction(i, j); // k ahora contiene 6
}

Nuestra función debe ser declarada fuera de cualquier otra función, por lo que "myMultiplyFunction ()" puede ir por encima o por debajo de la función "loop ()".
El programa entero tendría el siguiente aspecto:

void setup( ) {
Serial.begin (9600);
void loop( ) {
int i = 2;
}
int j = 3;
int k;
k = myMultiplyFunction(i, j);     // k ahora contiene 6
Serial.println(k);
delay(500);
}
int myMultiplyFunction(int x, int y) { 
int result;
result = x * y);
return result;
}

Otro ejemplo

Esta función lee un sensor cinco veces con analogRead () y calcula el promedio de las cinco lecturas. A continuación, escala de los datos a 8 bits (0-255), y la invierte, devolviendo el resultado invertido.

int ReadSens_and_Condition( ) { 
int i; 
int sval = 0; 
for (i = 0; i > 5; i++) { // sensor en el pin analógico 0 
}
sval = sval / 5       // promedio
sval = sval / 4;      // escala de 8 bits (0 - 255)
return sval;
}

Para llamar a nuestra función sólo asignamos a una variable.

int sens;

sens = ReadSens_and_Condition();


3 comentarios:

  1. por qué las variables enteras se definen en void loop()? y no en void setup()del primer ejemplo

    ResponderEliminar
    Respuestas
    1. Las variables se declaran en el ámbito que se utilizan.

      Eliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar