Ключевое слово static используется для создания переменных, которые будут видны только одной функции. Однако, в отличие от локальных переменных, которые создаются и уничтожаются при каждом вызове функции, переменные static сохраняют свое значение между вызовами.
Переменные, объявленные как static, создаются и инициализируются только при первом вызове функции.
Пример:
* RandomWalk
* Paul Badger 2007
* RandomWalk в случайном порядке перемещается вверх или вниз между двумя
* точками. Длина максимального перемещения за один цикл задается
* параметром "stepsize".
* Статическая переменная увеличивается или уменьшается на случайную величину.
* Эта техника также известна как "розовый шум" или "пьяная походка".
*/
#define randomWalkLowRange -20
#define randomWalkHighRange 20
int stepsize;
int thisTime;
int total;
void setup()
{
Serial.begin(9600);
}
void loop()
{ // функция randomWalk
stepsize = 5;
thisTime = randomWalk(stepsize);
Serial.println(thisTime);
delay(10);
}
int randomWalk(int moveSize){
static int place; // переменная для хранения величины случайного перемещения - объявлена как static, поэтому
// сохраняет свое значение между вызовами функции. При этом другие функции не могут ее изменить
place = place + (random(-moveSize, moveSize + 1));
if (place < randomWalkLowRange){ // проверка нижнего и верхнего пределов
place = place + (randomWalkLowRange - place); // восстановление числа в положительном направлении
}
else if(place > randomWalkHighRange){
place = place - (place - randomWalkHighRange); // восстановление числа в отрицательном направлении
}
return place;
}