Квалификатор static
Ключевое слово static используется для создания переменной, которая видна только одной функции. Однако в отличие от локальных переменных, которые создаются и уничтожаются при каждом вызове функции, статические переменные остаются после вызова функции, сохраняя свои значения между её вызовами.
Пример
/* RandomWalk * Paul Badger 2007 * RandomWalk ("Случайное блуждание") программа "перемещается" между двумя точками последовательности * Максимальное перемещение задается параметром "stepsize". * Static переменная изменяет свое значение на случайную велечину. * Такое "блуждание" иногда называют "pink noise" (розовый шум). */ #define randomWalkLowRange -20 #define randomWalkHighRange 20 int stepsize; int thisTime; int total; void setup() { Serial.begin(9600); } void loop() { 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 = place + (randomWalkLowRange - place); // если "выскочили" то делаем разворот // этот пример взят с arduino.cc, вообще? если раскрыть скобки, // то получим просто place = randomWalkLowRange; } else if(place > randomWalkHighRange){ place = place - (place - randomWalkHighRange); // разворот } return place; }