اطلاعیه

Collapse
No announcement yet.

اجرای برنامه های مختلف با کلید سوئیچ برنامه

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

    اجرای برنامه های مختلف با کلید سوئیچ برنامه

    سلام
    دارم یک برد آمپر متر با ماژول ACS712 -30A میسازم ( با آردوینو uno )
    این ماژول هم جریان DC و هم جریان AC رو اندازه گیری میکنه
    البته برنامه اندازه گیری جریان DC با اندازه گیری جریان AC متفاوته و بصورت عادی من با اپلود کردن هر کدوم از برنامه ها میتونم اونو اجرا کنم
    برنامه جریان ac

    برنامه جریان DC
    آموزش ماژول اندازه‌ گری جریان DC ACS712 با استفاده از آردوینو ماژول اندازه گیری جریان AC DC آموزش آردوینو arduino Arduino uno سنسور جریان acs712


    میخوام یک کلید دو حالته اضافه کنم و هر موقع پایه 6 low شد برنامه dc رو اجرا و هر موقع پایه 7 low شد برنامه AC رو اجرا کنه
    به چه صورت باید این دو برنامه رو در یک برنامه قرار بدهم ؟
    من برنامه رو به صورت پایین نوشتم آیا درسته ؟
    کد:
           #include "SevenSegmentTM1637.h"
    
    
    
    
    
    
    
    const byte PIN_CLK = 4;   // define CLK pin (any digital pin)
    const byte PIN_DIO = 5;   // define DIO pin (any digital pin)
    SevenSegmentTM1637    display(PIN_CLK, PIN_DIO);
    
    
    
    
    const byte analogIn = A0;
    byte mVperAmp = 66; // use 100 for 20A Module and 66 for 30A Module
    int RawValue = 0;
    double Voltage = 0;
    double Amps = 0;
    byte button6State = 0;
    byte button7State = 0;
    double VRMS = 0;
    double AmpsRMS = 0;
    double VRMS = 0;
    double AmpsRMS = 0;
    
    
    void setup() {
       pinMode(6, INPUT);
       digitalWrite(6, HIGH);
        pinMode(7, INPUT);
        digitalWrite(7, HIGH);
    display.begin(); 
    display.setBacklight(100);
    display.print("1234");
    delay(500);
    
    
    
    
    }
    void loop()
    button6State = digitalRead(6);
    button7State = digitalRead(7);
     if (button6State == LOW) { 
      DCamp(); 
     }
      if ( button7State == LOW){
        ACamp();
      }
    
    
    void DCamp() {
      RawValue = analogRead(analogIn);
      Voltage = (RawValue / 1024.0) * 5000; // Gets you mV
      Amps = ((Voltage - 2500) / mVperAmp);
    display.print(Amps,2);
    delay(1000);
    loop()
    break;
    }
    void ACamp()
    {
     
     
     
      Voltage = getVPP();
      VRMS = (Voltage / 2.0) *0.707;
      AmpsRMS = (VRMS * 1000) / mVperAmp;
    display.print(AmpsRMS,2);
    
    
     
    }
     
    float getVPP()
    {
      float result;
     
      int readValue;             //value read from the sensor
      int maxValue = 0;          // store max value here
      int minValue = 1023;          // store min value here
     
      uint32_t start_time = millis();
      while ((millis() - start_time) < 1000) //sample for 1 Sec
      {
        readValue = analogRead(sensorIn);
        // see if you have a new maxValue
        if (readValue > maxValue)
        {
          /*record the maximum sensor value*/
          maxValue = readValue;
        }
        if (readValue < minValue)
        {
          /*record the maximum sensor value*/
          minValue = readValue;
        }
      }
     
      // Subtract min from max
      result = ((maxValue - minValue) * 5.0) / 1023 .0;
     
      return result;
    }
    دلیل: ادغام دو پست برای جلوگیری از اسپم

    و یک موضوع دیگر اینکه من از ماژول سون سگمنت 4 تایی استفاده میکنم و میخوام با 2 رقم اعشار بهم نشون بده
    این مشکل رو تجربه کردم
    یا اینکه از نزدیک دیدم و دارم نظر میدم
    بعضی ها به اشتباه فکر میکنن من تعمیر کارم و دارم راه حل میگم

    #2
    پاسخ : اجرای برنامه های مختلف با کلید سوئیچ برنامه

    سلام
    بهتره بجای اینکه از دو تا پایه استفاده کنی از یک پایه استفاده کنی به این صورت که اگر صفر بود یکی از روش ها و اگر یک بود روش دیگه رو به کار بگیره.
    به هر حال در برنامه ی فعلی شما تایع setup مشکل داره که باید به صورت زیر باشه:

    کد:
    void setup() {
       pinMode(6, INPUT_PULLUP);
        pinMode(7, INPUT_PULLUP);
    display.begin(); 
    display.setBacklight(100);
    display.print("1234");
    delay(500);
    }

    دیدگاه


      #3
      پاسخ : اجرای برنامه های مختلف با کلید سوئیچ برنامه

      نوشته اصلی توسط daryooosh نمایش پست ها
      به هر حال در برنامه ی فعلی شما تایع setup مشکل داره که باید به صورت زیر باشه:
      ممنون بابت پاسخ
      در نوشتن void ها اشتباهی صورت نگرفته ؟
      میخوام این روش که چندین void رو بکار میبرم رو یاد بگیرم و از این برای پروژه بعدی که چیزی شبیه مولتی متر هست بکار ببرم و با یک سوِئیچ 8 حالته برنامه های مختلف رو اجرا کنم
      این مشکل رو تجربه کردم
      یا اینکه از نزدیک دیدم و دارم نظر میدم
      بعضی ها به اشتباه فکر میکنن من تعمیر کارم و دارم راه حل میگم

      دیدگاه


        #4
        پاسخ : اجرای برنامه های مختلف با کلید سوئیچ برنامه

        نوشته اصلی توسط maziar ashouri نمایش پست ها
        در نوشتن void ها اشتباهی صورت نگرفته ؟
        میخوام این روش که چندین void رو بکار میبرم رو یاد بگیرم و از این برای پروژه بعدی که چیزی شبیه مولتی متر هست بکار ببرم و با یک سوِئیچ 8 حالته برنامه های مختلف رو اجرا کنم
        با عرض معذرت اصلا منظورتون رو متوجه نشدم، لطفا واضح و کاملتر سوالتون رو مطرح کنید.
        ممنون

        دیدگاه


          #5
          پاسخ : اجرای برنامه های مختلف با کلید سوئیچ برنامه

          نوشته اصلی توسط daryooosh نمایش پست ها
          با عرض معذرت اصلا منظورتون رو متوجه نشدم، لطفا واضح و کاملتر سوالتون رو مطرح کنید.
          ممنون
          از void ها به طرز درستی استفاده کرده ام ؟
          برای call کردن و خارج شدن از وید ها منظورم هست
          این مشکل رو تجربه کردم
          یا اینکه از نزدیک دیدم و دارم نظر میدم
          بعضی ها به اشتباه فکر میکنن من تعمیر کارم و دارم راه حل میگم

          دیدگاه


            #6
            پاسخ : اجرای برنامه های مختلف با کلید سوئیچ برنامه

            شاید بهتر باشه از switch case استفاده کنید .

            دیدگاه


              #7
              پاسخ : اجرای برنامه های مختلف با کلید سوئیچ برنامه

              نوشته اصلی توسط maziar ashouri نمایش پست ها
              از void ها به طرز درستی استفاده کرده ام ؟
              برای call کردن و خارج شدن از وید ها منظورم هست
              سلام
              اگه درست متوجه شدم منظور شما تابع ها بود. به دلیل اینکه مبحث تابع ها طولانی هست، پیشنهاد میکنم فصل چهارم کتاب آموزش c نوشته ی آقای جعفر نژاد قمی رو مطالعه کنید جواب سوالتون رو پیدا میکنید.

              دیدگاه


                #8
                پاسخ : اجرای برنامه های مختلف با کلید سوئیچ برنامه

                اون تابع ها که با کلمه void شروع میشه چند مدل هستند
                اگر کلمه void را بزارید که بصورت پیشگزیده در قسمت setup و loop هم که بدنه های اصلی هم بکار رفته یعنی هیچ ورودی و خروجی ندارند.
                مثلاً مینویسید void test{} این یک تابع است که داخلش چند فرمان میزارید مثلاً یک led را روشن کند وقرار نیست هیچ چیزی مثلاً متغیری ورودی داشته باشه یا خروجی بده.مدل دیگر بجای کلمه void یک نام بکار میبرید و نوع ورودی را مشخص میکنید مثلاً mypro(int vari){} اینطوری با دستور call mypro(10) اون رو فرخوانی میکنید و یکعدد از نوع int بهش میدید که اینجا مثلاً 10 هست.میشه رشته یا float یا bool یا هر مدلی باشه و نوعش رو در ورودی باید مشخص کنید که اینجا int هست و در بدنه اون تابع با اون ورودی هر کاردلخواه انجام میشه.یک مدل هم هست که خروجی دارد.حال میتواند مانند مثال قبلی ورودی هم داشته باشد میتواند نداشته باشد که با فرمان return در بدنه اون تابع اون مقدار را به قسمت فراخوانی تابع برمیگردونید که نوعش هم دلخواه ومانند قبلی int,bool,... میتونه باشه.بصورت خلاصه بود.

                دیدگاه

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