نمایش نتایج: از 1 به 6 از 6
Like Tree2 لایک
  • 1 Post By shobeir90
  • 1 Post By solxsado

موضوع: فقط یکبار خواندن digitalWrite در هر بار صفر شدن

  1. #1
    Junior Member
    تاریخ عضویت
    Aug 2016
    نوشته ها
    10

    فقط یکبار خواندن 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

  2. #2
    Junior Member
    تاریخ عضویت
    Aug 2016
    نوشته ها
    10
    کسی نبود کمک کنه؟ اگه سوالم واضح نیست بگید

  3. #3
    مدیر ویژه
    تاریخ عضویت
    Mar 2014
    نوشته ها
    586
    سلام
    با توجه به رفرنسم

    شما بیا بعد از if این حلقه while رو بذار به این ترتیب که
    تا زمانیکه digitalRead(button)==0 باشد حلقه while تکرار شه.
    while(digitalRead(button)==0){
    ;(delay(20

    }


    با اینکار وقتیکه دکمه فشرده شده میره توی یک حلقه با تاخیر مثلا 20 میلی ثانیه اینقدر منتظر میشه تا دکمه رها شه.
    لایک کردن

  4. #4
    Junior Member
    تاریخ عضویت
    Aug 2016
    نوشته ها
    10
    سلام،من طبق گفته ی شما برنامه رو به این شکل نوشتم:

    }(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

  5. #5
    Senior Member
    تاریخ عضویت
    Dec 2013
    محل سکونت
    ایران - شیراز
    نوشته ها
    213
    digitalWrite(x,!digitalRead(x));

    توسط این خط کد شما خروجی x رو نامساوی با مقدار خوانده شده از پین x می کنید
    لایک کردن

  6. #6
    مدیر ویژه
    تاریخ عضویت
    Mar 2014
    نوشته ها
    586
    شما 2 بخش دارید که به ترتیب صورت میگیره
    - حلقه ای که نگه دارنده وضعیت دکمه هست
    - اجرای روشنایی ال ای دی

    می تونی جابجاشون کنی
    اول led بعد حلقه
    یا اول حلقه بعد led

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

SEO by vBSEO