Ключевое слово static используется для создания переменных, которые видит только одна функция. Однако, в отличие от локальных переменных, которые создаются и уничтожаются при каждом вызове функции, статические переменные сохраняются за пределами вызова функции, сохраняя свои данные между вызовами функции.
Переменные, объявленные как статические, будут создаваться и инициализироваться только при первом вызове функции.
/* RandomWalk Paul Badger 2007 RandomWalk блуждает вверх и вниз случайным образом между двумя конечными точками. Максимальное движение за один цикл регулируется параметром "stepsize". Статическая переменная перемещается вверх и вниз на случайную величину. Эта техника также известна как "розовый шум" и "пьяная походка".*/ #define randomWalkLowRange -20 #define randomWalkHighRange 20 int stepsize; int thisTime; 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; /* Переменная для хранения значения случайного блуждания объявлена статической, так что она хранит значения между вызовами функций, но никакие другие функции не могут изменить ее значение.*/ place = place + (random(-moveSize, moveSize + 1)); // Проверка верхнего и нижнего пределов if (place < randomWalkLowRange) { // Отразить число обратно в положительном направлении. place = randomWalkLowRange + (randomWalkLowRange - place); } else if (place > randomWalkHighRange) { place = randomWalkHighRange - (place - randomWalkHighRange); } return place; }