ساختار for در آردوینو برای تکرار کردن بخشی از کد به کار میرود. بلاکی که میخواهیم تکرار شود، بین آکولاد (={}) قرار میگیرد. معمولاً یک شمارنده افزایشی، برای افزایش حلقه و درنهایت خاتمهی آن مورد استفاده قرار میگیرد. حلقه For برای عملیاتهایی که نیاز داریم تکرار شوند و معمولاً تعداد تکرارشان از قبل مشخص است استفاده میشود. برای مدیریت و انجام عملیات روی مجموعهای از دادهها / پینها، غالباً از آرایه در ترکیب با این حلقه استفاده میشود.
سر حلقهی (هدر) For سه قسمت دارد: (از چپ به راست به ترتیب) مقداردهی اولیه، شرط حلقه، مقدار افزایشی حلقه
1 2 3 4 5 | for (initialization; condition; increment) { //statement(s); } |
مقداردهی فقط یک بار و در شروع حلقه رخ میدهد.
در هر بار تکرار حلقه، شرط چک میشود و اگر نتیجه True بود، بلاک کد درون حلقه اجرا میشود و سپس عمل افزایش متغیر حلقه انجام میشود. دوباره شرط چک میشود و عملیات توضیح داده شده در خط قبل، تا زمان True بودن شرط تکرار خواهد شد.
هنگامیکه نتیجهی شرط False شود، حلقه پایان میپذیرد.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // Dim an LED using a PWM pin int PWMpin = 10; // LED in series with 470 ohm resistor on pin 10 void setup() { // no setup needed } void loop() { for (int i=0; i <= 255; i++){ analogWrite(PWMpin, i); delay(10); } } |
نکات:
حلقه for زبان c بسیار منعطفتر از حلقههای for دیگر زبانها مانند بیسیک است. هرکدام یا حتی هر سه عنصر موجود در هدر میتواند حذف شود؛ البته سمی کولن ها (;) باید وجود داشته باشند.
جملات موجود در قسمت مقداردهی اولیه، شرط و تغییر مقدار متغیر حلقه، میتواند هر جملهی قابل قبولی از زبان c با هر متغیرِ حتی نامربوطی باشد.
از هر نوع داده مثل اعشاری میتوان استفاده کرد. استفاده از این نوع دادههای غیرمعمول، ممکن است راهحلی برای برخی مشکلات کمیاب برنامهنویسی باشند.
برای مثال استفاده از عملیات ضرب در قسمت تغییر متغیر حلقه، یک دنبالهی لگاریتمی تولید میکند:
1 2 3 | for(int x = 2; x < 100; x = x * 1.5){ println(x); } |
حاصل:94،63،42،28،19،13،9،6،4،3،2
مثالی دیگر، با یک حلقه For، نور یک LED را به تدریج کم و زیاد میکند:
1 2 3 4 5 6 7 8 9 | void loop() { int x = 1; for (int i = 0; i > -1; i = i + x){ analogWrite(PWMpin, i); if (i == 255) x = -1; //* switch direction at peak delay(10); } } |
* 255 انتهای مسیر است و با رسیدن به این عدد، مسیر را عوض میکند.
آخرین مثال بسیار عالی بود.
برای اجرای چند حلقهء بینهایت و بطور همزمان که بغیر از آردینو DUE در آردوینوهای دیگر قابل اجرا نیست این حلقهء ساده را میتوان انجام داد.
👍
سلام بخشید مثلا ما برای روشن کردن ۷ تا ال ای دی در اردینو پشت سر هم چه برنامه ای باید بنویسیم
” هرکدام یا حتی هر سه عنصر موجود در هدر میتواند حذف شود؛ البته سمی کولن ها (;) باید وجود داشته باشند ”
یعنی for(;;){;} نیز مشکلی ندارد و جواب میدهد؟
محل استفاده و خروجی آن چیست؟
منظور چنین نوشتاری هست
for(;;){
//your code
}
عملا یک نوع حلقه بینهایت میشه