Книга Robototexnikadan boshlang’ich bilimlar. O’quv qo’llanma - читать онлайн бесплатно, автор Akmaljon Olloberdiyevich Kuchkarov. Cтраница 2
bannerbanner
Вы не авторизовались
Войти
Зарегистрироваться
Robototexnikadan boshlang’ich bilimlar. O’quv qo’llanma
Robototexnikadan boshlang’ich bilimlar. O’quv qo’llanma
Добавить В библиотекуАвторизуйтесь, чтобы добавить
Оценить:

Рейтинг: 0

Добавить отзывДобавить цитату

Robototexnikadan boshlang’ich bilimlar. O’quv qo’llanma

3.5. Arduinoda analog signal va LED

int LED = 0; //LEDning dastlabki yorqinligi

int fade = 5; //LED yorqinligini o`zgartirish bosqichi

void setup () {

pinMode (9, OUTPUT); // chiqish ishlashi uchun Pin 9 dan foydalaning

}

void loop () {

//LED yorqinligini Pin 9ga o`rnating

analogWrite (9, LED); //har bir siklda berilgan so`ng miqdorini qo`shish orqali yorqinlikni o`zgartiring;

LED = LED + fade; //minimal va maksimal yorqinlikda o`chirish tartibini o`zgartiring;

if (LED == 0 || LED == 255) {

fade=-fade;

}

delay (20); //effektni pauza qilish

}

Tushuntirish:

1.AnalogWrite funksiyasi (pin, qiymat), bu yerda pin – signal qo`llaniladigan chiqish porti, qiymat-0 (to`liq o`chirilgan) va 255 (to`liq yoqilgan) orasidagi qiymat, LEDning yorqinligini yoki tezligini impuls kengligi modulyatsiyasi (PWM) yordamida boshqariladi.

2.LED o`zgaruvchi sikli har gal bajarilganda «0» boshlang`ich qiymatiga ega bo`ladi, fade ning berilgan qiymati LED qiymatiga qo`shiladi (bu dasturda fade =5).

LED o`zgaruvchisi maksimal qiymati 255 ga yetganda, fade -5 manfiy qiymatni oladi. Endi, har safar sikl bajarilganda, LED qiymatiga -5 qo`shiladi, ya`ni, har safar fade LEDdan ayriladi.

Arduinoda LEDning yorqinligini o`zgartirish

Ushbu bo’limda LEDning yorqinligini o`zgartiriladigan qurilmaning elektr sxemasini yig`amiz. Potensiometr yordamida 9-pinga ulangan LEDning yorqinligini o`zgartirishimiz mumkin. Potensiometrning ikki tarafdagi oyoqlari 5V va GND portlariga ulanadi, kuchlanish qiymati o`rta oyoqdan olinadi va Arduinoning A0 analog kirishiga ulanadi.

Elektr zanjirini ko`rsatilganidek yig`ing. Potensiometrning o`rta oyog`i kuchlanish ko`rsatkichlarini olish uchun A0 analog portiga ulanadi. Arduinoning 5V va GND portlariga ulash uchun, potensiometrni ikki tarafidagi oyoqlarini qay biriga ulanishi muhim emas. LEDning yorqinligini oshirish uchun faqat htugmachasining aylanish yo`nalishi o`zgartiriladi. Sxema tayyor bo`lgandan so`ng, Arduinoni kompyuterga ulab va dasturni yuklang.


3.4-rasm. Arduinoga led va potensiyometr ulash sxemasi


Arduinoda led va potensiyometr uchun dastur

#define LED_PIN 9 // LED bilan pinga nom bering

#define POT_PIN A0 // Potensiometr piniga nom bering

void setup () {

// LED pin chiqish

pinMode (LED_PIN, OUTPUT);

//potensiometrli pin kirish bo`ladi

pinMode (POT_PIN, INPUT);

// Serial port monitorini ishga tushiring

Serial.begin (9600);

}

void loop () {

//2 ta o`zgaruvchidan foydalanishimizni e`lon qilamiz – aylanish va yorqinlik

//o`zgaruvchilarda faqat butun sonlarni saqlaymiz (ing. «integer»)

int aylanish, yorqinlik;

//aylanish 0 dan 1023 gacha bo`lgan potentsiometr qiymatlariga teng

aylanish = analogRead (POT_PIN);

// o`zgaruvchan brightness 4 ga bo`lingan aylanishga teng bo`ladi

//yorqinlik faqat butun son bo`lishi mumkin, kasr qismi o`chiriladi

//natijada yorqinlik o`zgaruvchisi 0 dan 255 gacha bo`lgan oraliqda bo`ladi

yorqinlik = aylanish / 4;

//yorqinlik=aylanish/4 formulasi bo`yicha hisoblangan kuchlanish

analogWrite (LED_PIN, yorqinlik);

//aylanish qiymatini ketma-ket monitor portga yuboring

Serial.println (yorqinlik);

delay (500);

}

Tushuntirish: #define direktivasidan foydalanib, 9-pin raqamini LED_PIN nomi bilan almashtirdik, A0 analog kirishiga POT_PIN nomini berdik. Mahalliy o`zgaruvchi“aylanish“ kuchlanishga mutanosib va 0 dan 1023 gacha (ADC ning minimal va maksimal qiymatlari) oralig`ida bo`ladi. „yorqinlik“ o`zgaruvchisi esa 4 ga bo`lingan „aylanish”ga teng ya`ni 0 dan 255 gacha (analog kirishning minimal va maksimal qiymati).

4-bob. DASTURLASHNING TARKIBI

Arduinoda AVR mikrokontrollerlar uchun maxsus C/C++ dasturidan foydalaniladi.

4.1. setup () va loop () funksiyasi

Arduino dasturining bazaviy tarkibi ikkita majburiy qism setup () va loop () funksiyasidan iborat. setup () funksiyasidan o’zgaruvchi va kutubhonani ulash e`lon qilinadi. setup () funksiyasi bir marta ishga tushiriladi. U o’zgaruvchilarni inisializasiya qilishda, portlarni ishlash rejimini o`rnatishda va dasturning asosiy siklini tayyorlashda qo’llaniladi. U biror amalni bajarmasa ham dasturga bo`lishi kerak. loop () funksiyasi Arduinoda yozilgan buyruqni cheksiz ketma ketlikda bajaradi. Bu funksiya asosiy ishni siklik ravishda bajaradi.

Quyida sodda yozilgan dastur keltirilgan.

void setup ()

{

Serial.begin (9600);

}

void loop ()

{

Serial.println (millis ());

delay (1000);

}

4.2. Boshqaruvchi operatorlar

4.2.1. If shart operatori

Bugungi darsda If shart operatori bilan tanishamiz. Arduinoda har bir dasturlash tilida muntazam ishlatiladigan operatorlardan biri – if hisoblanadi. Aynan bu operatorsiz, biror bir mukammal dastur tuzishning umuman iloji yo`q. Shart operatori biror bir qo`yilgan shartni tekshirib, uning rost yoki yolg`onligidan kelib chiqqan holda biror bir amal yoki funksiyani bajarishiga yordam beruvchi vosita hisoblanadi.

Shart operatorining ikki xil ko`rinishi ya`ni, umumiy ko`rinishi va qisqa ko`rinishi mavjud.

Shart operatorining qisqa ko`rinishi:

if (shart) {bajariladigan operatsiya;}

Bu yerda if – agar, (shart) – tekshirilishi kerak bo`lgan yoki jarayon ishga tushishi uchun bajarilishi shart bo`lgan jarayon, {bajariladigan operatsiya;} – (shart) bajarilganda ishlashi kerak bo`lgan operatsiya.

Dastur yozayotganda shartdan so`ng; qo`yish mumkin emas. Agar shartdan so`ng qo`ysak jarayon shu yerning o`zida to`xtaydi va shartdan keyingi operatorga murojaat qilmaydi.

Operator-o`ziga yuklangan ma`lum bir shart asosida vazifani bajaruvchi vosita hisoblanadi va u dastur tuzishimizda bir qator qulayliklarga ega hisoblanadi.

Misol uchun jamiyatimizdagi insonlarni olsak, har bir insonni o`zi bajaradigan vazifasi bo`ladi. O`quvchining vazifasi o`qish bo`lsa, o`qituvchining vazifasi anashu o`quvchilarga bilim berishdan iborat.

Elektronika sohasida lampochka yoritish vazifasini bajarsa, sim ana shu lampochkani elektr ta`minotiga ulash vazifasini bajaradi.

4.2.2.O‘zlashtirish operatori – =.

O«zlashtirish operatori: = belgisidan chap tomonda turgan qiymatni = belgisidan o‘ng tomondagilarni hisoblangan qiymatiga almashtiradi. Masalan, x = a+b; ifodasi. Bu yerda“x»: a va b o‘zgaruvchining qiymatlarini qo‘shishdan hosil bo‘lgan natijani o‘zlashtiradi.

4.2.3.Tenglashtirish operatori. = =.

Tenglashtirish operatori== belgisidan o`ng tomonda turgan qiymat bilan chap tomonda turgan son qiymatini solishtirib, tenglashtirib ko`radi. Masalan, y==a+b; ifoda. Bu yerda «y»: a va b o‘zgaruvchilarnngi qiymatlarini qo‘shishdan hosil bo‘lgan natija bilan o`zining qiymatini tekshiradi. Agar tenglashtirilgan qiymat shartni qanoatlantirsa u holda operatsiyani bajaradi, agar tenglashtirilgan qiymat shartni qanoatlantirmasa shartning ichidan chiqib ketadi.

Bularga qo`shimcha tarzda <,> katta va kichik belgilaridan foydalanamiz.

Shart operatorining umumiy ko`rinishi:

if (shart) {bajariladigan operatsiya 1;}

else {bajariladigan operatsiya 2;}

bu yerda else-aks holda.

Shart 2 hil ko`rinishda boladi: rost (1) va yolg`on (0)

{bajariladigan operatsiya 1;} – Agar (shart) bajarilsa ya`ni rost (1) qiymatga ega bo`lsa bajarilishi kerak bo`lgan jarayon.

{bajariladigan operatsiya 2;} – bu jarayon else ya`ni shart bajarilmaganda yoki yolg`on (0) qiymatga ega bo`lganda bajarilishi kerak bo`lgan jarayon.

Misol: quyidagi keltirgan misolimizga qarang! U yerda aks holda to`p darvozaning yonidan o`tib ketadi deyilgan. Ana shu operatsiya shart operatorining umumiy ko`rinishiga misol bo`lishi mumkin.

if (to`pni to`g`ri tepsak) {to`p darvozaga borib tushadi;}

else {to`p darvoza yonidan o`tib ketadi;}

4.2.4.Arduinoda mantiqiy operatorlar- if va else

Arduinodagi if operatori shartni tekshiradi, agar u rost bo`lsa, jingalak qavslardagi kod bloki bajariladi. Jingalak qavslar shartli operatordan keyingi kodning faqat bitta qatori bajariladi. Har doim jingalak qavslardan foydalanishni tavsiya qilamiz. Shartlar, shartlar tartibi va Arduino taqqoslash operatorlarini quyidagi misollar bilan ko`rib chiqamiz.

Arduinoda if shartlari to`g`ri yoki noto`g`riligini tekshirish uchun taqqoslash operatorlari ishlatiladi. Jingalak qavslar mantiqiy ravishda bir nechta qatorlarni bitta blokda guruhlaydi. O`zgaruvchining qiymati berilgan raqamdan katta yoki kichikligini tekshiradigan dastur:

if (qiymat> 500) {digitalWrite (8, HIGH); digitalWrite (7, LOW);}

if (qiymat <500) {digitalWrite (8, LOW); digitalWrite (7, HIGH);}

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

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.

int suv; //tsikldan oldin o`zgaruvchi yarating

do {digitalWrite (13, HIGH);

suv = analogRead (AO);

}

while (suv <5) //sensorni tekshiring

digitalWrite (13, LOW);

Agar ko`rsatilgan shartlardan qat`i nazar, sikldan chiqish kerak bo`lsa, break yoki goto iborasi qo`llaniladi. break operatori sikldan chiqish imkonini beradi va dastur quyidagi buyruqlarni bajarishda davom etadi. goto iborasi nafaqat sikldan chiqishga, balki dasturni kerakli joydan belgilangan tartibda bajarilishini davom ettirishga imkon beradi.

4.2.6.Arduinoda tanlash operatorlari – switch va case

Switch operatori if operatori kabi, turli sharoitlarda bajarilishi kerak bo`lgan muqobil kodni berib, dasturni boshqaradi. Agar ikkitadan ortiq shartlardan birini tanlashingiz kerak bo`lsa, if… else if yoki switch… case bayonotidan bir necha marta foydalanish mumkin. Keling, bir nechta diskret shartlar orasidan tanlashda switch iborasidan foydalanish misollarini ko`rib chiqaylik.

Arduinoda switch case tanlash operatori o`zgaruvchining qiymatiga qarab dasturning harakatlarini tarmoqlanadigan dasturda qulay konstruktsiyani yaratishga imkon beradi. Ushbu konstruktsiyada standart operatorning mavjudligi ixtiyoriy, uzilish operatorining mavjudligi esa majburiydir. If… else shartli operatorlar va switch… case tanlash operatorlari yordamida dasturning butun mantig`i quriladi.

Switch operatori o`zgaruvchining qiymatini case iboralaridagi qiymat bilan taqqoslaydi. Qiymati o`zgaruvchining qiymatiga teng bo`lgan case operatori topilsa, bu operatordagi dastur kodi bajariladi. Dasturga misol:

int malumot = 2;

swich (malumot) {

case 1: Serial.println («1»); break;

case 2: Serial.println («2»); break;

case 3: Serial.println («3»); break;

}

Arduino IDE-dagi break, agar switch operatoridagi oldingi shart to`g`ri bo`lmasa, keyingi holatga o`tish uchun ishlatiladi. default esa agar barcha almashtirish shartlari to`g`ri bo`lmasa, kodni bajarish uchun ishlatiladi:

int malumot = 5;

swich (malumot) {

case 1:Serial.println («1»); break

case 2:Serial.println («2»); break

case 3:Serial.println («3»); break

default:Serial.println (»_»); break

}

Xulosa. Barcha dasturlash tillarida bir xil kodning bir necha marta bajarilishini ta`minlovchi boshqaruv buyruqlari to`plami (while sikli), tegishli kodni tanlash (if shartlarida) va joriy kod qismidan chiqish bo`yicha ko`rsatmalar mavjud. Arduino IDE dasturlash tilida C/C++ tilidan kerakli boshqaruv indikatorlarining ko`pini olgan, shuning uchun ularning sintaksisi deyarli bir xil.

4.3. Sintaksis

4.3.1.; (nuqta vergul); (semicolon)

;(nuqta vergul) operatorning tugaganini bildiradi.

int a = 13;

4.3.2. {} (figurali qavs) {} (curly braces)

Figurali qavs {} – - C dasturinig asosiu elemenlaridan biri

Qavsni ochilgandan song (albatta qavs berkilishi zarur)

Figurali qavsni qollanilishining asosiy usullari:

Funksiya:

• void funksiya nomi (argumentning turlari)

{operatorlar};

sikllar: • while (mantiqiy ifoda) {operatorlar};

• do {operatorlar} while (mantiqiy ifoda);

• for (inisializasiya; siklning shartli tugallanishi);

{operatorlar};

_ shartl operatorlar :

• if (mantiqiy ifoda) {operatorlar}.

4.4.Funksiyalar

4.4.1.Raqamli kirish/chiqish. Arduinoda pinMode funktsiyasi

Arduino IDE-ning pinMode () funktsiyasi berilgan pinning rejimini kirish yoki chiqish sifatida o`rnatadi.


4.1-rasm. Raqamli pin


Arduino raqamli pin ikki holatda bo`lishi mumkin. Kirish rejimida pin 0 dan 5 voltgacha bo`lgan kuchlanishni o`qiydi va chiqish rejimida pinda bir xil kuchlanishni chiqaradi.

digitalWrite () buyrug`i yordamida raqamli chiqish signal hosil qilish

Mikrokontrollerning pin rejimi pinMode (pin, mode) funksiyasi yordamida tanlanadi, bu erda pin- pin raqami va mode rejim yoki usul degan ma`noni anglatadi.

Arduinoda pinMode OUTPUT (chiqish sifatida tuzilgan pinlar)

OUTPUT (porti chiqish sifatida ishlaydi) – pin maksimal 40 mA tok bilan boshqariladigan quvvat manbaiga aylanadi. digitalWrite () buyrug`iga qarab, pin bir yoki nol qiymatini oladi. Misol:

pinMode (10,OUTPUT);

4.4.2.digitalWrite () va analogWrite () funksiyalari

Raqamli pin digitalWrite () buyrug`i yordamida raqamli chiqish signal hosil qilishi mumkin. Raqamli signal ikkita qiymatga ega bo`ladi; – 0 yoki 1 (0 volt yoki 5 volt).

void setup () {

pinMode (11, OUTPUT);

digitalWrite (11, HIGH); delay (500);

digitalWrite (11, LOW); delay (500);}

40 mA dan ortiq quvvat sarflaydigan qurilmalarni Arduino pinlariga ulash mumkin emas, chunki mikrokontrollerning asosiy maqsadi mantiqiy signallar yordamida boshqa qurilmalarni boshqarishdir. Agar qurilmani belgilangan qiymatdan ko`proq iste`mol qiladigan pinga ulasangiz, u holda pinga zarar etishi mumkin. Bu holda relelardan foudalaniladi.

4.5.VAQT BILAN ISHLASH

4.5.1.Arduino kechikishi: delay ()

Arduinoda delay () funksiyasi muhim rol o`ynaydi va bu buyruq aksariyat dasturni yozish deyarli mumkin emas. Arduino dasturlashda vaqtni kechiktirishning delay () buyrug`ining maqsadi va ishlatilishini quyida ko`rib chiqamiz. Hozir biz faqat delay kechiktirish funksiyasining asosiy xususiyatlarini ko`rib chiqamiz va kichik dasturlar shaklida foydalanish misolini keltiramiz. Ishlash uchun sizga faqat Arduino platasining o`zi kerak bo`ladi.

Arduinoda delay ()

delay buyrug`i belgilangan millisekundlar (1 soniyada 1000 millisekund) uchun dasturning bajarilishini to`xtatadi. delay () funksiyasidan foydalangan holda dasturning kechikishi paytida plataga ulangan sensorlarni o`qib bo`lmaydi yoki boshqa operatsiyalarni bajarish mumkin emas.

Dastur:

// Svetodiodni miltillashi uchun delay () dan foydalanish misoli

void setup () {

pinMode (13, OUTPUT);

}

void loop () {

digitalWrite (13, HIGH);//chiqishga YUQORI signal yuboring

delay (100); // 100 millisekundga kechikish vaqti

digitalWrite (13, LOW);//chiqishga PAST signalni yuboring

delay (100);} //100 millisekundga kechikish vaqti

4.6.MATEMATIK FUNKSIYALAR

4.6.1.Arduinoda map () funksiyasi

Arduinodagi map funksiyasi qiymatni joriy diapazondan parametrlar bilan ko`rsatilgan qiymatlarning yangi diapazoniga o`tkazadi – map qiymat, fromLow (pastdan), fromHigh (yuqoridan), toLow (pastga), toHigh (yuqoriga). map () buyrug`i faqat butun sonlarda ishlaydi. Raqamning kasr qismi proportsional uzatishda matematika qoidalariga ko`ra yaxlitlanmaydi, balki shunchaki o`chiriladi. Arduino IDE-da map funksiyasidan misollar bilan foydalanishni ko`rib chiqamiz.

Arduino IDE-da map funktsiyasi

map (qiymat, fromLow, fromHigh, toLow, toHigh)

*qiymat: belgilangan qiymat

*fromLow: joriy diapazonning pastki chegarasi

*fromHigh: joriy diapazonning yuqori chegarasi

*toLow: yangi diapazonning pastki chegarasi

*toHigh: yangi diapazonning yuqori chegarasi

Arduinoda map funksiyasiga misol:

void setup () {

pinMode (A1, INPUT); // analog sensorni ulang

pinMode (10, OUTPUT); //LEDni ulang

}

void loop () {

// «qiymat» o`zgaruvchisi 0 dan 1023 gacha

int qiymat = analogRead (A1);

//analog qiymatni 8 bitli raqamga o`zgartiring (0 dan 255 gacha)

qiymat = map (qiymat, 0, 1023, 0, 255);

//yangi «qiymat» qiymati bilan svetodiodni yoqing

analogWrite (10, qiymat);

}

map funktsiyasi diapazonni o`zgartirishi mumkinligini unutmang, ya`ni «pastki chegara» «yuqori chegara» dan kattaroq bo`lishi ham mumkin. Misol:

qiymat = map (qiymat, 0, 1023, 255, 0);

Eslatib o`tamiz, map () funksiyasi yordamida o`zgartirilganda raqamning kasr qismi yaxlitlanmaydi, balki o`chiriladi (hisobga olinmaydi). Arduino dasturlash tilida float ma`lumotlar turi bilan ishlashda bu faktni hisobga olish kerak.

4.7.TASODIFIY KATTALIKLAR GENERATORI

4.7.1.Arduinoda random va random Seed funksiyasi

Arduino rondom funksiyasi psevdo-tasodifiy raqamni qaytaradi, ya`ni tasodifiy sonlarni yaratish ketma-ketligi hali ham oldindan aytib bo`ladi. Random Seed funksiyasi ko`proq tasodifiy qiymatlarni yaratish uchun tasodifiy funksiyaga o`zgaruvchi yoki doimiyni qo`yish imkonini beradi. Arduino IDE dasturlash tilida ma’lum bir diapazondagi tasodifiy sonni qanday qilib to`g`ri belgilashni aniqlaymiz.