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

موضوع: درخواست کمک برای کد در آردیـــنو

Hybrid View

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

    مشکل در تنظیم سرعت موتور با استفاده از آردوینو (برنامه ساده است )

    سلام . من برنامه زیر رو نوشتم . این برنامه به صورت ریموت قراره سرعت موتور رو کنترل کنه . از گیرنده ریموت 4 تا سیگنال دیجیتال میاد و به صورت digitalRead دریافت میشه . key1_jelo و key2_aghab برای حرکت به جلو وعقب هستند . و key3_inc_speed و key4_dec_speed هم برای افزایش و کاهش سرعت هستند که روی PWM خروجی از پایه 5 (potout) تاثیر میذارن . مقدار اولیه PWM رو 160 تنظیم می کنم . حالا مشکل من اینه که وقتی که کلید key3_inc_speed رو فشار می دم ، اول کار تقریبا به صفر میرسه و بعد شروع به افزایش میکنه . . چرا به صفر میرسه ؟ . این تو برنامه من خیلی مشکل سازه . من نوشتم که potval به مقدار 5 تا اضافه بشه ، پس چرا اول به صفر میرسه ؟
    شدیدا به کمک یه آدم خبره نیاز دارم ، خودم خیلی روش کار کردم ، نمیتونم باگش پیدا کنم .
    int pot = 0;
    int potout = 5;
    int potval;
    int key1_jelo = 9;
    int key2_aghab= 10;
    int key3_inc_speed = 11;
    int key4_dec_speed= 12;
    int en1 = 3;
    int en2 = 4;

    void setup() {
    pinMode(potout , OUTPUT);
    pinMode(key1_jelo , INPUT);
    pinMode(key2_aghab , INPUT);
    pinMode(key3_inc_speed , INPUT);
    pinMode(key4_dec_speed , INPUT);
    pinMode(en1 , OUTPUT);
    pinMode(en2 , OUTPUT);
    int potval = 160;
    //setPwmFrequency(potout, 1);
    analogWrite(potout , potval );
    }

    void loop() {
    if (digitalRead(key1_jelo) == HIGH){
    digitalWrite(en2 , LOW);
    delay(300);
    digitalWrite(en1 , HIGH);
    }
    else if(digitalRead(key2_aghab) ==HIGH){
    digitalWrite(en1 , LOW);
    delay(300);
    digitalWrite(en2 , HIGH);
    }
    else{
    digitalWrite(en1 , LOW);
    digitalWrite(en2 ,LOW );
    }
    if (digitalRead(key3_inc_speed) == HIGH)
    {
    if (potval <230)
    {
    potval = potval+5;
    analogWrite(potout , potval );
    delay(100);
    }
    }
    else if(digitalRead(key4_dec_speed) == HIGH){
    if (potval >150){
    potval = potval-5;
    analogWrite(potout , potval );
    delay(100);
    }
    }
    }

  2. #2
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط 882743 نمایش پست ها
    سلام . من برنامه زیر رو نوشتم . این برنامه به صورت ریموت قراره سرعت موتور رو کنترل کنه . از گیرنده ریموت 4 تا سیگنال دیجیتال میاد و به صورت digitalRead دریافت میشه . key1_jelo و key2_aghab برای حرکت به جلو وعقب هستند . و key3_inc_speed و key4_dec_speed هم برای افزایش و کاهش سرعت هستند که روی PWM خروجی از پایه 5 (potout) تاثیر میذارن . مقدار اولیه PWM رو 160 تنظیم می کنم . حالا مشکل من اینه که وقتی که کلید key3_inc_speed رو فشار می دم ، اول کار تقریبا به صفر میرسه و بعد شروع به افزایش میکنه . . چرا به صفر میرسه ؟ . این تو برنامه من خیلی مشکل سازه . من نوشتم که potval به مقدار 5 تا اضافه بشه ، پس چرا اول به صفر میرسه ؟
    شدیدا به کمک یه آدم خبره نیاز دارم ، خودم خیلی روش کار کردم ، نمیتونم باگش پیدا کنم .
    int pot = 0;
    int potout = 5;
    int potval;
    int key1_jelo = 9;
    int key2_aghab= 10;
    int key3_inc_speed = 11;
    int key4_dec_speed= 12;
    int en1 = 3;
    int en2 = 4;

    void setup() {
    pinMode(potout , OUTPUT);
    pinMode(key1_jelo , INPUT);
    pinMode(key2_aghab , INPUT);
    pinMode(key3_inc_speed , INPUT);
    pinMode(key4_dec_speed , INPUT);
    pinMode(en1 , OUTPUT);
    pinMode(en2 , OUTPUT);
    int potval = 160;
    //setPwmFrequency(potout, 1);
    analogWrite(potout , potval );
    }

    void loop() {
    if (digitalRead(key1_jelo) == HIGH){
    digitalWrite(en2 , LOW);
    delay(300);
    digitalWrite(en1 , HIGH);
    }
    else if(digitalRead(key2_aghab) ==HIGH){
    digitalWrite(en1 , LOW);
    delay(300);
    digitalWrite(en2 , HIGH);
    }
    else{
    digitalWrite(en1 , LOW);
    digitalWrite(en2 ,LOW );
    }
    if (digitalRead(key3_inc_speed) == HIGH)
    {
    if (potval <230)
    {
    potval = potval+5;
    analogWrite(potout , potval );
    delay(100);
    }
    }
    else if(digitalRead(key4_dec_speed) == HIGH){
    if (potval >150){
    potval = potval-5;
    analogWrite(potout , potval );
    delay(100);
    }
    }
    }
    من با کدت اینطوری جواب میگیرم (اضافیاشو پاک کردم )
    کد:
    
    int pot = 0;
    int potout = 5;
    int potval=160;
    int key1_jelo = 9;
    int key2_aghab = 10;
    int key3_inc_speed = 11;
    int key4_dec_speed = 12;
    int en1 = 3;
    int en2 = 4;
    
    
    void setup() {
      pinMode(potout , OUTPUT);
      pinMode(key1_jelo , INPUT);
      pinMode(key2_aghab , INPUT);
      pinMode(key3_inc_speed , INPUT_PULLUP);
      pinMode(key4_dec_speed , INPUT);
      pinMode(en1 , OUTPUT);
      pinMode(en2 , OUTPUT);
      //setPwmFrequency(potout, 1);
      analogWrite(potout , potval );
      Serial.begin (9600);
    }
    
    
    void loop() {
     
      if (digitalRead(key3_inc_speed) == LOW)
      {
        delay(150);
        if (potval < 230)
        {
          potval = potval + 5;
          Serial.println(potval);
          analogWrite(potout , potval );
          delay(100);
        }
      }
    }

  3. #3
    Member
    تاریخ عضویت
    Nov 2015
    نوشته ها
    32
    با سلام ... بـــــله کد ایراداتی داشت از جمله اینکه چون از سایت کپی می کردم در آردینو، مقداری تغییر شکل می داد ... اونو اصلاح کردم ...
    و کد نیز ناقص بود که از نویسنده مطلب درخواست کد کامل را نمودم که برایم ارسال کردند ...
    پس از آن تنها مشکل در نمایش پارامترها بود که جای آنها اشتباه بود، آنها هم در ال سی دی 20*4 تنظیم نمودم و الان بدرستی کار می کنه!
    ممنون از راهنمایی دوستان،
    فقـــــط lcd 4*20 را کجا می تونم تهیه کنم؟ هیج جا پیدا نکردم!

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

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

SEO by vBSEO