Static در آردوینو
کلمهی کلیدی Static در آردوینو برای ایجاد متغیرهایی که فقط برای یک تابع قابلمشاهده (معتبر) هستند، استفاده میشود. برخلاف متغیرهای محلی (local) که با هر بار فراخوانی تابع ایجاد میشوند و بعد از اتمام فراخوانی از بین میروند، متغیرهای static فراتر از این فراخوانیها باقی میمانند و در بین فراخوانیهایِ تابع، از دادههای خود محافظت میکنند. (بعد از تمام شدن تابع، دادهها از بین نمیروند.) متغیرهای static فقط در اولین بارِ فراخوانی تابع، ایجاد و مقداردهی اولیه خواهند شد.
مثال:
/* RandomWalk * Paul Badger 2007 * این برنامه بین دو نقطه حرکت میکند و بالا و پایین میرود. * حداکثر مقدار حرکت در یک حلقه توسط پارامتر * "stepsize". * کنترل میشود. * یک متغیر *static *به اندازهی یک مقدار تصادفی بالا و پایین میشود *این تکنیک به نامهای زیر نیز مشهور است: *"pink noise" and "drunken walk". */ /* RandomWalk * Paul Badger 2007 * RandomWalk wanders up and down randomly between two * endpoints. The maximum move in one loop is governed by * the parameter "stepsize". * A static variable is moved up and down a random amount. * This technique is also known as "pink noise" and "drunken walk". */ #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); // عدد را در جهت مثبت بر میگرداند } else if(place > randomWalkHighRange){ place = place - (place - randomWalkHighRange); // عدد را در جهت منفی بر میگرداند } return place; }