فرض کنید یک پروژه آردوینو دارید که میخواهید چندین عمل را همزمان انجام دهید:
- خواندن دادهها از ورودی کاربر
- چشمک زدن LED
- خواندن مقدار آنالوگ پتانسیومتر
بنابراین میخواهید چند کار را با آردوینو انجام دهید.که همان Multitasking می شود.اینجاست که کد شما کمی پیچیده می شود. زیرا در آردوینو ما اساسا Multitasking واقعی را نداریم . اما… من یک خبر خوب برای شما دارم هنوز هم می توانید با آردوینو چند کار را به صورت همزمان انجام دهید.
قبل از اینکه نحوه انجام Multitasking با آردوینو را به شما توضیح دهم، بیایید ببینیم که چرا نمیتوانید برنامهنویسی موازی را در Arduino انجام دهید:
یک کامپیوتر دارای چند هسته و مقدار زیادی رم است. شما می توانید یک سیستم عامل (مانند ویندوز) را نصب کنید و صدها Task ایجاد کنید. به عنوان مثال، هنگامی که فایرفاکس یا کروم را راه اندازی می کنید، Task جدیدی ایجاد می شود، بنابراین می توانید با کامپیوتر چند کار را همزمان باهم انجام دهید.
با آردوینو، همه چیز متفاوت است.
“هسته” برد آردوینو یک میکروکنترلر است (ATmega328 برای Arduino Uno). یک میکروکنترلر تنها یک هسته دارد و تنها قادر به اجرای یک دستور در یک زمان است.
بنابراین، اگر تصمیم دارید در داخل یک تابع مکث کنید، تمام برنامه شما منتظر انجام آن تابع است. هر بار که چیزی می نویسید، باید به تأثیر آن بر کل کد فکر کنید.
اگر تکه کد های کوچک انجام دهید و آنها را خیلی سریع و یکی پس از دیگری انجام دهید، احساس Multitasking را خواهید داشت.حال ما می خواهیم از یک کتابخانه Esp8266 که این کار را با پیروی از همین اصل برنامه نویسی کرده اند استفاده کنیم که کار را برای ما بسیار راحت می کند.
پیشنهاد می شود که این کد را در محیط Visual Studio Code اجرا کنید تا فایل ها مرتب برای شما نشان داده شود.
دانلود کد ها
در این پروژه ما می خواهیم مقادیر پتانسیومتری را که به پایه A0 برد Esp8266 متصل شده را بررسی کنیم و روی سریال آردینو نمایش می دهیم و همزمان میزان مصرف Heap که در سرعت و عملکرد این برد بسیار مهم است را روی پورت سریال نمایش می دهیم.
کتابخانه esp8266 scheduler که از بخش Library manager می توانید دانلود کنید به ما برای هر Task یک تابع Setup و Loop می دهد که باید آشنایی کمی هم با زبان ++C داشته باشید تا برخی از بخش های کد را متوجه بشوید.توضیحات کد در درون خود کد به صورت کامنت نوشته شده است.در این پروژه ما از چند فایل هدر و یک فایل اصلی استفاده می کنیم.
فایل اصلی با پسوند .ino
در این فایل اصلی ما فقط بخش های Scheduler را راه اندازی می کنیم و داخل فایل های هدری که در یک پوشه مشترک قرار دارند کد های اصلی و طولانی تر را به صورت تابع ها و کلاس های مختلف می نویسیم تا یک کد کاملا خوانا و قابل فهم داشته باشیم.
فایل Analog با پسوند .h
در هرکدام از کلاس هایی که از Scheduler تابعیت می کنند یک حلقه Setup & Loop داریم که بسیار به ما کمک می کنند.این حلقه ها دقیقا مانند Loop & Setup اصلی کار می کنند.
فایل PrintTask با پسوند .h
هم چنین می توانیم که برای بهتر شدن کد از فایل های Cpp هم استفاده کنیم که به خوانایی و ساختن کتابخانه برای آردینو کمک می کند و یک