if (ساختار شرطی) و == ، =!، <، > (عملگرهای مقایسه)
ساختار if به همراه یک عملگر مقایسه، چک میکند که آیا یک شرط برآورده شده است یا نه. حاصل if صحیح یا غلط (true or false) خواهد بود. مثلا آیا یک ورودی از یک عدد معین بیشتر است؟
فرمت نوشتن یک if اینگونه است:
1 2 3 4 | if (someVariable > 50) { // در این قسمت کاری که می خواهیم در هنگام درست بودن شرط اجرا شود را مینویسیم. } |
این قطعه کد بررسی میکند که آیا مقدار متغییر someVariable از 50 بیشتر است یا نه. اگر باشد، برنامه کار خاصی را انجام میدهد. به زبانی دیگر اگر جملهی درون پرانتز درست باشد، جملههای درون براکت اجرا میشوند. وگرنه برنامه از اجرای این بلاک کد صرف نظر میکند. (هر چیزی که بین دو براکت ({}) نوشته شود، یک بلاک محسوب میشود.)
براکت را میشود از ساختار if حذف کرد. در این صورت فقط خط بعد از if تا رسیدن به “;” جزء ساختار شرطی خواهد بود.
برای مثال، کدهای زیر، همه یک نوع هستند و یک کار ثابت را انجام میدهند. نوشتن هر کدام از این انواع، صحیح است:
1 2 3 4 5 6 7 8 9 10 11 | if (x > 120) digitalWrite(LEDpin, HIGH); if (x > 120) digitalWrite(LEDpin, HIGH); if (x > 120){ digitalWrite(LEDpin, HIGH); } if (x > 120){ digitalWrite(LEDpin1, HIGH); digitalWrite(LEDpin2, HIGH); } // all are correct |
شاید برای شما مفید باشد: ساخت ماینر
عملگرهای مقایسهای:
جملهی دورن پرانتز که ارزیابی میشود، به یک یا چند عملگر مقایسهای نیاز دارد. عملگرهای مقایسهای این 6 عدد هستند:
== : مساوی بودن
=!: مخالف بودن، برابر نبودن
<: بیشتر بودن، بزرگتر بودن
>: کمتر بودن، کوچکتر بودن
=<: بیشتر مساوی بودن
=>: کمتر مساوی بودن
نحوهی استفاده:
1 2 3 4 5 6 | x == y (x is equal to y) x != y (x is not equal to y) x < y (x is less than y) x > y (x is greater than y) x <= y (x is less than or equal to y) x >= y (x is greater than or equal to y) |
نکته: = با == تفاوت دارد. تک مساوی (=) عملگر انتساب است. مثلا در چنین کدی:
1 | if (x = 10) |
علمگر تک مساوی، مقدار 10 را در متغییری با نام X قرار میدهد.
اما دو مساوی (==) عملگر مقایسهای است و در چنین کدی:
1 | if (x == 10) |
بررسی میکند که آیا در متغییر X مقدار 10 قرار دارد یا نه. (آیا x مساوی 10 است یا نه.) این کد وقتی True میشود که X مساوی 10 باشد. اما کد قبل همیشه True خواهد بود. چرا؟
شاید برای شما مفید باشد: آموزش FPGA
این نتیجه به خاطر نحوهی ارزیابی این جمله توسط زبان c است. زبان c جمله را اینگونه ارزیابی میکند: متغییر X مقدار 10 میگیرد. (تک مساوی علامت انتساب است.) پس الان X مقدار 10 را در خود دارد. سپس if شرطی، 10 را ارزیابی میکند. نتیجهی این ارزیابی همیشه True خواهد بود. چون 10 عددی غیر صفر است و در شرطها هر عدد غیر صفر به منزله True خواهد بود. در نتیجه این جمله همیشه حاصل صحیح خواهد داشت که این حاصل همیشه صحیح، برای ایجاد شرط مناسب نخواهد بود. علاوه بر این، در چنین جملهای مقدار X عوض میشود که این عمل هم ممکن است در ادامهی برنامه باعث ایجاد مشکل شود.
if با استفاده از ساختار if…else میتواند جزئی از ساختارهای کنترلی منشعب شونده نیز باشد.
سلام ، بنده این شرط رو نوشتم و فقط اولی رو میخونه و true میکنه نمیدونم مشکل کجاست؟
char phone_no1 =xxxxx
char phone_no2 = yyyyyyy
if(Serial.find(phone_no1) || Serial.(phone_no2)){
فقط اولی رو بررسی میکنه
سلام دوست عزیز
خوب اگر اولی خروجیش true باشه دیگه دومی بررسی نمیشه و پاس میشه با توجه به or بودن
سلام من یک پروژه دنبال کننده خورشیدی ساختم که نحوه کارش به این صورته که میاد دو ولتاژو با هم مقایسه میکنه و با احتساب اینکه کدوم ولتاژ بزرگ تره موتور به سمت راست یا چپ میچرخه تا اینجا درست کار میکنه.
اما مشکلم اینجاست که موتور با کوچک ترین تغیر ولتاژ مرتب به سمت راست یا چپ چرخش میکنه چجوری میتونم بدون استفاده از دستور delay این مشکل رو برطرف کنم
ممنون میشم زود ر راهنماییم کنید.
سلام اگر مشکلتون را درست متوجه شده باشم البته
شما باید یه حدی را بزارید بعد به سمت چپ و راست حرکت کنه , و گرنه همیشه سیستم شما یک طرف بزرگتره یا کوچکتر و در حال کار هست
اون حد هم باید جوری باشه که مشکلی تو کارکرد نداشته باشه
سلام مرسی بابت مطالب مفیدتون
یه سوال داشتم چطور میتونم یک دستور شرطی بنویسم که مثلا دارای دو شرط باشه و زمانی دستورات داخل شرط اجرا بشه که هر دو شرط انجام بشن
مثلا چطور میتونم بنویسم زمانی که مقدار x و مقدار y کمتر مساوی 15 شود پین شماره 3 مقدارش یک بشه؟
سلام دوست عزیز
شما میتونید دو شرط را داخل IF بگذارید و با گزاره && اونها را AND کنید
مثلا
If(x<15 && y<15
لطفا راهنمایی بفرمایید یشرط میخوام که اگر در برنامه اردینو رله اول وصل شد رله دوم وبقیه وصل شود در غیر این صورت کاری انجام نشود ممنون
خوب باید دید توی چه شرایطی رله اول وصل میشه ؟
کنترل رله اول در اختیار شماست یا توسط دستگاه دیگری کنترل می شود ؟
بله در اختیار هر کسی است که شستی اول را میزند اما تا شستی اول را نزند نمیتواند بقیه را بزند فرض کنید سه نوار نقاله داریم به نام a,b,c تا نوار نقاله aراه نیفتد اجازه نداریم نوارbرا راه بیندازیم و همنینطورتاbراه نیفتد c را نمیتوانیم راه اندازی کنیم
سلام
این 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);
}
اگر امکانش هست راهنماییم کنید.
ممنون.
سلام خب دوست عزیز ببنید این بافر دقیقا چطور داره پر میشه
از طریق سریال یا …
مطمئنا این دو بایت که نوشتید داخل این بافر وارد نمیشه