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);
Serial.begin (9600);
void loop( ) {
int i = 2;
}
int j = 3;
int k;
k = myMultiplyFunction(i, j); // k ahora contiene 6
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);
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;
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;
}
}
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();
por qué las variables enteras se definen en void loop()? y no en void setup()del primer ejemplo
ResponderEliminarLas variables se declaran en el ámbito que se utilizan.
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminar