La palabra clave static se usa para crear variables que solo son visibles dentro de una función. Sin embargo a diferencia de las variables locales que se crean y destruyen cada vez que se invoca una función, las variables estatic persisten más allá de la llamada a la función, preservan sus datos entre llamadas a funciones.
Las variables declaradas como static sólo se crean e inicializan la primera vez que una función se llama.
Ejemplo
/* Paseo aleatorio
* Paul Badger 2007
* Paseo aleatorio se pasea arriba y abajo al azar entre dos
* puntos finales. La medida máxima en un bucle se rige por
* Una variable estática se mueve hacia arriba y hacia abajo una cantidad aleatoria.
* el parámetro "stepsize" (tamaño del paso).
#define randomWalkLowRange -20
* Esta técnica también se conoce como "ruido rosa" y "caminar borracho".
*/
#define randomWalkHighRange 20
{ // comprueba la función randomWalk
int stepsize;
int thisTime;
int total;
void setup()
{
Serial.begin(9600);
}
void loop()
stepsize = 5;
static int place; // variable para almacenar el valor de random walk - declarada static ya almacenada
thisTime = randomWalk(stepsize);
Serial.println(thisTime);
delay(10);
}
int randomWalk(int moveSize){
place = place + (random(-moveSize, moveSize + 1));
//valores entre llamadas a funciones, pero otras funciones no pueden cambiar su valor
if (place < randomWalkLowRange){ // comprueba los límites alto y bajo
place = place - (place - randomWalkHighRange); //refleja el número de vuelta en dirección negativa
place = place + (randomWalkLowRange - place); // refleja el número de vuelta en dirección positiva
}
else if(place > randomWalkHighRange){
}
return place;
}
Gracias
ResponderEliminarSe te mezclaron líneas del código. Así no funciona!
ResponderEliminarVersión original (en inglés):
ResponderEliminarhttps://www.arduino.cc/reference/en/language/variables/variable-scope--qualifiers/static/
ResponderEliminar#define randomWalkLowRange -20
#define randomWalkHighRange 20
int stepsize;
int thisTime;
int total;
void setup()
{
Serial.begin(9600);
}
void loop()
{ // tetst randomWalk function
stepsize = 5;
thisTime = randomWalk(stepsize);
Serial.println(thisTime);
delay(10);
}
int randomWalk(int moveSize){
static int place; // variable to store value in random walk - declared static so that it stores
// values in between function calls, but no other functions can change its value
place = place + (random(-moveSize, moveSize + 1));
if (place < randomWalkLowRange){ // check lower and upper limits
place = place + (randomWalkLowRange - place); // reflect number back in positive direction
}
else if(place > randomWalkHighRange){
place = place - (place - randomWalkHighRange); // reflect number back in negative direction
}
return place;
}