سه شنبه, بهمن 7, 1404
ادامه منو
    خانهآموزش میکروکنترلراموزش برنامه نویسی Arduinoدستورات خاص برنامه نویسی اردوینو

    دستورات خاص برنامه نویسی اردوینو

    اموزش برنامه نویسی آردوینو Arduino (جلسه هشتم) :

    بعد از اشنایی با برنامه نویسی c که با عنوان ” برنامه نویسی میکروکنترلر و اردوینو (جلسه 1 تا 6) ” اموزش داده شد, برای شروع کار با اردوینو شما باید با یک سری دستورات خاص که در نرم افزار اردوینو استفاده می شود اشنا شوید. در پایین مهم ترین این دستورات به طور کامل و با ذکر مثال معرفی شده اند :

    ثابت ها :

    توضیحات دستور
    به عنوان صفر تلقی می شود false
    دارای تعریف بزرگتری است به این صورت که هر داده ای از نوع integer که صفر نباشد true است true
    به معنی یک منطقی HIGH
    به معنی صفر منطقی LOW
    اگر پینی به عنوان ورودی تنظیم شود و به این پین یک کلید وصل شود ، در حالتی که کلید باز است ، ورودی را نمی­توان پیش­بینی کرد مگر اینکه این پین را pull-up  یا pull-down کرد. در این صورت زمانی که کلید فشار داده شود حالت ورودی تغییر می­کند و وضعیت پین تعیین می­شود.

    مقاومتی که برای این استفاده می­شود 10کیلو است.

    • در صورتی که از مقاومت pull-down استفاده شود زمانی که کلید باز است مقدار پین LOW است و زمانی که کلید بسته می­ شود مقدار HIGH می­شود.
    • در صورتی که از مقاومت pull-up استفاده شود زمانی که کلید باز است مقدار پین HIGH است و زمانی که کلید بسته می­ شود مقدار LOW می­شود.
    INPUT
    میکروکنترلر Atmega در بوردآردوینو دارای مقاومت pull-up داخلی است که می­توان به جای pull-up خارجی از آن استفاده کرد برای این کار کافی است که در تابع ()pinMode از عبارتINPUT_PULLUP  استفاده کرد. INPUT_PULLUP
    زمانی که پینی به عنوان خروجی تنظیم شود آنگاه Atmega می­تواند تا  40mA جریان خروجی برای دستگاهها یا مدارات خارجی فراهم کند و این جریان برای تغذیه یک LED مناسب است چون LED معمولی کمتر از 40mA جریان استفاده می­کند و در صورتی به جریان بیشتر از  40mA نیاز باشد باید از ترانزیستور یا مدارات دیگر استفاده کرد. OUTPUT

    توابع ورودی/خروجی دیجیتال :

    دستور ()pinMode

    تابع pinMode برای تعیین ورودی و خروجی یک پین به کار می رود.

     

    طریقه نوشتن مثال
    (pinMode(pin,mode ;(pinMode(13, OUTPUT

    Pin : شماره پین در این قسمت قرار می گیرد.

    mode : یکی از حالت های INPUT ، OUTPUT ، INPUT_PULLUP  می تواند باشد.

     

    دستور digitalWrite 

    این تابع بر روی پین های دیجیتال مقادیر LOW یا HIGH ایجاد می کند

    طریقه نوشتن مثال
    (digitalWrite(pin,value ;(digitalWrite(13, HIGH

    pin: شماره پینی که روی آن نوشته می شود.

    value: یکی از مقادیر HIGH یا LOW می باشد.

    دستور digitalRead

    تابع digitalRead از روی پین های دیجیتال مقادیر LOW یا HIGH را می خواند

    طریقه نوشتن مثال
    (digitalRead(pin ;(digitalRead(7

    pin: شماره پینی که از روی آن خوانده می شود.

    توابع ورودی/خروجی آنالوگ :

    توضیحات دستور
    ولتاژ مبنا یا reference را برای کار با ورودی انالوگ مشخص میکند

    Type : یکی از گزینه های پایین

    • DEFAULT : ولتاژ مبنا برای کار با انالوگ که برابر با 5 برای بردهای 5 ولتی و 3.3 ولت برای بردهای 3.3 ولتی .
    • INTERNAL : ولتاژ 1.1 ولت برای ATmega168 or ATmega328 و 2.56 برای ATmega8 – نکته: برای برد اردوینو مگا این گزینه وجود ندارد.
    • INTERNAL1V1 : ولتاژ 1.1 ولت و فقط برای اردوینو مگا می باشد .
    • INTERNAL2V56 : ولتاژ 2.56  ولت و فقط برای اردوینو مگا می باشد.
    • EXTERNAL : ولتاژ مبنای خارجی ( 0 تا 5 ولت) به پین AREF
    (analogReference(type
    در صورتی که خروجی یک سنسور آنالوگ به پایه های آنالوگ آردوینو وصل شود (برای هر سنسور یک پایه کافی است) ، آردوینو این ولتاژ را به دیجیتال از نوع 10 بیت تبدیل می کند یعنی مقدار صفر تا ولتاژ پایه(Reference) را به صفر تا 1023 قسمت تبدیل می کند

    pin : شماره یکی از پین­های آنالوگ است.

    خروجی عددی بین 0 تا 1023 می باشد.

    (analogRead(pin
    ایجاد ولتاژ انالوگ (موج (PWM روی پین .

    Pin : پین مورد نظر ( این پین باید قابلیت سخت افزاری تولید موج pwm را داشته باشد)

    Value : دیوتی سایکل موج شما می باشد که باید عددی بین 0 تا 255 باشد.

    (analogWrite(pin, value

    دستور (delay(ms :

    این دستور باعث تاخیر زمانی بر حسب میلی ثانیه در برنامه می شود.

    ms : مقدار تاخیر زمانی ( عددی هست بر حسب میلی ثانیه )

     

    بجز دستوراتی که در بالا معرفی کردم, دستورات دیگه ای هم وجود داره ولی مهم ترینش همینا هستن که با یادگیریشون میتونید شروع به برنامه نویسی کنید. در پست های بعدی هم در مورد محیط برنامه نویسی اردوینو و نحوه نصب و … توضیح خواهم داد.

    نظر یادتون نره …

     

    اموزش برنامه نویسی آردوینو Arduino :

    عابد رازانی
    عابد رازانیhttps://emic.ir/
    فارغ التحصیل کارشناسی الکترونیک از دانشکده باهنر شیراز و علاقمند به برنامه نویسی و طراحی مدارات الکترونیکی, در حال حاضر به تولید محتوای آموزشی و طراحی و انجام پروژه مشغول هستم.

    17 نظرات

    1. سلام یه سئوال داشتم
      من یه کد ساده نوشتم و دو عدد را در هم ضرب می کنم، ولی نتیجه درستی نمی دهد چرا؟
      مشکل برد است؟ یا آردوینو؟
      کدش اینه:
      long a=99999999;
      long b=100;
      double c=a*b;
      void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600);
      Serial.println(c);
      }

      void loop() {
      // put your main code here, to run repeatedly:
      Serial.println(c);
      }

      • مشکل از برد نیست. یک اشکال در کد شما وجود دارد. در خط double c=a*b;, a و b هر دو int پشت سر هم قرار گرفته اند، که باعث می شود این یک آدرس حافظه در آردوینو باشد. به همین دلیل c یک دهم در میلیون به جای ۱۰۰ هزار می شود. برای حل این مشکل می توانید این خط را به شرح زیر تغییر دهید:

        long a=99999999;
        long b=100;
        long c=a*b;
        void setup() {
        // put your setup code here, to run once:
        Serial.begin(9600);
        Serial.println(c);
        }
        این باعث می شود که c به جایdouble ,long شود.

        یا اگر به درستی متوجه نشدی میتونم اینجوری بگم که
        نخست اینکه شما هر دو متغیر a و b را در نوع اعداد صحیح (integer) تعریف کرده‌ید، اما در خط c=ab از نوع دابر (double) برای متغیر c استفاده کرده‌اید. برای حل این مشکل می‌توانید در خط c=ab از نوع long برای c استفاده کنید:
        دوم اینکه در خط double c=ab; به جای c=ab از سرراهی (c = cb;) استفاده کرده‌اید. برای حل این مشکل، می‌توانید از سرراهی (a=ab;) برای پیشرفت از int به long استفاده کنید:

        long a=99999999;
        long b=100;
        long c;

        void setup() {
        // put your Setup code here, to run once:
        Serial.begin(9600);
        }

        void loop() {
        // put your main code here, to run repeatedly:
        c = a;
        c *= b;
        Serial.println(c);
        }

    2. با سلام
      خواستم تشکر کنم بابت وقتی که گذاشتید
      واقعا روان و واضح بود توضیحاتتون
      اجرکم عندالله

    3. سلام
      من میخوام یه چراغ رو(led)با پین های آنالوگ روشن کنم و نه دیجیتال
      اما نمیدونم چرا هم از دستور digitalwrite و هم از analogwrite استفاده کردماما برقی روی پین های آنالوگ نمیاد.
      درضمن بلدم ساختار اینها رو و ایراد از ساختار دستورم نیست

    ارسال دیدگاه

    لطفا نظر خود را وارد کنید!
    لطفا نام خود را اینجا وارد کنید

    spot_img