Mundarija:

Arduino kalkulyatori: 6 qadam
Arduino kalkulyatori: 6 qadam

Video: Arduino kalkulyatori: 6 qadam

Video: Arduino kalkulyatori: 6 qadam
Video: Уроки ардуино Простой калькулятор 2024, Iyul
Anonim
Arduino kalkulyatori
Arduino kalkulyatori

Dasturlash har doim qiziqarli va Arduino - bu ajoyib dastur, agar siz ko'milgan dasturlashni boshlayotgan bo'lsangiz. Ushbu qo'llanmada biz Arduino bilan o'z kalkulyatorimizni yaratamiz. Qiymatlar klaviatura (4 × 4 klaviatura) orqali yuborilishi mumkin va natijani LCD displeyda ko'rish mumkin (16 × 2 nuqta matritsasi). Bu kalkulyator qo'shish, ayirish, ko'paytirish va bo'linish kabi oddiy amallarni bajarishi mumkin. Agar siz kontseptsiyani tushunsangiz, Arduino -ning o'rnatilgan funktsiyalari yordamida hatto ilmiy funktsiyalarni ham amalga oshirishingiz mumkin, bu loyihaning oxirida siz Arduino bilan 16x2 o'lchamli LCD va klaviaturani qanday ishlatishni, shuningdek, ularni dastur yordamida osonlikcha dasturlash mumkinligini bilib olasiz. mavjud kutubxonalar. Shuningdek, siz Arduino -ni ma'lum bir vazifani bajarish uchun qanday dasturlashni tushunasiz.

1 -qadam: Kerakli narsalar

Arduino Uno (har qanday versiya ishlaydi) 16 × 2 LCD displey 4 × 4 klaviatura 9V batareya Non paneli va ulash simlari

2 -qadam: O'chirish diagrammasi

O'chirish diagrammasi
O'chirish diagrammasi

3 -qadam: Arduino kalkulyatori dasturi

Ushbu loyihaning to'liq Arduino dasturi loyihaning oxirida berilgan. Yuqorida aytib o'tilganidek, biz kutubxonalar yordamida Arduino bilan LCD va klaviatura interfeysiga o'tamiz. Keling, avval ularni Arduino IDE -ga qo'shamiz. LCD kutubxona sukut bo'yicha Arduino -ga kiritilgan, shuning uchun biz bu haqda tashvishlanmasligimiz kerak. Klaviatura kutubxonasi uchun Github -dan yuklab olish uchun havolani bosing. Siz ZIP faylini olasiz, so'ngra bu liboni Arduino by Sketch -> Kutubxonani qo'shish ->. ZIP faylini qo'shish va yuklangan faylga manzilini ko'rsatish. Kutubxonani klaviatura yordamida ishlatgan bo'lsak ham, biz Arduino klaviaturasi haqida bir nechta tafsilotlarni (quyida ko'rsatilgan) eslatib o'tamiz. ROWS va COLS o'zgaruvchilari bizning klaviaturamizda qancha satr va ustun borligini bildiradi va klaviatura xaritasi klaviaturada tugmalar mavjud bo'lish tartibini ko'rsatadi. Men bu loyihada ishlatayotgan klaviatura, xuddi shunday, xaritaning asosiy xaritasida ham xuddi shunday ko'rinadi. Keyingi satrda satrlar va colPins.const baytlari ROWS = 4 o'zgaruvchilari yordamida klaviatura qaysi pinlarga ulanganligi haqida quyida aytib o'tdik. // To'rt qatorli bayt COLS = 4; // Uchta ustun // Klaviatura tugmachalarini belgilang [ROWS] [COLS] = {{'1', '2', '3', 'A'}, {'4', '5', '6', ' B '}, {' 7 ',' 8 ',' 9 ',' C '}, {'*',' 0 ','#',' D '}}; bayt qatorlari [ROWS] = {0, 1, 2, 3}; // ROW0, ROW1, ROW2 va ROW3 klaviaturasini ushbu Arduino pinlariga ulang.byte colPins [COLS] = {4, 5, 6, 7}; // COL0, COL1 va COL2 klaviaturasini ushbu Arduino pinlariga ulang, biz qanday klaviatura turini ishlatayotganimizni va u qanday ulanganligini aytib o'tganimizdan so'ng, biz quyidagi ma'lumotlarni ishlatib, klaviaturani yaratishimiz mumkin Keypad kpd = Klaviatura (makeKeymap (tugmalar)), rowPins, colPins, ROWS, COLS); // Klaviaturani yarating Xuddi shunday, biz LCD displey Arduino -ning qaysi pinlariga ulanganligini ham aytishimiz kerak. Bizning sxemaga ko'ra, ta'riflar quyida ko'rsatilgandek bo'ladi int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // LCD ulangan pinlarLiquidCrystal lcd (rs, en, d4, d5, d6, d7); // LCD -ni yarating O'rnatish funktsiyasi ichida biz faqat loyihaning nomini ko'rsatamiz va keyin asosiy loyiha joylashgan loopga o'tamiz. Asosan, biz klaviaturada biror narsa yozilganligini tekshirishimiz kerak. "=" tugmachasi bosilganda nima yoziladi va keyin uni o'zgaruvchiga aylantiramiz, natijani hisoblab, so'ng uni LCD displeyda ko'rsatishimiz kerak. Bu pastda ko'rsatilganidek, pastadir funktsiyasida bajarilgan narsa = kpd.getKey (); // bosilgan kalit qiymatini xarifda saqlash (kalit! = NO_KEY) DetectButtons (); if (natija == rost) CalculateResult (); DisplayResult (); Har bir funktsiya ichida nima sodir bo'layotgani izoh satrlari yordamida tushuntiriladi, quyida keltirilgan to'liq koddan o'ting va uning qanday ishlashini tushunish uchun u bilan skripka qiling. Agar siz biron bir chiziq haqida shubhangiz bo'lsa, sharhlar bo'limidan yoki forumlardan foydalanishingiz mumkin.

4 -qadam:

5 -qadam: Arduino kalkulyatorining ishlashi

Arduino kalkulyatorining ishlashi
Arduino kalkulyatorining ishlashi

Ulanish sxemasini sxema bo'yicha bajaring va quyidagi kodni yuklang. Agar u xato ko'rsatsa, kutubxonani yuqoridagi ko'rsatmalarga muvofiq qo'shganingizga ishonch hosil qiling. Muammo sizning qurilmangizda ekanligini tekshirish uchun siz simulyatsiyani sinab ko'rishingiz mumkin. Agar hamma narsa kutilganidek bajarilgan bo'lsa, unda sizning apparatingiz quyidagicha ko'rinadi: LCD displeyda bu 4x4 klaviaturadan foydalanadigan Arduino kalkulyatori. Bu erda ishlatilgan klaviatura tegishli belgilarga ega emasligi sababli, men alifboni operator deb hisoblaganman. Quyida sanab o'tilgan Klaviaturadagi belgi "A" qo'shimchasi (+) "B" ayirish (-) "C" ko'paytirish (*) "D" bo'linmasi (/) "*" aniq (C) "#" ga teng (=) Har bir tugma nimani anglatishini yozish uchun markerdan foydalaning va shu bilan siz to'g'ridan -to'g'ri kalkulyatordan foydalanishni boshlashingiz mumkin. Raqamni yozing va ikkinchi qatorda paydo bo'ladi, operandni bosing va ikkinchi raqamingizni kiriting, natijada "#" tugmachasini bosing. Siz sensorli ekranli Arduino kalkulyatorini yaratishga harakat qilishingiz mumkin.

6 -qadam: kod

/ * * Arduino klaviatura kalkulyatori dasturi */#o'z ichiga oladi // LCD uchun sarlavha fayli https://www.arduino.cc/en/Reference/LiquidCrystal#include // Klaviatura uchun sarlavha fayli https://github.com/ Kris-A/Keypadconst bayt ROWS = 4; // To'rt qatorli bayt COLS = 4; // Uchta ustun // Klaviatura tugmachalarini belgilang [ROWS] [COLS] = {{'7', '8', '9', 'D'}, {'4', '5', '6', ' C '}, {' 1 ',' 2 ',' 3 ',' B '}, {'*',' 0 ','#',' A '}}; bayt qatorlari [ROWS] = {0, 1, 2, 3}; // ROW0, ROW1, ROW2 va ROW3 klaviaturasini ushbu Arduino pinlariga ulang.byte colPins [COLS] = {4, 5, 6, 7}; // COL0, COL1 va COL2 klaviaturasini ushbu Arduino pinlariga ulang. Keypad kpd = Klaviatura (makeKeymap (tugmalar), rowPins, colPins, ROWS, COLS); // Klaviatura panelini yarating int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // LCD ulangan pinlarLiquidCrystal lcd (rs, en, d4, d5, d6, d7); uzun Num1, Num2, Raqam; char tugmasi, harakat; boolean result = false; void setup () {lcd.begin (16, 2); // Biz 16*2 LCD displeydan foydalanmoqdamiz lcd.print ("DIY kalkulyatori"); // lcd.setCursor kirish xabarini ko'rsatish (0, 1); // kursorni 0-ustun, 1-qator lcd.print ("-CircuitDigest") ga o'rnating; // Kirish xabarining kechikishini ko'rsatish (2000); // displey ma'lumoti ko'rsatilishini kuting lcd.clear (); // Keyin tozalang} void loop () {key = kpd.getKey (); // bosilgan kalit qiymatini xarifda saqlash (kalit! = NO_KEY) DetectButtons (); if (natija == rost) CalculateResult (); DisplayResult (); } void DetectButtons () {lcd.clear (); // Keyin tozalang, agar (key == '*') // Bekor qilish tugmasi bosilsa {Serial.println ("Tugmani bekor qilish"); Raqam = Num1 = Num2 = 0; result = false;} if (key == '1') // Agar 1 -tugma bosilsa {Serial.println ("1 -tugma"); agar (Raqam == 0) Raqam = 1; else Raqam = (Raqam*10) + 1; // ikki marta bosildi} if (key == '4') // Agar 4 -tugma bosilsa {Serial.println ("Button 4"); agar (Raqam == 0) Raqam = 4; else Raqam = (Raqam*10) + 4; // ikki marta bosildi} if (key == '7') // Agar 7 -tugma bosilsa {Serial.println ("7 -tugma"); agar (Raqam == 0) Raqam = 7; else Raqam = (Raqam*10) + 7; // ikki marta bosildi} if (key == '0') {Serial.println ("Button 0"); // 0 tugmasi bosiladi, agar (Raqam == 0) Raqam = 0; else Raqam = (Raqam*10) + 0; // ikki marta bosildi} if (key == '2') // 2 -tugma bosilsa {Serial.println ("2 -tugma"); agar (Raqam == 0) Raqam = 2; else Raqam = (Raqam*10) + 2; // ikki marta bosildi} if (key == '5') {Serial.println ("5 -tugma"); agar (Raqam == 0) Raqam = 5; else Raqam = (Raqam*10) + 5; // ikki marta bosildi} if (key == '8') {Serial.println ("8 -tugma"); agar (Raqam == 0) Raqam = 8; else Raqam = (Raqam*10) + 8; // ikki marta bosildi} if (key == '#') {Serial.println ("Teng tugma"); Num2 = Raqam; natija = rost; } if (key == '3') {Serial.println ("3 -tugma"); agar (Raqam == 0) Raqam = 3; else Raqam = (Raqam*10) + 3; // ikki marta bosildi} if (key == '6') {Serial.println ("Button 6"); agar (Raqam == 0) Raqam = 6; else Raqam = (Raqam*10) + 6; // ikki marta bosildi} if (key == '9') {Serial.println ("9 -tugma"); agar (Raqam == 0) Raqam = 9; else Raqam = (Raqam*10) + 9; // ikki marta bosildi} agar (tugmachasi == 'A' || kalit == 'B' || kalit == 'C' || kalit == 'D') // 4 -ustunda tugmalarni aniqlash {Num1 = Raqam; Raqam = 0; if (key == 'A') {Serial.println ("Qo'shish"); harakat = '+';} if (key == 'B') {Serial.println ("Chiqarish"); harakat = '-'; } if (key == 'C') {Serial.println ("Ko'paytirish"); harakat = '*';} if (key == 'D') {Serial.println ("Devesion"); harakat = '/';} kechiktirish (100); }} void CalculateResult () {if (action == '+') Number = Num1+Num2; if (action == '-') Number = Num1-Num2; if (action == '*') Number = Num1*Num2; if (action == '/') Number = Num1/Num2; } void DisplayResult () {lcd.setCursor (0, 0); // kursorni 0 -ustun, 1 -qator lcd.print (Num1) ga o'rnating; lcd.print (harakat); lcd.print (Num2); agar (natija == rost) {lcd.print ("="); lcd.print (Raqam);} // Natijani ko'rsatish lcd.setCursor (0, 1); // kursorni 0 -ustun, 1 -qator lcd.print (Raqam) ga o'rnating; // Natijani ko'rsatish}

Tavsiya: