نمایش نتایج: از 1 به 4 از 4
Like Tree1 لایک
  • 1 Post By magmagmary

موضوع: نحوه روشن و خاموش کردن مدار با نگه داشتن یک کلید فشاری؟؟؟

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

    نحوه روشن و خاموش کردن مدار با نگه داشتن یک کلید فشاری؟؟؟

    با سلام

    من برای روشن و خاموش کردن پاور یه پروژه نمیخوام از کلید واکر استفاده کنم. بنابراین میخوام بدونم چجوری میشه با استفاده از آردوینو (که برای کنترل سیستمم ازش استفاده میکنم) با نگه داشتن یه کلید فشاری (مثلا برای 3 ثانیه) کل مداری که به باتری متصله رو یا روشن و یا خاموش کرد. مشابه چیزی که تو گوشی ها وجود داره که با نگه داشتن دکمه پاور گوشی، هم میشه خاموشش کرد و هم روشن؟

    با تشکر

  2. #2
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    سلام میتونی از دستور while استفاده کنی و البته دستور مناسب برای شمارش زمان millis:

    https://www.arduino.cc/en/reference/millis
    لایک کردن

  3. #3
    Member
    تاریخ عضویت
    Feb 2016
    نوشته ها
    55
    سلام بنده می خواستم برای اینکه بتونم با زدن یه کلید فشاری مثلا یه مقدار ثابتی به یه شمارنده ای اضافه بشه و با نگه داشتنش به مدت فرضا 2 ثانیه از مقدار اون شمارنده یه مقدار ثابتی کم بشه . برای این من اومدم از پین وقفه شماره 3 برد یونو استفاده کردم و با کدهای IF , While هم که امتحان کردم جواب نداد برای حالت دومش و نمی دونم چطور باید این رو ایجاد کرد کسی اطلاعی داره یا می تونه راهنمایی کنه ؟ چون داخل تابع وقفه دیگر توابع مربوط به تایمر جواب نمی ده مثل همین millis() . با یه همچین کدی براي تابع وقفه باز هم جواب نداد
    کد:
    void ButtonFun1() {
    //  read the state of the pushbutton value:
        Treshold=Treshold+4;
    //        buttonState[0] = digitalRead(interrupt_buttonPin);
    //        buttonState[1] = digitalRead(interrupt_buttonPin);
    //        if (buttonState[0] == HIGH && buttonState[1] == HIGH) {
    //          Treshold=Treshold-4;
    //        }
    //while (buttonState[0] == HIGH && buttonState[1] == HIGH) {
    //    Treshold=Treshold-4;
    //  }
    }

    با دو تا تابع وقفه جداي از هم كه با تاخير 1 ثانيه اي كار كنند هم جواب نداد طوري كه مثلا در اين 1 ثانيه كه كليد وصل است از شمارنده كم كند
    کد:
    attachInterrupt(digitalPinToInterrupt(int
    errupt_buttonPin), ButtonFun1 ,RISING); detachInterrupt(digitalPinToInterrupt(interrupt_buttonPin)); delay(1000); attachInterrupt(digitalPinToInterrupt(interrupt_buttonPin), ButtonFun2 ,RISING); detachInterrupt(digitalPinToInterrupt(interrupt_buttonPin)); کدهای بالا در Void Loop گذاشتم با توابع وقفه زیر : void ButtonFun1() { // read the state of the pushbutton value: Treshold=Treshold+4; } void ButtonFun2() { Treshold=Treshold-4; }
    ویرایش توسط mr.ansaripour : 09-08-2017 در ساعت 06:15 PM

  4. #4
    Member
    تاریخ عضویت
    Feb 2016
    نوشته ها
    55
    اینم کل کد برای اینکه شما هم امتحانش کنید :
    کد:
    const int interrupt_buttonPin = 3;
    volatile int buttonState[]= {0,0};         // variable for reading the pushbutton status
    int Treshold=40;
    
    void setup() {
      // put your setup code here, to run once:
      Serial.begin(115200);
      Serial.println("begining");
      // initialize digital pin 2 as an output for buzzer pushbutton pin as an input :
      pinMode(interrupt_buttonPin, INPUT);
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
     attachInterrupt(digitalPinToInterrupt(interrupt_buttonPin), ButtonFun1 ,RISING);
     detachInterrupt(digitalPinToInterrupt(interrupt_buttonPin));
     delay(1000);
     attachInterrupt(digitalPinToInterrupt(interrupt_buttonPin), ButtonFun2 ,RISING);
     detachInterrupt(digitalPinToInterrupt(interrupt_buttonPin));
    
     Serial.print("Treshold=");Serial.print(Treshold);Serial.print(" \t ");
     Serial.println();delay(1000);
    }
    
    void ButtonFun1() {
    //  read the state of the pushbutton value:
        Treshold=Treshold+4;
    //        buttonState[0] = digitalRead(interrupt_buttonPin);
    //        buttonState[1] = digitalRead(interrupt_buttonPin);
    //        if (buttonState[0] == HIGH && buttonState[1] == HIGH) {
    //          Treshold=Treshold-4;
    //        }
    while (buttonState[0] == HIGH && buttonState[1] == HIGH) {
        Treshold=Treshold-4;
      }
    }
    
    //void ButtonFun2() {
    //            Treshold=Treshold-4;
    //}

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

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

SEO by vBSEO