تایمر1
|
11-29-2017, 11:51 AM
ارسال: #1
|
|||
|
|||
تایمر1
این کد مخصوص پرژه ای است که اگر فاصله از حد 50سانتی متر کمتر شود LEDها شروع به چشمک زدن میکنن و بازر قطع و وصل میشه و اگ فاصله از 10سانت کمتر باشد فن خاموش میشه
ولی دز این پرژه حلقه تایمر 1 هنگ میکنه یا خوب کار نمیکنه مشکل از کار کجاست؟ کد php: #include "headers.h" |
|||
12-01-2017, 12:50 PM
ارسال: #2
|
|||
|
|||
RE: تایمر1
سلام
دقت کنید که واحد تایمر با توجه به interval مشخص شده برای این واحد وقفه تولید می کند، به عبارت دیگر زمان اجرای روتین وقفه ی تایمر، در زمان های مشخصی همزمان با اجرای محتویات درون حلقه ی while در تابع main هست. یعنی ممکن است که خط در حال اجرای برنامه روی تابع ()ultrasonic.distance باشد و درست در همان لحظه وقفه تایمر هم رخ دهد و عملیات trig کردن ultrasonic و خواندن میزان فاصله مختل شود ! پس در زمان برنامه نویسی باید همه ی حالات مختلف را مد نظر قرار دهید. جدا ی از این مورد، شرط هایی که استفاده کردید، طبیعتا کارامد نخواهند بود ، شرط کمتر از 50 و کمتر از 10 بودن به صورت موازی چک می شوند و به ترتیب ، و این در حالی است که فاصله در هر صورت یا کمتر از 10 است ، و یا بزرگتر از 10 و کمتر از 50 ، و یا بزرگتر از 50 است (با توجه به قصد پروژه شما) . در یک زمان هیچجوره نمی تواند در دو حالت صدق کند، پس برای کارامد بودن باید شرط ها رو به ترتیب اولویت بنویسید و حتما از else if استفاده کنید. در کد فعلی شما ، جهت روشن شدن مسئله یک عدد را به عنوان فاصله ی محاسبه شده در نظر بگیرید و روال اجرای پروژه ی خود را debug کنید، برای مثال اگر فاصله برابر 6 سانتی متر بود چه خط هایی در برنامه ی شما اجرا مش شوند؟ خواهید دید که 6 کمتر از 50 است ، پس محتویات شرط اول اجرا می شود و بعد از آن 6 کمتر از 10 هست، پس محتویات شرط بعدی هم انجام می شود، در صورتی که این مطلوب شما نبوده ! پس اولویت کمتر از 10 بودن بالاتر هست و اول باید شرط کمتر از 10 را بنویسید و با else if به سراغ باقی شرط ها برروی فاصله بروید. موفق باشید ![]() . . |
|||
|