اطلاعیه

Collapse
No announcement yet.

آموزش Arduino + برنامه چهاردهم (HC- 05)

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

    #31
    پاسخ : آموزش ARDUINO

    برنامه یازدهم :
    همینطور که پیش میریم با دستورها و ترفند های جدید آشنا میشیم پس خوبه که بتونیم برنامه هایی که با هم کار کردیم رو گاهی ادغام کنیم همونطور که قیلا هم انجام میدادیم . در برنامه قبل یاد گرفتیم که چطور 7segment رو راه اندازی کنیم و به صورت خودکار از 0 تا 9 بشمره ، در برنامه جدید ما از Push Button استفاده می کنیم تا با فشر دادن هر بار ارقام 0 تا 9 رو روی 7segment نمایش بده . شکل مدا به اینصورت است



    [code=c]byte seven_seg_digits[10][7] = {
    //A,B,C,D,E,F,G
    { 1,1,1,1,1,1,0 }, // = 0
    { 0,1,1,0,0,0,0 }, // = 1
    { 1,1,0,1,1,0,1 }, // = 2
    { 1,1,1,1,0,0,1 }, // = 3
    { 0,1,1,0,0,1,1 }, // = 4
    { 1,0,1,1,0,1,1 }, // = 5
    { 1,0,1,1,1,1,1 }, // = 6
    { 1,1,1,0,0,0,0 }, // = 7
    { 1,1,1,1,1,1,1 }, // = 8
    { 1,1,1,1,0,1,1 } // = 9
    };
    byte Button=9;

    void setup() {
    for(byte i=2 ; i<9 ; ++i){
    pinMode(i,OUTPUT);
    }
    }

    byte Count=0;
    void loop() {
    if(digitalRead(Button)==HIGH){
    delay(200);
    ++Count;
    sevenSegWrite(Count -1);
    if(Count==10){
    Count=0;
    }
    }
    }
    void sevenSegWrite(byte digit) {
    byte pin = 2;
    for (byte segCount = 0; segCount < 7; ++segCount) {
    digitalWrite(pin, seven_seg_digits[digit][segCount]);
    ++pin;
    }
    }


    [/code]

    توضیحات :
    قرار شده توضیح ندم دیگه :biggrin:
    چشم ها را باید شست ، جور دیگر باید دید . . .

    دیدگاه


      #32
      پاسخ : آموزش Arduino

      برنامه دوازدهم :
      در این برنامه قصد داریم تا قطعاتی که از جلوی سنسور مادون قرمز عبور می کنند را شمارش کنیم . مداری به صورت زیر ببندید . (در پروتئوس قابل اجرا نیست ).


      [code=c]byte IR=3;
      void setup() {
      Serial.begin(9600);
      pinMode(IR,INPUT);
      }
      byte Count=0;
      void loop() {
      byte State=digitalRead(IR);
      if (State==HIGH){
      delay(200);
      ++Count;
      Serial.print("Count="
      Serial.println(Count);
      }
      while(State==HIGH){
      State=digitalRead(IR);
      }
      }[/code]
      چشم ها را باید شست ، جور دیگر باید دید . . .

      دیدگاه


        #33
        پاسخ : آموزش Arduino

        این برنامه رو شما فکر کنید کار در کلاسه . با استفاده از قانون تقسیم ولتاژ ، ولتاژ 0 تا 10 ولت را می خواهیم اندازه بگیریم . ابتدا مدری به صورت زیر ببندید و سپس چند خط کوتاه کد نویسی انجام دهید


        [code=c]float V_in=A0;
        void setup() {
        Serial.begin(9600);
        pinMode(V_in,INPUT);

        }

        void loop() {
        float Volt=analogRead(V_in);
        Volt/=204.6;
        Volt*=2;
        Serial.print(Volt);
        Serial.println(" V"

        }[/code]
        چشم ها را باید شست ، جور دیگر باید دید . . .

        دیدگاه


          #34
          پاسخ : آموزش Arduino

          برنامه سیزدهم :
          راه اندازی Keypad با استفاده از کتابخانه (فایل کتابخانه ای که با ورژن های بالا جواب بده رو از اینجا https://cld.persiangig.com/download/.../Keypad.zip/dl دانلود کنید و به کتابخانه اضافه کنید ) . با این کتابخانه راحتر از اون چیزی که فکر کنید Keypad رو راه اندازی می کنید . مدار رو به صورت زیر ببندید



          [code=c]#include <Keypad.h>

          const byte ROWS = 4;
          const byte COLS = 3;
          char keys[ROWS][COLS] = {
          {'1','2','3'},
          {'4','5','6'},
          {'7','8','9'},
          {'#','0','*'}
          };
          byte rowPins[ROWS] = {7, 2, 3, 6};
          byte colPins[COLS] = {5, 8, 4};

          Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

          void setup(){
          Serial.begin(9600);
          }

          void loop(){
          char key = keypad.getKey();

          if (key != NO_KEY){
          Serial.println(key);
          }
          }[/code]

          توضیحات :
          در خط اول فایل کتابخانه رو اضافه می کنیم . در خط 3 و 4 مشخص می کنیم Key pad چند در چند استفاده می کنیم . در خط 5 آرایه ای تعریف می کنیم تا علائم روی Key pad رو مشخص کنه (حروف و اعداد و ... ) . در خط 11 و 12 پین های به کار رفته برای Key pad رو مشخص می کنیم .خط 14 برای پیکر بندی نهایی Key pad با توجه به اطلاعاتی که قبلا وارد کردیم استفاده میشه
          Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
          همونطور که مشاهده می کنید خطوط قرمز رنگ ثابت و باقی متغییرهای با توجه به نام گذاری های صورت گرفته انجام میشود .( اطلاعاتی که در خطوط قبل انجام داده ایم )
          در خط 21 ما کلیدی را که فشار داده ایم دریافت می کنیم . در خط 23 تا 25 ما شرطی قرار داده ایم تا اگر کلیدی فشار داده نشد چیزی نمایش داده نشود (=! علامت مخالف)
          چشم ها را باید شست ، جور دیگر باید دید . . .

          دیدگاه


            #35
            پاسخ : آموزش ARDUINO

            نوشته اصلی توسط hassantorabi
            سلام
            اگر فقط قصد دارید که با هر بار فشار دادن Button یک واحد به متغییر اضافه کنید اصلا نیازی به دستور While نیست ، پس While رو حذف کنید و یک تاخیر هم در برنامه ایجاد کنید حله . حالا چرا While استفاده کردید ؟؟؟؟ :eek: (حلقه بی نهایت)

            [code=c]const int buttonPin = 2;
            int counter = 0;
            void setup() {
            pinMode(buttonPin, INPUT);
            Serial.begin(9600);
            }
            void loop() {
            int reading = digitalRead(buttonPin);
            if(reading==HIGH){
            counter++;
            Serial.print("Button pressed "
            Serial.print(counter);
            Serial.println(" times"
            delay(200);
            }
            }[/code]
            البته اگه کلید دایما وصل باشه پس از تاخیر دوباره به خط conter++ میرسید و دوباره شمارندتون کنتور میندازه برای حل این مشکل تعریف کنید چنانچه کلید فشرده شد و متغیر counter اضافه شد یک حافظه بیت فلگ صفر شود و اگر کلید دوباره صفر شد حافظه بیت فلگ یک شود تا در سیکلهای بعدی اگر فلگ یک بود عمل شمارش انجام شود واقعا ممنون از این تاپیک من با مطالعه این تاپیک به اصول کار اردینو پی بردم

            دیدگاه


              #36
              پاسخ : آموزش ARDUINO

              نوشته اصلی توسط hassantorabi
              پس بهتره اینجوری بگم که هر متغییر که توی برنامه تعریف می کنیم توی حافظه موقت قرار میگیره اینو که قبول دارید ؟ اینم باید بدونید که برنامه موقع اجرا از خط اول شروع به خواندن میکنه تا به آخرین کد برسه . تا اینجا باید گرفته باشید چی میشه ولی چون شاید براتون باز سوال بشه تا انتها ی برنامه پیش میریم . وقتی ما توی خط هشتم دستور میدیم که مقدار متغییر reading رو برابر مقدار خوانده شده از پین قرار بده این مقدار توی حافظه ذخیره میشه ، برنامه خط به خط اجرا میشه تا به دستور While میرسه شرط رو بررسی میکنه چون شرط درسته وارد حلقه میشه ، وقتی به انتهای حلقه میرسه دوباره برمیگرده تا شرط رو بررسی کنه متغییر توی حافظه ذخیره شده پس شرط هم صدق میکنه توی این فاصله شما دستتون رو هم برداشته باشید ولی دیگه برنامه که به اول خط نرفته تا مقدار جدید متغییر رو ذخیره کنه بنابراین مقدار متغییر همونی هست که برای اولین بار ذخیره شده . پس ما باید توی حلقه باز بگیم که مقدار متغییر در طول برنامه چی میشه تا برنامه درست اجرا بشه ، پس داخل حلقه While باز دستور خواندن از پین رو مینویسیم . خسته شدیم از بس نوشتیم ایشالا که گرفته باشی
              برای کسانیکه زیاد تا حالا برنامه نویسی نکرده اند من توصیه می کنم از دیباگر استفاده کنند تا بتونند خط به خط برنامه رو جلو ببرند و تغییرات متغیر هارو ببینند اینجوری قدرت تحلیلشون هم بالا میره

              دیدگاه


                #37
                پاسخ : آموزش Arduino + برنامه سیزدهم (Keypad)

                نوشته اصلی توسط hassantorabi
                با سلام خدمت همه دوستان
                به خاطر اینکه خیلی از بچه ها (البته شما مردان بزرگی هستید ) با بردهای Arduino آشنایی ندارند و با طرز کار و برنامه نویسی اون مشکل دارند سعی کردم تا از مباحث مقدماتی شروع به آموزش کنم و با ساده ترین مثال برنامه نویسی که بچه های کامپیوتر بهش میگن Hello World اما برقی ها فکر کنم به ساده ترین برنامشون LED ON/OFF بگن شروع میکنیم تا اگه دوستان راغب به ادامه بودند تا سطوح بالا پیش بریم . پس خواهشی که از دوستان و مهندسین و اساتید عزیز دارم اینه که مباحثی رو که توی آموزش هنوز عنوان نشده رو نپرسن (جلوتر از آموزش سوالی نپرسن ) چون قراره قدم به قدم پیش بریم تا دچار سردرگمی دیگران نشه و سعی کنند سوالات متفرقه توی پست های دیگه عنوان بشن . و مطلب بعدی اینکه سعی می کنم دستورات رو با نوشتن برنامه توضیح بدم و دوستان هم با توجه به دستورات گفته شده برنامه هایی که نوشتن رو برای سایرین قرار بدن :read:

                اضافه شده در تاریخ :
                چون قراره که برنامه ها رو توی پروتئوس هم شبیه سازی کنیم بهتره دوستان کتابخانه Arduino رو از لینک زیر دانلود و نصب کنند .
                http://freeupload.ir/gucbfjgty08s/Pr...brary.rar.html
                سلام من پروتیوس 8.1 دارم این 2 ال فایل رو توی پوشه library کپی کردم اما کتابخونه کار نمیکنه چکار کنم؟؟؟

                دیدگاه


                  #38
                  پاسخ : آموزش Arduino + برنامه سیزدهم (Keypad)

                  سلام
                  پروتئوس 8 به بالا هنوز داری مشکلاتی هستند به دلیل کرک شدن نرم افزار ولی باز هم شما اگه توی این مسیر کپی کرده باشید باید کار کنه
                  C:\ProgramData\Labcenter Electronics\Proteus 8 Professional\Data\LIBRARY
                  من خودم 8.1 داشتم ولی خیلی از مواقع اذیت میکرد به خاطر همین باز به ورژن 7.9 برگشتم
                  چشم ها را باید شست ، جور دیگر باید دید . . .

                  دیدگاه


                    #39
                    پاسخ : آموزش ARDUINO

                    نوشته اصلی توسط hassantorabi
                    برنامه سوم :
                    اول مداری به شکل زیر روی برد برد ببندید



                    توی این برنامه قصد داریم تا با PWM آشنا بشیم و نور یک LED رو با دو Push Btton به صورت دیمر کنترل کنیم . پس بیاید دست به کار بشیم . این برنامه رو بنویسید و روی برد آردوینو پلود کنید . بعد در عمل تغییرات رو مشاهده کنید .
                    [code=c]const int pinDown=2;
                    const int pinUp=4;
                    const int pinLed=3;
                    void setup() {
                    pinMode(pinDown,INPUT);
                    pinMode(pinUp,INPUT);
                    digitalWrite(pinDown,HIGH);
                    digitalWrite(pinUp,HIGH);
                    pinMode(pinLed,OUTPUT);
                    }
                    int ledBrightness=255;
                    void loop() {
                    if (digitalRead(pinDown)==LOW ){
                    ledBrightness--;
                    if (ledBrightness<0){
                    ledBrightness=0;
                    }
                    }
                    else if (digitalRead(pinUp)==LOW){
                    ledBrightness++;
                    if (ledBrightness>255){
                    ledBrightness=255;
                    }
                    }
                    analogWrite(pinLed,ledBrightness);
                    delay(20);
                    }[/code]
                    توضیحات :
                    اول اینکه برای استفاده از پین آردوینو به عنوان PWM شما فقط قادرید از پین هایی که در کنار اون علامت "~" قرارداره استفاده کنید ( پایه های 3,5,6,9,10,11) به این پایه ها مقادیر 0 تا 255 رو میتوان داد . برای این کار شما باید از دستور[code=c]analogWrite(pin,Value);[/code] استفاده کنید . در برنامه از IF های تودرتو استفاده کردیم . پس پین ها رو پیکر بندی کردیم بعد متغیری برای تعیین مقدار اولیه PWM قرار دادیم . و توسط IF های تودرتو مقدار PWM رو بین 0 و 255 نگه داشتیم . البته برنامه واضح و گویا هست . من زیاد حرف نمیزنم .
                    سوال :
                    چطور میتوان افکت Fade (کم نور و پر نور شدن) به صورت خودکار و بدون نیاز به Push Btton انجام داد ؟
                    سلام من با نصب پروتیوس 8.1 و اپدیت لایبرری حالا اردینو هم دارم فقط توی شبیه سازی برنامه ساده PWM پین 3 و 5 رو اگه به عنوان خروجی انتخاب کنم مقدار خروجی به صورت دیجیتال یعنی فقط صفر یا فقط یک کار میکنه وقتی با کلید PWM به 255 رسید پین روشن میشه اگه کمتر بود پین صفر میشه اما اگه پایه خروجی رو 9 انتخاب کنم مشکل حل میشه و پروتیوس تو خروجی به من PWM مشکل ازکجاست؟؟ایا این به خاطر رزولوشن پایینتر در PWM پایه های 3و 5 یا مشکل از پروتیوس یا اردینو 1.6 :cry: :angry: :cry2:

                    دیدگاه


                      #40
                      پاسخ : آموزش Arduino + برنامه سیزدهم (Keypad)

                      سلام
                      اول اینکه زیاد جالب توضیح ندادید ، در کل شما اگر پین هایی که دارای علامت (~) هستند رو به عنوان خروجی تعریف کنید میشه به عنوان PWM استفاده کرد . اگر این کار رو انجام دادید پس به احتمال قوی توی قسمت پروتئوس مشکل دارید ( تنظیمات اوسیلوسکوپ ) . ولی همیشه سعی کنید که مدارهای ساده رو به صورت عملی تست کنید . الان چون ویتدوزم رو تازه عوض کردم کمک زیادی نمیتونم بکنم چون هیچ نرم افزاری رو نصب ندارم .
                      چشم ها را باید شست ، جور دیگر باید دید . . .

                      دیدگاه


                        #41
                        پاسخ : آموزش Arduino + برنامه سیزدهم (Keypad)

                        سلام من میخام داده های یک سنسور پیزو رو که لرزش موتور ماشین لباسشویی رو ثبت میکنه به صورت ارایه های 1000 تایی از طریق سنسور پیزو اردینو و ماژول وایفای به لپتاپ انتقال بدم ممنون میشم اگه یک آموزش در این مورد بگذارید

                        دیدگاه


                          #42
                          پاسخ : آموزش Arduino +برنامه Key-pad بدون استفاده از کتابخانه

                          سلام
                          توی یکی از سایت های خارجی کد جالبی برای راه اندازی Key-pad بدون استفاده از کتابخانه نوشته بودند . من که خیلی لذت بردم . حیفم اومد اینجا نذارم . کد نویسی روان ، جالب و قابل فهمی هستش . به نظرم برای کسانی که دوست دارن کد نویسیشون قوی بشه جالب باشه .تصویر زیر مدار رو نشون میده که باید Key-pad به اینصورت بسته بشه


                          اینم کد
                          [code=c]/*
                          Keypad sketch
                          prints the key pressed on a keypad to the serial port
                          */
                          const int numRows = 4; // number of rows in the keypad
                          const int numCols = 3; // number of columns
                          const int debounceTime = 20; // number of milliseconds for switch to be stable
                          // keymap defines the character returned when the corresponding key is pressed
                          const char keymap[numRows][numCols] = {
                          { '1', '2', '3' } ,
                          { '4', '5', '6' } ,
                          { '7', '8', '9' } ,
                          { '*', '0', '#' }
                          };
                          // this array determines the pins used for rows and columns
                          const int rowPins[numRows] = { 7, 2, 3, 6 }; // Rows 0 through 3
                          const int colPins[numCols] = { 5, 8, 4 }; // Columns 0 through 2
                          void setup()
                          {
                          Serial.begin(9600);
                          for (int row = 0; row < numRows; row++)
                          {
                          pinMode(rowPins[row],INPUT); // Set row pins as input
                          digitalWrite(rowPins[row],HIGH); // turn on Pull-ups
                          }
                          for (int column = 0; column < numCols; column++)
                          {
                          pinMode(colPins[column],OUTPUT); // Set column pins as outputs
                          // for writing
                          digitalWrite(colPins[column],HIGH); // Make all columns inactive
                          }
                          }
                          void loop()
                          {
                          char key = getKey();
                          if( key != 0) { // if the character is not 0 then
                          // it's a valid key press
                          Serial.print("Got key "
                          Serial.println(key);
                          }
                          }
                          // returns with the key pressed, or 0 if no key is pressed
                          char getKey()
                          {
                          char key = 0; // 0 indicates no key pressed
                          for(int column = 0; column < numCols; column++)
                          {
                          digitalWrite(colPins[column],LOW); // Activate the current column.
                          for(int row = 0; row < numRows; row++) // Scan all rows for
                          // a key press.
                          {
                          if(digitalRead(rowPins[row]) == LOW) // Is a key pressed?
                          {
                          delay(debounceTime); // debounce
                          while(digitalRead(rowPins[row]) == LOW)
                          ; // wait for key to be released
                          key = keymap[row][column]; // Remember which key
                          // was pressed.
                          }
                          }
                          digitalWrite(colPins[column],HIGH); // De-activate the current column.
                          }
                          return key; // returns the key pressed or 0 if none
                          }[/code]
                          چشم ها را باید شست ، جور دیگر باید دید . . .

                          دیدگاه


                            #43
                            پاسخ : آموزش Arduino + برنامه چهاردهم (HC-05)

                            برنامه ای ساده برای روشن و خاموش کردن LED با استفاده از ماژول بلوتوث HC-05 و برنامه Blue Term اندروید .اگر که ماژول رو برای اولین باره استفاده می کنید بهتره اول با نحوه راه اندازی ماژول آشنا بشید که به طور مفصل در اخجمن بحث شده . بعد از انجام تنظیمات فقط لازمه که پایه های RX,TX ماژول رو به TX,RX برد وصل کنید و با استفاده از برنامه زیر یک LED رو با استفاده از گوشی اندرویدتون خاموش و روشن کنید
                            [code=c]char comein;
                            int led=13;
                            void setup() {
                            Serial.begin(38400);
                            pinMode(led,OUTPUT);
                            }

                            void loop() {
                            while(!Serial.available());
                            comein=Serial.read();
                            if(comein=='0&#039{
                            digitalWrite(led,LOW);
                            Serial.write("-->LED IS OFF"
                            }
                            if(comein=='1&#039{
                            digitalWrite(led,HIGH);
                            Serial.write("-->LED IS ON"
                            }
                            delay(50);
                            }[/code]
                            چشم ها را باید شست ، جور دیگر باید دید . . .

                            دیدگاه


                              #44
                              پاسخ : آموزش ARDUINO

                              [quote author=hassantorabi link=topic=107170.msg695542#msg695542 date=1427687589]
                              برنامه هشتم :
                              خب تا اینجا راضی بودید ؟؟؟ توی برنامه امروز یاد میگیریم چجوری با برآردوینو یک LCD کاراکتری رو راه اندازی کنیم . مدار برنامه رو به صورت زیر ببندید .


                              ملومه راضی هستیم داداش همینکه وقت میذاری برامون درس یاد بدی بهمون خیلیه دمتم گرم مرسییییییییییییییییی

                              دیدگاه


                                #45
                                پاسخ : آموزش Arduino + برنامه چهاردهم (HC-05)

                                سلام
                                میشه در مورد ال ای دی ماتریس هم توضیح بدید مثلا چجوری اسکرول کنیم
                                همین مثال hello world مثلا..

                                دیدگاه

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