کلمهی کلیدی Static در آردوینو برای ایجاد متغیرهایی که فقط برای یک تابع قابلمشاهده (معتبر) هستند، استفاده میشود. برخلاف متغیرهای محلی (local) که با هر بار فراخوانی تابع ایجاد میشوند و بعد از اتمام فراخوانی از بین میروند، متغیرهای static فراتر از این فراخوانیها باقی میمانند و در بین فراخوانیهایِ تابع، از دادههای خود محافظت میکنند. (بعد از تمام شدن تابع، دادهها از بین نمیروند.)
متغیرهای static فقط در اولین بارِ فراخوانی تابع، ایجاد و مقداردهی اولیه خواهند شد.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | /* 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; } |