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