(01-01-2016, 12:07 PM)pedmar escribió: ya he pasado los mensajes correspondientes...
¿quizás falte alguno? o alguna respuesta parezca un poco fuera de lugar, pero he editado algunos mensajes para que tenga la máxima coherencia el hilo.
A seguir aprendiendo...
Gracias, yo creo que con eso vale.
Te contesto a tu pregunta relativa a donde es mejor declarar una variable.
Si necesitas usar una variable que va a ser utilizada desde partes muy diferentes del programa hay que declararla como global. De esa forma si dentro de una función quieres acceder a ella para tomar su valor o para actualizarlo con otro valor diferente podrás hacerlo. El compilador sabrá que estás usando la variable global.
Si por el contrario deseas usar una variable que solo tenga sentido dentro de una función, es mejor no hacerla global, salvo que su valor final deba ser recordado la próxima vez que usemos la función.
Voy a intentar concretar lo que acabo de explicar con funciones que ya conocemos.
Ya hemos comentado que en Arduino es obligado usar un par de funciones: setup() y loop().
Por resumir lo que haría Arduino al empezar a ejecutar un programa cargado en su memoria, sería lo siguiente:
1) Arduino crea las variables globales. (Las que se declaran fuera de las funciones.
Estas variables existirán siempre y se pueden usar desde cualquier parte salvo que una variable local con idéntico nombre la oculte). En nuestro ejemplo Cont.
2) Ejecuta la función setup() que solo se ejecutará una vez. Justo al principio de la función setup() se crean las variables que se han declarado dentro de ella (variables locales de setup() ) En nuestro caso se declaró A.
3) Después de ejecutarse todo el código de la función setup(), termina y destruye sus variables locales (ya no se necesitarán nunca más). A se destruye.
4) Empieza a ejecutar loop() y crea sus variables locales. En nuestro caso B.
5) Después de ejecutarse todo el código de la función loop(), termina y destruye sus variables locales (ya no se necesitarán nunca más).
6) El sistema una vez finalizado loop() lo vueleve a ejecutar una y otra vez.
A cada vez que loop() empieza tiene que crear de nuevo sus variables.
Si una variable dentro de loop() debe de conservar su valor, lo que hay que hacer es declarar esa variable fuera como variable global para que no se destruya nunca.
Si declaras una variable dentro de una de ellas, solo podrás usarla dentro de esa función donde se declaró. Por eso se llaman variables locales. La variables locales se crean durante la ejecución del programa en el momento de entrar en la función, y se destruyen cuando se sale de la función.
Este es el comportamiento normal de las variables locales y globales y antes de pasar a explicar como se puede modificar este comportamiento conviene familiarizarse con las formas habituales de usar las variables.
Usar variables globales cuando no son imprescindible no es aconsejable. Además en Arduino no sobra memoria para variables. Si lo metes todo en variables globales usas toda la memoria de una vez. Las variables locales dentro de una función gastan memoria para esas variables cuando estás dentro de la función pero la memoria se recupera al salir de la función.
Pongamos un ejemplo sencillo:
Código:
int Cont=0;
void setup(){
int A=10;
Cont=A;
}
void loop(){
int B=50;
Cont=Cont+B;
Serial.println( Cont);
B=1000;
delay(3000);
}
Con esto obtenemos lo siguiente:
160
210
260
310
360
410
...
El programa no hace nada demasiado interesante pero tenemos que intentar descifrar lo que hace y por qué. Se pide explicar algunas cuestiones añadiendo comentarios al programa.
Hay tres variables de tipo entero en el programa.
¿Cuales son variables globales y cuales son variables locales?
¿Parece que B=1000 no hace nada. Por qué?
¿Podríamos haber usado A=1000 en su lugar?