Mustaqil ish mavzu: Funksiyalar bilan ishlash (Serial monitorda haroratni ko‘rsatish, uzun o‘zgaruvchilardan foydalanish) Funktsiyalar bilan ishlash


№10 loyiha: Miltillashlar sonini o'rnatish uchun funktsiyani yaratish


Download 489.37 Kb.
bet2/7
Sana02.01.2023
Hajmi489.37 Kb.
#1075028
1   2   3   4   5   6   7
Bog'liq
Mustaqil ish bajardi Urnatilgan 2

№10 loyiha: Miltillashlar sonini o'rnatish uchun funktsiyani yaratish


Biz yaratgan funksiya juda cheklangan. Agar miltillashlar sonini va kechikishni o'rnatmoqchi bo'lsak-chi? Hammasi joyida; biz qiymatlarni o'zgartirishga imkon beruvchi funktsiyani yaratishimiz mumkin, masalan:
void blinkLED (int cycles, int del)
{
for ( int z = 0 ; z < sikllar ; z++ )
{
digitalWrite (LED, YUQORI);
kechikish (del); digitalWrite (LED, LOW);
kechikish (del);
}
}
Bizning yangi void blinkLED() funksiyamiz ikkita tamsayı qiymatni qabul qiladi: sikllar (biz LEDni miltillamoqchi bo'lgan marta soni) va del (LEDni yoqish va o'chirish o'rtasidagi kechikish vaqti). Shunday qilib, agar biz LEDni 12 marta 100 millisekundlik kechikish bilan miltillamoqchi bo'lsak, biz blinkLED(12, 100) dan foydalanamiz . Ushbu funktsiyani sinab ko'rish uchun IDE-ga quyidagi eskizni kiriting:
// Loyiha 10 - Miltillashlar sonini belgilash funksiyasini yaratish #define LED 13
bekor o'rnatish()
{
pinMode (LED, OUTPUT); }
void blinkLED (int cycles, int del)
{
for ( int z = 0 ; z < sikllar ; z++ )
{
raqamli yozish (LED, YUQORI);
kechikish (del); digitalWrite (LED, LOW);
kechikish (del);
}
}
void loop()
{  blinkLED(12, 100); kechikish (1000); }
 da 12 va 100 qiymatlari (mos ravishda miltillashlar soni va kechikish uchun) bizning maxsus funksiyamizga o'tganligini ko'rishingiz mumkin.
Funksiyalar bilan ishlash
blinkLED() , bunda sikllar 12 , del 100 qiymatiga ega bo'ladi . Shu sababli, LED miltillashlar orasida 100 millisekundlik kechikish bilan 12 marta miltillaydi.

Qiymatni qaytarish uchun funktsiya yaratish


Parametr sifatida kiritilgan qiymatlarni qabul qiluvchi funksiyalarni yaratishdan tashqari (loyiha 10 da void blinkLED() kabi), analogRead() oʻlchashda 0 va 1023 oraligʻidagi qiymatni qaytarganidek, qiymat qaytaruvchi funksiyalarni ham yaratishingiz mumkin. 8-loyihada ko'rsatilganidek, analogli kiritish. Shu nuqtaga qadar funksiyalar boshida paydo bo'ladigan bo'shliq , funktsiya hech narsani qaytarmasligini bildiradi, ya'ni funktsiyaning qaytish qiymati void . Haqiqiy qiymatlarni qaytaradigan ba'zi foydali funktsiyalarni yarataylik.
Selsiy gradusini Farengeytga aylantiradigan ushbu funktsiyani ko'rib chiqing:
float convertTemp(float selsiy)
{
float farengeyt = 0; farengeyt = (1,8 * Selsiy) + 32;
farengeytni qaytarish; }
Birinchi qatorda biz funktsiya nomini ( convertTemp ), uning qaytariladigan oʻzgaruvchisi turini ( float ) va funksiyaga oʻtkazmoqchi boʻlgan har qanday oʻzgaruvchini ( float celsius ) aniqlaymiz. Ushbu funktsiyadan foydalanish uchun biz unga mavjud o'zgaruvchini yuboramiz. Misol uchun, agar biz 40 daraja Selsiyni Farengeytga aylantirmoqchi bo'lsak va natijani tempf deb nomlangan float o'zgaruvchisida saqlamoqchi bo'lsak, biz convertTempni shunday chaqiramiz :

Bu 40 ni convertTemp o'zgaruvchan Selsiyga qo'yadi va uni convertTemp funksiyasida fahrenheit = (1,8 * Selsiy) + 32 hisoblashda ishlatadi . Natija so'ngra convertTemp satr qaytish fahrenheit bilan tempf o'zgaruvchisiga qaytariladi .

11 loyiha: haroratni miltillovchi tez o'qiladigan termometrni yaratish
Endi siz maxsus funktsiyalarni qanday yaratishni bilganingizdan so'ng, biz 4-bobdagi TMP36 harorat sensori va Arduino o'rnatilgan LED yordamida tez o'qiladigan termometrni yaratamiz. Agar harorat 20 darajadan past bo'lsa, LED ikki marta miltillaydi va keyin pauza qiladi; harorat tushib qolsa
5-bob
20 va 26 daraja oralig'ida, LED to'rt marta miltillaydi va keyin pauza qiladi; va agar harorat 26 darajadan yuqori bo'lsa, LED olti marta miltillaydi.
Biz eskizimizni yanada modulli qilamiz, uni alohida funksiyalarga ajratamiz, bu eskizni kuzatishni osonlashtiradi va funksiyalar qayta ishlatilishi mumkin bo‘ladi. Bizning termometrimiz ikkita asosiy vazifani bajaradi: haroratni o'lchash va tasniflash va LEDni ma'lum bir necha marta miltillash (harorat bilan belgilanadi).

Uskuna


Kerakli apparat minimal:

  • Bitta TMP36 harorat sensori

  • Bitta non taxtasi

  • Har xil ulanish simlari

  • Arduino va USB kabeli

Sxema


Sxema 5-1-rasmda ko'rsatilganidek, juda oddiy.

Funksiyalar bilan ishlash

Eskiz


Biz eskiz uchun ikkita funksiya yaratishimiz kerak. Birinchisi, TMP36 dan qiymatni o'qiydi, uni Selsiyga aylantiradi va keyin LED miltillashi kerak bo'lgan soniga mos keladigan 2 , 4 yoki 6 qiymatini qaytaradi. Buning uchun biz 8-loyihadagi eskizni o'zgartiramiz.
Ikkinchi funktsiyamiz uchun biz 9-loyihadan blinkLed() dan foydalanamiz. Bizning void siklimiz funksiyalarni tartibda chaqiradi va qayta ishga tushirishdan oldin 2 soniya pauza qiladi.
Eslatma Mavjud ishingizni tasodifan o'chirib tashlamaslik uchun o'zgartirilgan loyiha eskizlarini yangi fayl nomlari bilan saqlashni unutmang!
Eskiz uchun ushbu kodni IDE-ga kiriting:
// Loyiha 11 - Haroratni miltillovchi tez o'qiladigan termometrni yaratish #define LED 13 int miltillaydi = 0;
bekor o'rnatish()
{
pinMode (LED, OUTPUT); }
int checkTemp()
{
float kuchlanish = 0; float selsiy = 0; float hotTemp = 26; float coldTemp = 20; float sensori = 0; int natijasi; // harorat sensorini o'qing va natijani Selsiy gradusiga aylantiring
sensor = analogRead (0);
kuchlanish = (sensor * 5000) / 1024; // xom sensor qiymatini millivoltga aylantiring
kuchlanish = kuchlanish - 500; // kuchlanish ofsetini olib tashlash selsiy = kuchlanish / 10; // millivoltlarni Selsiyga aylantiring
// harorat oralig'ida harakat qiling, agar (selsiy < coldTemp)
{
natija = 2;
}
Aks holda (selsiy >= sovuq va& tselsiy <= issiqTemp)
{
natija = 4;
} boshqa
{
natija = 6; // (selsiy > issiq harorat)
}
natijani qaytarish; }
void blinkLED (int cycles, int del)
{
for ( int z = 0 ; z < sikllar ; z++ )
{
raqamli yozish (LED, YUQORI);
kechikish (del); digitalWrite (LED, LOW);
kechikish (del);
}
}
void loop()
{
miltillaydi = checkTemp(); miltillovchiLED(miltillaydi, 500); kechikish (2000); }
void_loop() da qilishimiz kerak bo'lgan narsa ularni chaqirish va kechikishni o'rnatishdir. checkTemp() funksiyasi miltillovchi butun son o'zgaruvchisiga qiymat qaytaradi va keyin blinkLED() 500 millisekundlik kechikish bilan LED miltillash vaqtini o'chiradi. Keyin eskiz takrorlashdan oldin 2 soniya to'xtab qoladi.
Eskizni yuklang va bu termometrni ishlayotganini ko'rish uchun LEDni tomosha qiling. (Ushbu sxemani yigʻilgan holda saqlang, chunki biz undan keyingi misollarda foydalanamiz.)

Download 489.37 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling