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

blog
۱۳۹۶-۰۱-۲۷
2 دقیقه

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
0
لینک و اشتراک
profile

Yalda

متخصص الکترونیک

علاقه‌مند به یادگیری چیزهای جدید!

مقالات بیشتر
slide

پالت | بازار خرید و فروش قطعات الکترونیک

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

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد. جستجو در آیسی
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
become a writer

نویسنده شو !

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

ارسال مقاله
become a writer

نویسنده شو !

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

ارسال مقاله
خانواده سیسوگ

پالت | بازار خرید و فروش قطعات الکترونیک

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

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد.
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند.
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند.
family

دیدگاه ها

profile
سعید گفت :
۱۴۰۰-۰۸-۱۷ ۰۵:۳۲

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

profile
Zeus ‌ گفت :
۱۴۰۱-۰۵-۰۲ ۱۵:۱۴

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

profile
رضا گفت :
۱۳۹۹-۱۰-۲۱ ۰۹:۳۸

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

profile
Sisoog Os گفت :
۱۳۹۹-۱۰-۲۱ ۱۲:۱۳

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

profile
امیر گفت :
۱۳۹۹-۰۴-۱۵ ۲۳:۳۷

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

profile
Sisoog Os گفت :
۱۳۹۹-۰۴-۱۶ ۰۹:۲۷

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

profile
a گفت :
۱۳۹۹-۱۱-۰۴ ۲۳:۲۸

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

profile
زئوس Zeus گفت :
۱۳۹۹-۱۱-۰۵ ۰۹:۱۳

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

profile
amir گفت :
۱۴۰۰-۰۴-۳۰ ۱۰:۱۵

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

profile
علی گفت :
۱۳۹۹-۰۲-۰۴ ۱۱:۰۵

سلام
این 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);
}
اگر امکانش هست راهنماییم کنید.
ممنون.

profile
Sisoog Os گفت :
۱۳۹۹-۰۲-۰۸ ۲۳:۱۲

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

become a writer

نویسنده شو !

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

ارسال مقاله
become a writer

نویسنده شو !

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

ارسال مقاله