آموزش, رفرنس

ساختار شرطی if و عملگر های مقایسه ای در آردوینو

if و عملگرهای مقایسه ای

if (ساختار شرطی) و == ، =!، <، > (عملگر‌های مقایسه)

ساختار if به همراه یک عملگر مقایسه، چک می‌کند که آیا یک شرط برآورده شده است یا نه. حاصل if صحیح یا غلط (true or false) خواهد بود. مثلا آیا یک ورودی از یک عدد معین بیشتر است؟

فرمت نوشتن یک if این‌گونه است:

این قطعه کد بررسی می‌کند که آیا مقدار متغییر someVariable از 50 بیشتر است یا نه. اگر باشد، برنامه کار خاصی را انجام می‌دهد. به زبانی دیگر اگر جمله‌ی درون پرانتز درست باشد، جمله‌های درون براکت اجرا می‌شوند. وگرنه برنامه از اجرای این بلاک کد صرف نظر می‌کند. (هر چیزی که بین دو براکت ({}) نوشته شود، یک بلاک محسوب می‌شود.)

براکت را می‌شود از ساختار if حذف کرد. در این صورت فقط خط بعد از if تا رسیدن به “;” جزء ساختار شرطی خواهد بود.

برای مثال، کد‌های زیر، همه یک نوع هستند و یک کار ثابت را انجام می‌دهند. نوشتن هر کدام از این انواع، صحیح است:

 

شاید برای شما مفید باشد: ساخت ماینر

 

عملگر‌های مقایسه‌ای:

جمله‌ی دورن پرانتز که ارزیابی می‌شود، به یک یا چند عملگر مقایسه‌ای نیاز دارد. عملگر‌های مقایسه‌ای این 6 عدد هستند:

== : مساوی بودن

=!: مخالف بودن، برابر نبودن

<: بیشتر بودن، بزرگتر بودن

>: کمتر بودن، کوچکتر بودن

=<: بیشتر مساوی بودن

=>: کمتر مساوی بودن

 

نحوه‌ی استفاده:

 

نکته: = با == تفاوت دارد. تک مساوی (=) عملگر انتساب است.  مثلا در چنین کدی:

علمگر تک مساوی، مقدار 10 را در متغییری با نام X قرار می‌دهد.

 

اما دو مساوی (==) عملگر مقایسه‌ای است و در چنین کدی:

بررسی می‌کند که آیا در متغییر X مقدار 10 قرار دارد یا نه. (آیا x مساوی 10 است یا نه.) این کد وقتی True می‌شود که X مساوی 10 باشد. اما کد قبل همیشه True خواهد بود. چرا؟

شاید برای شما مفید باشد: آموزش FPGA

این نتیجه به خاطر نحوه‌ی ارزیابی این جمله توسط زبان c است. زبان c جمله را این‌گونه ارزیابی می‌کند: متغییر X مقدار 10 می‌گیرد. (تک مساوی علامت انتساب است.) پس الان X مقدار 10 را در خود دارد. سپس if شرطی، 10 را ارزیابی می‌کند. نتیجه‌ی این ارزیابی همیشه True خواهد بود. چون 10 عددی غیر صفر است و در شرط‌ها هر عدد غیر صفر به منزله True خواهد بود. در نتیجه این جمله همیشه حاصل صحیح خواهد داشت که این حاصل همیشه صحیح، برای ایجاد شرط مناسب نخواهد بود. علاوه بر این، در چنین جمله‌ای مقدار X عوض می‌شود که این عمل هم ممکن است در ادامه‌ی برنامه باعث ایجاد مشکل شود.

if با استفاده از ساختار if…else می‌تواند جزئی از ساختار‌های کنترلی منشعب شونده نیز باشد.

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

11 دیدگاه در “ساختار شرطی if و عملگر های مقایسه ای در آردوینو

  1. Avatar for سعید سعید گفت:

    سلام ، بنده این شرط رو نوشتم و فقط اولی رو میخونه و true میکنه نمیدونم مشکل کجاست؟
    char phone_no1 =xxxxx
    char phone_no2 = yyyyyyy
    if(Serial.find(phone_no1) || Serial.(phone_no2)){
    فقط اولی رو بررسی میکنه

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      سلام دوست عزیز
      خوب اگر اولی خروجیش true باشه دیگه دومی بررسی نمیشه و پاس میشه با توجه به or بودن

  2. Avatar for رضا رضا گفت:

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

    1. Avatar for Sisoog Os Sisoog Os گفت:

      سلام اگر مشکلتون را درست متوجه شده باشم البته
      شما باید یه حدی را بزارید بعد به سمت چپ و راست حرکت کنه , و گرنه همیشه سیستم شما یک طرف بزرگتره یا کوچکتر و در حال کار هست
      اون حد هم باید جوری باشه که مشکلی تو کارکرد نداشته باشه

  3. Avatar for امیر امیر گفت:

    سلام مرسی بابت مطالب مفیدتون
    یه سوال داشتم چطور میتونم یک دستور شرطی بنویسم که مثلا دارای دو شرط باشه و زمانی دستورات داخل شرط اجرا بشه که هر دو شرط انجام بشن
    مثلا چطور میتونم بنویسم زمانی که مقدار x و مقدار y کمتر مساوی 15 شود پین شماره 3 مقدارش یک بشه؟

    1. Avatar for Sisoog Os Sisoog Os گفت:

      سلام دوست عزیز
      شما میتونید دو شرط را داخل IF بگذارید و با گزاره && اونها را AND کنید
      مثلا
      If(x<15 && y<15

      1. Avatar for a a گفت:

        لطفا راهنمایی بفرمایید یشرط میخوام که اگر در برنامه اردینو رله اول وصل شد رله دوم وبقیه وصل شود در غیر این صورت کاری انجام نشود ممنون

        1. Avatar for زئوس Zeus زئوس Zeus گفت:

          خوب باید دید توی چه شرایطی رله اول وصل میشه ؟
          کنترل رله اول در اختیار شماست یا توسط دستگاه دیگری کنترل می شود ؟

          1. Avatar for amir amir گفت:

            بله در اختیار هر کسی است که شستی اول را میزند اما تا شستی اول را نزند نمیتواند بقیه را بزند فرض کنید سه نوار نقاله داریم به نام a,b,c تا نوار نقاله aراه نیفتد اجازه نداریم نوارbرا راه بیندازیم و همنینطورتاbراه نیفتد c را نمیتوانیم راه اندازی کنیم

  4. Avatar for علی علی گفت:

    سلام
    این if که نوشتم به هیچ عنوان داخل آردوینو اجرا نمیشه:
    if (buff[0] == 0xA1 && buff[1] == 0xB1 )
    {

    Serial.write(buff,sizeof(buff));

    pwm1 = buff[2];
    pwm2 = buff[3];
    pwm3 = buff[4];
    pwm4 = buff[5];
    pwm5 = buff[6];

    a.write(pwm1);
    b.write(pwm2);
    c.write(pwm3);
    d.write(pwm4);
    e.write(pwm5);
    delay(500);
    }
    اگر امکانش هست راهنماییم کنید.
    ممنون.

    1. Avatar for Sisoog Os Sisoog Os گفت:

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

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *