اینتراپت قطعه کد کاملا جدایی از روند اصلی میکروکنترلره. خود اینتراپت ها هم بین خودشون اولویت دارن. اما اولویت اینتراپت خارجی از همه بالاتره. پس نگرانی از نظر اولویت اجرا نداره.
حدس میزنم یه چیزی مث دکمه ی خاموش روشن گوشیا میخواید. که مثلا نگهش میدارید روشن میشه گوشی. اونا هم دقیقا از همین روش استفاده میکنن.
احتمال زیاد با روش نوشتن اینتراپت و ... آشنا هستید.
روند انجام کار مد نظر شما اینطوره :
یه اینتراپت مینویسید برای ورودی کلید که به محض فشار دادن کلید اجرا میشه.
به محض اجرا شدن، وضعیت کنونی پایه رو تو یه متغییر ذخیره کنید. مثلا یه متغییر بول تعریف کنید و مقدار پایه رو بندازید توش (مقدار پایه رو میتونید با digitalRead بخونید)
یه دیلی به دلخواه (مثلا 3 ثانیه) بنویسید
الان دوباره چک کنید که دکمه همچنان فشار داده شده س یا نه. اینطوری که باید وضعیت کنونی دکمه، با وضعیت 3 ثانیه پیشش که تو متغییر ذخیره کردید یکی باشه. اگه یکی نبود، یعنی مثلا دکمه رو فقط برای مدت کوتاهی فشار داده بوده و الان دستشو برداشته.
الان یه شرط قرار بدید :
اگر مطمئن شدید همچنان دستش رو کلیده، تغییر وضعیت بدید (میتونید وضعیت میکرو رو توی یه متغییر ذخیره کنید برای استفاده بهتر). مثلا متغییری به اسم power تعریف کنید و وضعیت رو برای خودتون توش ذخیره کنید.
اگر دستش رو به مدت کافی نگه نداشته بود و دکمه رو آزاد کرده بود و وضعیت قبلی دستگاه، خواب بوده، دستگاه رو ببرید تو مود اسلیپ (چون دستگاه با وقفه بیدار میشه در هر حال)
اگه به قدر کافی نگه داشته بود تغییر وضعیت بدید. اگر بیدار بوده خواب، اگر خواب بوده هم کاری نکنید چون خودش بیدار شده