static

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;
}

4 comentarios:

  1. Se te mezclaron líneas del código. Así no funciona!

    ResponderEliminar
  2. Versión original (en inglés):
    https://www.arduino.cc/reference/en/language/variables/variable-scope--qualifiers/static/

    ResponderEliminar

  3. #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;
    }

    ResponderEliminar