static

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