نقل قول نوشته اصلی توسط Tiranoid نمایش پست ها
این که چجوری از if استفاده شده خب بسته به کد داره و قطعا خودتون بهتر میدونین.

ولی if (دستور برنچ) ساده ترین و پایه ترین دستورالعمل شرطی برای میکروکنترلره. سرعت اجراش تقریبا با سرعت مثلا جمع کردن یه متغییر با 1 برابره. جزو بنیادی ترین دستورالعمل های یه کامپیوتره. پس اگر سرعت if کم باشه، هیچ چیز دیگه ای نیست که سریعترش باشه. مگر اینکه اصلا بیخیال میکروکنترلر بشین و از FPGA استفاده کنید.

عیب روشی که بالا گفتیم که از if استفاده میکرد، این بود که ممکنه حلقه بیش از تعداد متغییرها اجرا بشه.
مثلا اگر ما 5 تا متغییر تو آرایه مون داریم، ممکنه حلقه 10 بار مثلا اجرا بشه (از نظر تئوری ممکنه بینهایت بار اجرا بشه !!)
چون بصورت رندوم انتخاب میکنه، ممکنه مثلا بار سوم، عددیو انتخاب کنه که -1 شده و درسته اجراش نمیکنه، ولی بالاخره حلقه انجام شده.

مثلا زمانی که آخرین بار داره حلقه اجرا میشه، یکی از متغییرها مقدار داره و بقیه -1 شدن. حالا هی تابع رندوم، اون -1 ها رو میده و این متغییر باقی مونده ممکنه هیچوقت توسط تابع رندوم اجرا نشه (احتمال اجراش 20 درصده اگر 5 متغییر داشته باشیم)
و اگه تعداد متغییرها زیاد باشه، عملا به نتیجه نمیرسه

این هم باز یه راه حل دیگه داره که خیلی عملی نیست تو این موقعیت
کافیه هر بار متغییری که انتخاب شده رو بجای اینکه مقدار -1 بهش بدیم، از تو آرایه حذفش کنیم. بجای آرایه باید از vector استفاده کنیم که اونم باز داستانیه.

بنظر من در کل بهتره برای اینکار از آردویینو استفاده نکنید.
یه میکروکنترلر AVR به انتخاب خودتون بگیرین و با اتمل استودیو یا کدویژن کدنویسی کنید و از توابع C استفاده کنید و همون روش لیست رو اجرا کنید.
مشکل دستور if ، سرعتش نیست ؛ بلکه احتمال تکراری بودن هر رندوم پشت سر هم هست که باعث میشه وقفه ایجاد بشه.

متاسفانه آردوینو vector رو هم پشتیبانی نمیکنه.

شما مطمئنید که اگر از خود میکروکنترلر AVR در محیط کدویژن استفاده کنم میتونم از همه ی دستورات C استفاده کنم ؟!