Static
Ключевое слово 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; }