Квалификатор 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; |
} |