نمایش نتایج: از 1 به 10 از 23
Like Tree4 لایک

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

Hybrid View

  1. #1
    مدیر گروه
    تاریخ عضویت
    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);
    
    
    }
    لایک کردن

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

  3. #3
    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 در ساعت 12:01 PM

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



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

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

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

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

    کافیه شما توی loo تون تابعی داشته باشید که دائم وضعیت یه پن دیجیتال رو چک کنه و به ازای هر بار فشار داده شدن یه متغیر رو ++ کنه

    حالا هر بار که اینتراپت خورد بیاد مقدار این متغیر رو نشون بده

  7. #7
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    86
    خب من میخوام از امکانات اردوینو استفاده کنم و با تایمر این برنامه رو بنویسم ببنید من بذنامه ریر رو نوشتم ولی وقتی که tm =tm*1000*60 میکنم (1000 تبدیل ثانیه به میلی ،60 تبدیل دقیقه به ثانیه) برنامه به زیر برنامه
    resultTap
    نمیره ولی اگه همین اعداد بشه tm=tm*60*100دقیقا راس 6 ثانیه (اگه tm =1)میره زیر برنامه مشکل از کجاس


    #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(){
    while(1){

    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);
    }

    البته من این برنامه رو روی ال سی دی کاراکتری نوشتم و الان اینجا یکم به مشکل برمیخوذید اما برام این مهمه که بعد مثلا یک دقیقه زیربرنامه اجرا که نمیشه البته همونطوذ که بالا گفتم وقتی عدد 1000 میشه 100 برنامه درس اجرا میشه
    ویرایش توسط ANOOSHEH : 07-13-2016 در ساعت 01:25 PM

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

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

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

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

    کافیه یه flag تعریف کنی به ازای فشار دادن اول flag بشه 1
    به ازای فشار دادن دوم flag بشه 0 دوباره

    کارش نسبت به اینتراپت بهتره و دردسر و تداخل های اینتراپت رو هم نداره

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

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

SEO by vBSEO