صفحه 1 از 2 12 آخرینآخرین
نمایش نتایج: از 1 به 10 از 23
Like Tree4 لایک

موضوع: استفاده از تایمر

Hybrid View

  1. #1
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    86

    استفاده از تایمر

    ببخشید من کد زیر رو نوشتم ایرادش چیه که تو زمان مشخص شده زیر برنامه
    result اجرا نمیشه


    [
    LEFT]#include <Event.h>
    #include <Timer.h>
    Timer t;

    void setup(){
    int tm;
    pinMode(13,OUTPUT);}

    void loop
    (){
    t.update();
    t.every(tm,result);
    }

    void result (){
    digitalWrite (13,HIGH);
    }

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

    کد نویسی ای که انجام دادید اشتباهه
    1. اینکه هیچ نیازی نبود که کتابخونه event رو صدا بزنید
    2.متد every باید توی تابع Setup نوشته بشه نه loop
    3. متد every توی آرگومان اولش باید زمانی رو بگیره که یه تابعی باید تکرار بشه بنابراین شما باید به متغیر tm مقدار بدید و اونو گلوبال هم تعریف کنید نه توی تابع setup
    کد مطلوب شما:
    کد:
    
    #include <Timer.h>
    Timer t;
    int tm = 1000;
    
    
    void setup() {
      pinMode(13, OUTPUT);
      t.every(tm, result);
    }
    
    
    void loop() {
      t.update();
    
    
    }
    
    
    void result () {
      digitalWrite (13, HIGH);
      delay(100);
       digitalWrite (13, LOW);
    
    
    }
    لایک کردن

  3. #3
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    86
    ولی برنامه من اینطوریکه تو ی ستاپ و لوپ برنامه ی دیگه ای نوشته میشه و توی یکی از زیر یرنامه ها تابع تایمر فراخوانی و اجرا میشه ینی من میخام از یه مرحله ای به بعد t.every اجرا بشه اما وقتی تو ستاپ بنویسم همون اول اجرا میشه که من نمیخام در ضمن tm هم در برنامه من متغییر هستش و تو ی یکی از زیر برنامه ها تعیین میشه
    ویرایش توسط ANOOSHEH : 07-09-2016 در ساعت 10:27 AM

  4. #4
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    86
    من همین مشکلو با اینتراپت هم دارم میخام شماره پین تو وسط برنامه تغییر کنه اما اینتراپت اجرا نمیشه کدمم اینه
    int key,a=0;

    void setup() {
    pinMode(16,INPUT);
    pinMode(22,INPUT);
    pinMode(23,INPUT);
    attachInterrupt(key,result,FALLING);
    Serial.begin(9600);
    Serial.print("choose one key");

    }


    void loop() {
    if ( digitalRead(16)==LOW){
    key=16;
    Serial.print("you choose 16");
    }
    if (digitalRead(22)==LOW){
    key=22;
    Serial.print("you choose 22");

    }
    if ( digitalRead(23)==LOW){
    key=23;
    Serial.print("you choose 23");

    }
    if (key!=0){
    Serial.print("hooora");

    timer();}

    }

    void timer(){
    Serial.print("timer");
    while(1){
    a=micros();
    };

    }
    void result () {
    Serial.println("time in micros: ");
    Serial.print(a);
    key=0;
    }

    البته به جای key = 16برای مثال
    #define key 16
    هم گذاشتم باز اینتراپت اچرا نمیشه
    ویرایش توسط ANOOSHEH : 07-09-2016 در ساعت 01:01 PM

  5. #5
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط ANOOSHEH نمایش پست ها
    من همین مشکلو با اینتراپت هم دارم میخام شماره پین تو وسط برنامه تغییر کنه اما اینتراپت اجرا نمیشه کدمم اینه



    البته به جای key = 16برای مثال
    #define key 16
    هم گذاشتم باز اینتراپت اچرا نمیشه
    به کدتون دقت کنید:
    شما فقط توی تابع ستاپ زمانی که key صفره دارید attachInterrupt رو صدا می زنید.
    در صورتی که میخواید روی تمام پینهایی که صدا زدید اینتراپت داشته باشید باید تابع attachInterrupt رو هر بار که میرید تو if صدا بزنیدو بهش مقدار بدید.

    آیا هدفتون اینه که روی تمام پینها اینتراپت داشته باشید یا فقط پین 2

  6. #6
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    86
    ببینید من دو کار میخوام امجام بدم یکی توی یک مدت زمان متغییر (ینی خودمون مدت زمانشو مشخص کنیم ) یک کار انجام بشه (مثلن شمردن کلید فشار داده شده ) و وقتی اون مدت زمان تموم شد نتیجه (تعداد کلید فشرده شده ) رو نمایش بده ( در ضمن این کار ممکنه چن بار انجام بشه ینی باید تایمر متوقف و صفر و دوباره مقدار دهی بشه )این کارو میخامبا تایمر انجام بدم و همونطور که گفتم این برنامه یکی از زیر برنامه های من هست و من نمیتونم توی ستاپ یا لوپ تایمر رو راه اندازی کنم
    کار دوم یا زیر برنامه دیگه رو که با اینتراپته بعدن میپرسم
    ویرایش توسط ANOOSHEH : 07-12-2016 در ساعت 10:27 AM

  7. #7
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    86
    نقل قول نوشته اصلی توسط magmagmary نمایش پست ها
    به کدتون دقت کنید:
    شما فقط توی تابع ستاپ زمانی که key صفره دارید attachInterrupt رو صدا می زنید.
    در صورتی که میخواید روی تمام پینهایی که صدا زدید اینتراپت داشته باشید باید تابع attachInterrupt رو هر بار که میرید تو if صدا بزنیدو بهش مقدار بدید.

    آیا هدفتون اینه که روی تمام پینها اینتراپت داشته باشید یا فقط پین 2

    اما سوال دومم ببینید من میخوام روی یکی از کلیدها طی برقراری یک شرط اینتراپت داشته باشم برنامه دقیق اینه که با انتخاب یک کلید زمان شروع به شمارش کنه و با فشردن دوباره همون کلید زمان شمرده شده که به میکروثانیه هستش به نمایش دراد

  8. #8
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    کدی که باید تست کنی اینه :
    کد:
    #include <Bounce2.h>
    #include <Timer.h>
    
    
    int tm, i, z;
    int buttonPushCounter = 0; // counter for the number of button presses
    int buttonState = 0; // current state of the button
    int lastButtonState = 0;
    const int buttonPin = 16; // previous state of the button
    Timer t;
    Bounce debouncer = Bounce();
    
    
    void setup() {
      pinMode(22, INPUT); //define pinMode
      pinMode(23, INPUT);
      pinMode(16, INPUT);
      debouncer.attach(16);
      debouncer.interval(5);
    
    
      Serial.begin(9600);
      delay(2000);
      tm = 0;
    
    
    }
    void loop() {
    
    
      Serial.print("press9 up,10 down");
    
    
      Serial.print(tm);
      delay (1000);
      if (digitalRead(22) == LOW) {
        tm++;
        while (digitalRead(22) == HIGH);
    
    
        Serial.println(tm);
    
    
      }
      if (digitalRead(23) == LOW)
      { tm--;
        while (digitalRead(23) == HIGH);
    
    
        Serial.println(tm);
    
    
      }
      if (tm < 0) {
        tm = 0;
      }
      if (digitalRead( 16) == LOW) {
    
    
        Serial.print("you are ready...");
        delay(10);
        tm = tm * 60 * 1000;
        for (i = 3; i > 0; i--) {
    
    
          Seial.print(i);
          delay(1000);
        }
    
    
        while (1) {
    
    
          t.update();
          t.after(tm, resultTap);
          debouncer.update();
          // read the pushbutton input pin:
          buttonState = debouncer.read();
    
    
          Serial.print("number of button pushes: ");
    
    
          if (buttonState != lastButtonState) {
    
    
            if (buttonState == LOW) {
    
    
    
    
              buttonPushCounter++;
    
    
              Serial.println(buttonPushCounter);
            }
    
    
    
    
            delay(50);
          }
    
    
    
    
          lastButtonState = buttonState;
    
    
    
    
        }
    
    
    
    
      }
    
    
    
    
    }
    
    
    void resultTap() {
      t.stop(z);//timer stop
    
    
      Serial.print("number of result: ");//showing number of push
      Serial.println(buttonPushCounter);
      //delay(5000);
    }
    به یه چیز هم دقت کن
    خود تابع loop به صورت حلقه همیشگی تکرار میشه بنابراین while(1) اولیت اضافی بود

  9. #9
    Senior Member
    تاریخ عضویت
    Dec 2013
    محل سکونت
    ایران - شیراز
    نوشته ها
    220
    اینو همین الان نوشتم تست کن ببین به کارت میاد
    unsigned long timer;
    boolean count = false;
    boolean show = false;

    void setup() {
    pinMode(A0,INPUT);
    Serial.begin(115200);
    }

    void loop() {
    if (count == true){
    if(digitalRead(A0) == 1){count = false;show = false;delay(1000);timer = millis();}
    }
    if (count == false){
    if(digitalRead(A0) == 1){count = true;show = true;delay(1000);timer = millis();}
    }
    if (show == true){
    Serial.println(millis() - timer);
    delay(1);
    }
    }
    کد ها هم کمتر می شن هم بهینه می شن

  10. #10
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط solxsado نمایش پست ها
    اینو همین الان نوشتم تست کن ببین به کارت میاد

    کد ها هم کمتر می شن هم بهینه می شن
    کد رو تست نکردم ولی چون میکروثانیه میخواد به جای millis بایدmicros استفاده کنه
    https://www.arduino.cc/en/Reference/Micros

صفحه 1 از 2 12 آخرینآخرین

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

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

SEO by vBSEO