Boxodir Karimov – Robototexnikadan boshlang’ich bilimlar. O’quv qo’llanma (страница 5)
If va else konstruksiyasi bitta if operatoridan ko`ra dasturni yaxshiroq boshqarish imkonini beradi. Bu ifoda to`g`ri bo`lgan holat uchun emas, balki qarama-qarshi holat uchun ham harakatlarni aniqlashga imkon beradi (ifoda qiymati noto`g`ri bo`lsa ham).
Arduinoga fotorezistorni ulashda if else operatoriga misol:
#define SENSOR A0
unsigned int qiymat = 0;
void setup () {
pinMode (LED, OUTPUT);
pinMode (SENSOR, INPUT);
}
void loop () {
//A0 analog kirishidagi fotorezistordan qiymatni o`qing
qiymat = analogRead (SENSOR);
//Agar A0 kirishidagi qiymat 500 dan kam bo`lsa, svetodiodni yoqing
if (qiymat <500) {digitalWrite (LED, HIGH);}
//Aks holda (agar qiymat> 500), svetodiodni o`chiring
if (qiymat> 500) {digitalWrite (LED, LOW);}
}
Arduinoda taqqoslash operatorlari:
x == y (x y ga teng)
x!= y (x y ga teng emas)
x <y (x y dan kichik)
x> y (x y dan katta)
x <= y (x y dan kichik yoki teng)
x> = y (x y dan katta yoki teng)
Tenglik belgisi `=` va `==` taqqoslash operatorini chalkashtirmang. If operatorida tenglik belgisidan foydalanish dastur (dastur) bajarilganda boshqacha natija berishi mumkin. Masalan, if (y = 100) if (y==100) bilan bir xil emas. Tenglik belgisi – o`zgaruvchining qiymatini 100 ga tekshirish o`rniga, o`zgaruvchining qiymatini 100 ga o`zgartiruvchi tayinlash operatori.
Bir nechta mantiqiy qiymatlarni bog`lash uchun mantiqiy operatorlar qo`llaniladi:
!(not) – EMAS, inkor
&& (and) – VA
|| (or) – YOKI
if (raqam> 500 && qiymat> 500)
{digitalWrite (7, HIGH); digitalWrite (8, LOW);
}
else {digitalWrite (7, LOW); digitalWrite (8, HIGH);}
Shartlar tartibi
Kodni optimallashtirish va dastur tezroq yozishga harakat qilishda shartlarning tartibi muhim rol o`ynaydi. Mantiqiy iboralar/qiymatlar chapdan o`ngga qarab tekshiriladi va agar birinchi tekshirishda ifoda noto`g`ri bo`lsa, shartlarni keyingi tekshirish to`xtatiladi. Misol uchun, agar raqam> 500 sharti noto`g`ri bo`lsa, keyingi ifoda qiymat> 500 tekshirilmaydi va amal bajarilmaydi.
4.2.5.Arduinoda for va while sikllari
Ushbu bo`limda Arduino IDE da for, while va do while sikllarining qanday ishlashini, dasturlarda to`g`ri foydalanishni va qanday xatolardan qochish kerakligini ko`rib chiqamiz. Oddiy misollar yordamida siklni qanday to`xtatishingiz yoki bir sikldan ikkinchisiga o`tishingiz mumkinligini ko`rsatamiz. Yozish sikllarining to`g`riligini tushunish uchun, avvalo, robototexnikadagi algoritmlarning turlari va xossalarini o`rganish kerak.
Arduinoda C++dasturlash tilidagi har qanday sikl ko`p yoki chek takrorlanadigan harakatdir. Arduino mikrokontrolleri uchun biron bir dastur looplar ishlay olmaydi, masalan, void loop cheksiklda chaqiriladi. Uch xil sikl operatorlari mavjud: for, while va do while – har bir operatorga to`xtalib o`tamiz, ularning qanday ishlashini misollar bilan ko`rib chiqamiz.
for va while ishlash prinspini quyidagi oddiy misollar bilan tushuntirish mumkin. for sikli chekli marta bajariladi (operator holatida ko`rsatilgan), u dastur, masalan, svetodiodni bir necha marta miltillashini talab qilganda ishlatiladi. while sikli chek muddatda bajarilishi mumkin, masalan, sensordan olingan ma`lumotlar o`zgarmaguncha Arduinodagi svetodiod yonib-o`chib turadi.
Arduinoda for operatori quyidagicha yoziladi:
for (boshlash; shart; o`zgartirish) {
// takrorlanadigan buyruqlar
}
For tsikli jingalak qavslar ichiga olingan ma`lum buyruqlarni takrorlash uchun ishlatiladi. Ushbu sikl har qanday takroriy harakatlarni bajarish uchun javob beradi.
Initializatsiya o`zgaruvchini yaratadi va boshlang`ich qiymatni belgilaydi. Shartda sikl bajariladigan o`zgaruvchining qiymati mavjud.
O`zgartirish siklning har bir bosqichi bilan o`zgaruvchining qanday o`zgarishini belgilaydi.
for (byte i=0; i <=5; i++) {digitalWrite (13, HIGH);
delay (500);
digitalWrite (13, LOW);
delay (500);}
Dastur misolida i=0 boshlang`ich qiymati bilan o`zgaruvchi o`rnatilgan, shart o`zgaruvchi besh i <=5 ga teng yoki undan katta bo`lgunga qadar sikl bajarilishini bildiradi. O`zgartirish siklning har bir bosqichidagi o`zgaruvchining bittaga oshirilishini bildiradi. Nihoyat, o`zgaruvchi beshga teng bo`lganda for tsikli chiqadi, shuning uchun svetodiod sikl tugashidan oldin besh marta miltillaydi.
O`zgaruvchan qadam (o`zgartirish) har qanday bo`lishi mumkin. Agar o`zgaruvchini birdaniga ikki birlikka oshirish zarur bo`lsa, u holda hisoblagich o`zgarishi quyidagicha yozilishi kerak: i=i+2. for tsikli void setup protsedurasi ichida ishlatilishi mumkin, masalan, bir vaqtning o`zida bir nechta pinlar uchun ish rejimini belgilash uchun. Shuningdek, void loop protsedurasida, masalan, Arduinoda svetodiodlarni ketma-ket yoqish dasturida qo’llaniladi.
Arduinoda while sikli quyidagicha aniqlanadi:
while (shart) {
// takrorlanadigan buyruqlar
}
Qavs ichidagi shart rost ekan, while sikli uzluksiz va cheksiz ishlaydi. Sikldan chiqishga while holatidagi o`zgaruvchi o`zgarganda erishiladi, shuning uchun biror narsa uning qiymatini o`zgartirishi kerak. O`zgaruvchini o`zgartirish dastur kodida sikl ichidagi yoki har qanday sensordan, masalan, HC-SR04 ultratovush diapazoni o`lchagichidan qiymatlarni o`qishda sodir bo`lishi mumkin.
byte i=0; //tsikldan oldin o`zgaruvchi yaratishingiz kerak
while (i <5) {//tsikli while i 5 dan kichik
digitalWrite (13,HIGH);
delay (500);
digitalWrite (13, LOW);
delay (500);
i++; // o`zgaruvchini o`zgartirish}
while funktsiyasidan foydalanilganda, o`zgaruvchi tsikl boshlanishidan oldin yaratilishi kerak. Misol uchun dasturida, svetodiod sikl tugashidan oldin besh marta miltillaydi. Agar jingalak qavslar ichidagi i++ o`zgaruvchini o`zgartirmasangiz, sikl chek takrorlanadi. Arduino UNOning while siklidan chiqishning ikkinchi usuli – sensordan ma`lumotlarni o`qish va o`zgaruvchini o`zgartirish uchun if iborasidan foydalanishdir.
Arduino IDE-da ishlatilishi mumkin bo`lgan yana bir sikl bu do… while siklidir. Bu konstruksiyadan foydalanilganda sikldagi buyruqlar shartdan qat`iy nazar kamida bir marta bajariladi, chunki shart sikl bajarilgandan keyin tekshiriladi. Quyidagi kod misolida, svetodiod sensor o`qilishidan qat`iy nazar yonadi va shundan keyingina keyingi holat tekshiruvi amalga oshiriladi.