سلام دوست عزیز، کلا برای اینکه روند اجرای برنامه رو متوجه بشید، می تونید در قسمت های مختلف برنامه روی سریال برای خودتون log بذارید و متوجه بشید که کد به اون قسمت خاص رسیده.
برنامه شما وقتی که اجرا میشه، وارد loop اصلی میشه و ابتدا inputNumber رو برابر 0 قرار میده که این به خودی خود باعث خاموش شدن موتور نمیشه، چونکه inputNumber یک متغیر هست که شما مقدارش رو تغییر دادید و دلیلی نداره که موتور خاموش بشه.
بعد برنامه وارد while دوم میشه و اگر روی سریال چیزی ارسال نشده باشه، از اون رد میشه. بعد اگر delay دوم رو بذارید بمونه، ۵ ثانیه اونجا صبر می کنه و بعد موتور رو خاموش میکنه. این روند همیشه ادامه دار هست تا وقتی که چیزی روی سریال ارسال کنید.
فقط دقت کنید که تابع delay به صورت blocking وقفه رو ایجاد میکنه و در واقع در اون ۵ ثانیه، میکرو هیچ کار دیگه ای نمی کنه. پس اگر در اون تایم چیزی روی سریال برای میکرو بفرستید، احتمال اینکه کار نکنه خیلی زیاد هست. چون در اون لحظه میکرو در حال گوش کردن نبوده و داشته ۵ ثانیه صبر می کرده و سریال بعد از یک تایمی timeout میشه و دیگه داده رو نمی بینید.
پس در نظر داشته باشید که اگر می خواید بعد از ۵ ثانیه موتور خاموش بشه، یا داخل while دوم اینکار رو بکنید و یا به صورت non blocking و با استفاده از millis اینکار رو بکنید. (اگر هنوز به اون قسمت نرسیدید، در ادامه توضیحش به صورت کامل هست)
در مورد اینکه میگید اگر delay دوم رو بذارید موتور بعد از ۳ ثانیه روشن میشه هم برای من عجیب هست چون شما اول موتور رو روشن می کنید و بعد ۳ ثانیه صبر می کنید. بعد انتظار میره که موتور اول روشن بشه و بعد ۳ ثانیه صبر کنه. شاید ورودی رو روی سریال اشتباه دارید ارسال می کنید.
سلام آقای مهندس وقتتون بخیر.اولا تشکر میکنم از تدریس زیبا و قابل فهمتون.
این عکس رو مشاهده کنید.طبق تعریف loop ابتدا مقدار متغیر inputNumber صفر میشه.ما یک عدد وارد می کنیم و وارد دستور while میشیم.اینجا متغیر به پایه Enable موج رو اعمال میکنه.موتور روشن میشه.
حالا سوالم اینجاست.مگه دستورات خط به خط اجرا نمیشن،خب بعد از اتمام حلقه while باید دوباره به اول loop بیایم.یعنی دوباره مقدار inputNumber صفر بشه و موتور خاموش بشه!اما موتور روشن میمونه.چرا.مگه دستورات چطور اجرا میشن.
دوتا تاخیر گذاشتم.تاخیر اول باعث شد بعد از وارد کردن عدد ،3 ثانیه بگذره و بعد موتور روشن بشه.اما تاخیر دوم و صفر کردن پایه هیچ تاثیری نداشت.موتور خاموش نشد.(برای اینکه نظم عکس به هم نخوره به صورت کامنت دراوردم که بهتر مشخص باشه وگرنه برنامه اصلی کامنت نبود
)