اطلاعیه

Collapse
No announcement yet.

کد دستوری بجای Debounce

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کد دستوری بجای Debounce

    سلام
    میخواستم بدونم بجای استفاده از کد دستوری Debounce دستور دیکه ای میشه استفاده کرد برای حذف نویز کلید و همچنین اگه بخوام یه برنامه بنویسم که یه کلید رو 2 ثانیه نگه دارم و بعد یه LED روشن بشه باید چکار کنم ؟ توجه داشته باشید که اگر کمتر از 2 ثانیه باشه عمل نکنه.
    رفیـق نیازموده را یار مدار

    #2
    پاسخ : کد دستوری بجای Debounce

    تو بسکام نمی دونم ولی با کدویزن فکر کنم با یه تاخیر میلی ثانیه بش درست اش کرد !
    بدون امضاء

    دیدگاه


      #3
      پاسخ : کد دستوری بجای Debounce

      برای حذف نویز کلید می تونید یه متغیر حالت تعریف کنید که اگر کلید زده شد و مقدار متغیر تعریف شده مثلا در ابتدا صفر بود ابتدا مقدار متغیر رو یک کن و سپس عملکرد مورد نظر رو انجام بده. سپس اگه دست از روی کلید برداشته شد مقدار متغیر رو به مقدار اولیه تغییر بده!
      این ساده ترین راهه و خیلی عالی هم کار می کنه.
      چرا ناراحتی پاتریک!
      + امروز ی بچه دیدم سرچهارراه گل میفروخت
      - از دیدنش ناراحت شدی؟
      + نه
      پس چی ناراحتت کرده
      + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
      ------------------------------------------------------------------------------------------------------
      تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
      ------------------------------------------------------------------------------------------------------
      محصولات

      دیدگاه


        #4
        پاسخ : کد دستوری بجای Debounce

        یکی از راه حل ها اینه که پورت رو به صورت ورودی تعریف کنی و در یک بازه مدام اونو بخوانی ،مثلا اگر کلید فشار داده شد و نگه داشته شد در بازه های مثلا 1 میلی ثانیه پورت رو بخونی و یه متغیر رو افزایش بدی اگه 2000 شد یعنی کلید 2 ثانیه نگه داشته شده است در غیر اینصورت هر وقتی که کلید رها شده و متغیر کمتر از 2000 بود باید متغیر 0 بشه.
        می بینیم و نادیده می گیریم!

        دیدگاه


          #5
          پاسخ : کد دستوری بجای Debounce

          آقای Mohsen P مرسی - منظور شما اینه :
          Config Porta = Input
          Dim A As Word
          Cursor On
          Do
          If Pina.1 = 0 Then Incr A
          If A > 6000 Then
          Locate 1 , 1 : Lcd "amin"
          If Pina.1 = 1 Then A = 0
          Cls
          End If
          Loop
          رفیـق نیازموده را یار مدار

          دیدگاه


            #6
            پاسخ : کد دستوری بجای Debounce

            نوشته اصلی توسط Amin0065
            آقای Mohsen P مرسی - منظور شما اینه :
            Config Porta = Input
            Dim A As Word
            Cursor On
            Do
            If Pina.1 = 0 Then Incr A
            If A > 6000 Then
            Locate 1 , 1 : Lcd "amin"
            If Pina.1 = 1 Then A = 0
            Cls
            End If
            Loop
            من کد رو تست نکردم اما یه تاخیر 1 میلی ثانیه ای هم می خواد چون افزایش 2000 تایی متغیر A بایستی در 2 ثانیه ایجاد شه.
            می بینیم و نادیده می گیریم!

            دیدگاه


              #7
              پاسخ : کد دستوری بجای Debounce

              یه نکته ای که یادم رفت اینه که اگر کل سیکل برنامت طولانی باشه یعنی ممکنه در قسمتی از برنامت یه تابع فراخوانی کنی که 500 میلی ثانیه طول بکشه انگاه چنین روشی ممکنه شما رو دچار مشکل کنه.
              اگه چنین بود می تونید از وقفه و تایمر استفاده کنید یا روش دیگه اول لبه منفی رو پیدا کنید و سپس لبه مثبت که مدت بین این دولبه زمان نگه داشتنه کلید بوده .در کل این به کاری که می کنید بستگی داره.
              در ضمن ببخشید که دیر جواب میدم اخه خیلی دیر به انجمن سر می زنم.
              می بینیم و نادیده می گیریم!

              دیدگاه


                #8
                پاسخ : کد دستوری بجای Debounce

                آقای mohsen p : مرسی از راهنماییت - می تونی اون چیزیو که داری میگی برنامشو واسم بنویسی واسه اون تاخیر 2 ثانیه ؟
                رفیـق نیازموده را یار مدار

                دیدگاه


                  #9
                  پاسخ : کد دستوری بجای Debounce

                  دوستان استفاده از تاخیر برای رفع bounce کلید اصلا به نظرم درست نیست.اون روشی رو که گفتم شما امتحان کنید قطعا جوابش از این تاخیر خیلی بهتره. برنامه رو هم متوجه نشدین خودم در اسرع وقت براتون قرار میدم.
                  چرا ناراحتی پاتریک!
                  + امروز ی بچه دیدم سرچهارراه گل میفروخت
                  - از دیدنش ناراحت شدی؟
                  + نه
                  پس چی ناراحتت کرده
                  + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
                  ------------------------------------------------------------------------------------------------------
                  تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
                  ------------------------------------------------------------------------------------------------------
                  محصولات

                  دیدگاه


                    #10
                    پاسخ : کد دستوری بجای Debounce

                    آقای سوران آراسته میشه برنامه رو واسم بذارید . . .
                    رفیـق نیازموده را یار مدار

                    دیدگاه


                      #11
                      پاسخ : کد دستوری بجای Debounce

                      اینم یه نمونه کد:
                      کد:
                      (PINC.0==0 && x==0)
                      {
                      x=1;
                      .
                      .
                      .
                      }
                      if(PINC.0==1 && x==1) x=0;

                      چرا ناراحتی پاتریک!
                      + امروز ی بچه دیدم سرچهارراه گل میفروخت
                      - از دیدنش ناراحت شدی؟
                      + نه
                      پس چی ناراحتت کرده
                      + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
                      ------------------------------------------------------------------------------------------------------
                      تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
                      ------------------------------------------------------------------------------------------------------
                      محصولات

                      دیدگاه


                        #12
                        پاسخ : کد دستوری بجای Debounce

                        نوشته اصلی توسط سوران آراسته
                        دوستان استفاده از تاخیر برای رفع bounce کلید اصلا به نظرم درست نیست.اون روشی رو که گفتم شما امتحان کنید قطعا جوابش از این تاخیر خیلی بهتره. برنامه رو هم متوجه نشدین خودم در اسرع وقت براتون قرار میدم.
                        کاملا موافقم که تاخیر بدترین راه ممکنه.
                        در موردنمونه کد هم بگم که متاسفانه دسترسی به نمونه کدهام ندارم.
                        می بینیم و نادیده می گیریم!

                        دیدگاه


                          #13
                          پاسخ : کد دستوری بجای Debounce

                          نوشته اصلی توسط Mohsen P
                          کاملا موافقم که تاخیر بدترین راه ممکنه.
                          در موردنمونه کد هم بگم که متاسفانه دسترسی به نمونه کدهام ندارم.
                          آقای آراسته من متوجه این کد نشدم ؟؟؟ میشه بیشتر توضیح بدی
                          رفیـق نیازموده را یار مدار

                          دیدگاه


                            #14
                            پاسخ : کد دستوری بجای Debounce

                            منم با نظر آراسته موافقم و چیزی که ایشون گفتن بهتره
                            فقط برا اینکه چک کنی چند مدت کلید نگه داشته شده حتما باید از وقفه تایمر استفاده کنی !
                            ماکه رفتیم خدمت (فعلا که 14 ماهش گذشت).........چون میگذرد غمی نیست....

                            http://tif00s.persiangig.com/image/MLX90614.jpg

                            دیدگاه


                              #15
                              پاسخ : کد دستوری بجای Debounce

                              نوشته اصلی توسط سوران آراسته
                              اینم یه نمونه کد:
                              کد:
                              (PINC.0==0 && x==0)
                              {
                              x=1;
                              .
                              .
                              .
                              }
                              if(PINC.0==1 && x==1) x=0;
                              آقای آراسته من متوجه این کد نشدم ؟؟؟ میشه بیشتر توضیح بدی
                              رفیـق نیازموده را یار مدار

                              دیدگاه

                              لطفا صبر کنید...
                              X