2 لایک
-
1
Post By shobeir90
-
1
Post By solxsado
-
فقط یکبار خواندن digitalWrite در هر بار صفر شدن
باسلام،من میخوام با یک سوییچ یک led روشن و خاموش کنم به این صورت که وقتی که کلید فشرده میشه led روشن بشه و وقتی که دوباره فشرده شد led خاموش بشه.
من برای این کار برنامه زیر رو نوشتم:
;int button=1
;int led=2
;int x=0
}()void setup
;(pinMode(button,INPUT_PULLUP
;(pinMode(led,OUTPUT
{
}()void loop
}(if(digitalRead(button)==0
;x=1-x
;(delay(200
{
;(digitalWrite(led,x
{
وقتی digitalRead صفر میشه بعد از 200 میلی ثانیه x یک میشه و led روشن میشه ،وقتی دوباره کلید فشرده میشه x صفر میشه و led خاموش.
حالا موضوع اینجاست که اگر کلید رو بیشتر از 200 میلی ثانیه نگ داریم تا زمانی که کلید فشرده است led هر 200 میلی ثانیه روشن و خاموش میشه.ولی من میخوام که وقتی کلید رو فشار دادم تا هر موقع هم که فشرده بود led فقط یکبار روشن یا خاموش بشه.مثل وقتی که تلویزیون رو با کنترل خاموش میکنیم حتی اگه دکمه رو نگه داریم فقط یکبار اون عمل خاموش یا روشن بودن رو انجام میده.
ممنون میشم اگه کسی راهنمایی کنه
ویرایش توسط miladdav : 11-30-2016 در ساعت 05:13 PM
-
کسی نبود کمک کنه؟ اگه سوالم واضح نیست بگید
-
سلام
با توجه به رفرنسم
شما بیا بعد از if این حلقه while رو بذار به این ترتیب که
تا زمانیکه digitalRead(button)==0 باشد حلقه while تکرار شه.
while(digitalRead(button)==0){
;(delay(20
}
با اینکار وقتیکه دکمه فشرده شده میره توی یک حلقه با تاخیر مثلا 20 میلی ثانیه اینقدر منتظر میشه تا دکمه رها شه.
-
سلام،من طبق گفته ی شما برنامه رو به این شکل نوشتم:
}(if(digitalRead(button)==0
;x=1-x
}(while(digitalRead(button)==0
;(delay(20
{
{
و نتیجه داد.وقتی کلید فشرده میشه تا زمانی که فشرده است برنامه تو حلقه while میمونه و هیچ کاری انجام نمیشه تا زمانی که کلید رها بشه و برنامه از حلقه while خارج بشه.
خیلی ممنون از شما که راهنمایی کردید.
فقط یه سوال دیگه واسم پیش اومده،وقتی led روشنه کلید رو نگه میداریم و رها نمیکنیم در این لحظه برنامه میره تو حلقه while گیر میکنه ولی led روشن میمونه،خب اینجا برنامه که نمیتونه بره کار digitalWrite رو که بعد از while نوشته شده انجام بده پس چطور led روشنه.آیا مقادیر صفر و یک داده شده به هر پایه تو حافظه ذخیره میشه؟
ویرایش توسط miladdav : 11-30-2016 در ساعت 05:14 PM
-
digitalWrite(x,!digitalRead(x));
توسط این خط کد شما خروجی x رو نامساوی با مقدار خوانده شده از پین x می کنید
-
شما 2 بخش دارید که به ترتیب صورت میگیره
- حلقه ای که نگه دارنده وضعیت دکمه هست
- اجرای روشنایی ال ای دی
می تونی جابجاشون کنی
اول led بعد حلقه
یا اول حلقه بعد led
مجوز های ارسال و ویرایش
- شما نمیتوانید موضوع جدیدی ارسال کنید
- شما امکان ارسال پاسخ را ندارید
- شما نمیتوانید فایل پیوست کنید.
- شما نمیتوانید پست های خود را ویرایش کنید
-
مشاهده قوانین انجمن
SEO by vBSEO