Բովանդակություն:

Arduino հաշվիչ `6 քայլ
Arduino հաշվիչ `6 քայլ

Video: Arduino հաշվիչ `6 քայլ

Video: Arduino հաշվիչ `6 քայլ
Video: Lesson 06: Arduino Data Types | Robojax Arduino Step By Step Course 2024, Նոյեմբեր
Anonim
Arduino հաշվիչ
Arduino հաշվիչ

Programրագրավորումը միշտ զվարճալի է, և Arduino- ն հիանալի հարթակ է, եթե նոր եք սկսում ներկառուցված ծրագրավորումը: Այս ձեռնարկում մենք կկառուցենք մեր սեփական հաշվիչը Arduino- ի հետ: Արժեքները կարող են ուղարկվել ստեղնաշարի միջոցով (4 × 4 ստեղնաշար), իսկ արդյունքը կարելի է դիտել LCD էկրանով (16 × 2 կետային մատրիցա): Այս հաշվիչը կարող է կատարել պարզ գործողություններ ՝ լրացում, հանում, բազմապատկում և բաժանում ամբողջ թվերով: Բայց երբ հասկացաք հայեցակարգը, կարող եք իրականացնել նույնիսկ գիտական գործառույթներ Arduino- ի ներկառուցված գործառույթներով: Այս նախագծի վերջում դուք կիմանաք, թե ինչպես օգտագործել 16x2 LCD և ստեղնաշար Arduino- ի հետ, ինչպես նաև այն, թե որքան հեշտ է նրանց համար հեշտությամբ ծրագրավորելը: մատչելի գրադարաններ: Դուք նաև կհասկանաք, թե ինչպես ծրագրավորել ձեր Arduino- ն որոշակի առաջադրանք կատարելու համար:

Քայլ 1: Պահանջվող բաներ

Arduino Uno (versionանկացած տարբերակ կաշխատի) 16 × 2 LCD էկրան 4 × 4 ստեղնաշար 9 Վ մարտկոց Թղթապանակ և միացնող լարեր

Քայլ 2: Շղթայի դիագրամ

Շղթայի դիագրամ
Շղթայի դիագրամ

Քայլ 3. Arduino հաշվիչ ծրագիր

Այս նախագծի ավարտին տրվում է այս նախագծի ամբողջական Arduino ծրագիրը: Կոդը բաժանված է փոքր իմաստալից կտորների և բացատրվում է ստորև: Ինչպես արդեն նշվեց, մենք մտադիր ենք գրադարանների միջոցով միացնել LCD և ստեղնաշար Arduino- ի հետ: Այսպիսով, եկեք դրանք առաջին հերթին ավելացնենք մեր Arduino IDE- ին: LCD- ի գրադարանն արդեն լռելյայն ներառված է ձեր Arduino- ում, այնպես որ մենք դրա մասին չպետք է անհանգստանանք: Ստեղնաշարի գրադարանի համար կտտացրեք հղմանը ՝ այն Github- ից ներբեռնելու համար: Դուք կստանաք ZIP ֆայլ, այնուհետև ավելացրեք այս lib- ը Arduino- ին Sketch by -> Include Library -> Add. ZIP ֆայլով և նշեք տեղադրությունը այս ներբեռնված ֆայլին: Ավարտելուց հետո մենք բոլորս պատրաստ ենք ծրագրավորման: Թեև մենք օգտագործել ենք գրադարան `ստեղնաշարի օգտագործման համար, բայց մենք պետք է նշենք Arduino- ի ստեղնաշարի վերաբերյալ մի քանի մանրամասներ (ստորև ներկայացված է): ROWS և COLS փոփոխականները կասեն, թե քանի տող և սյունակ ունի մեր ստեղնաշարը, և ստեղնաշարի քարտեզը ցույց է տալիս ստեղնաշարի վրա ստեղների ներկայացման կարգը: Ստեղնաշարը, որը ես օգտագործում եմ այս նախագծում, ստորև այսպիսին է ՝ առանցքային քարտեզում նույնպես նույնն է: Հետևյալը մենք նշեցինք, թե որ կապում է ստեղնաշարը միացված փոփոխական զանգվածի շարանների և կոլպինների միջոցով: կառուցել բայթ ROWS = 4; // Չորս տող կոնստրուկտոր բայթ COLS = 4; // Երեք սյունակ // Սահմանեք Keymapchar ստեղները [ROWS] [COLS] = {{'1', '2', '3', 'A'}, {'4', '5', '6', ' B '}, {' 7 ',' 8 ',' 9 ',' C '}, {'*',' 0 ','#',' D '}}; բայթ rowPins [ROWS] = {0, 1, 2, 3}; // Միացրեք ստեղնաշարը ROW0, ROW1, ROW2 և ROW3 Arduino- ի այս կապումներին: byte colPins [COLS] = {4, 5, 6, 7}; // Միացրեք COL0, COL1 և COL2 ստեղնաշարը Arduino- ի այս կապումներին: Երբ մենք նշեցինք, թե ինչ տիպի ստեղնաշար ենք օգտագործում և ինչպես է այն միացված, մենք կարող ենք ստեղծել ստեղնաշարը `օգտագործելով այդ մանրամասները ստորև նշված տողի միջոցով Keypad kpd = Keypad (makeKeymap (keys)), rowPins, colPins, ROWS, COLS); // Ստեղծեք ստեղնաշար Նմանապես, մենք նաև պետք է ասենք, թե Arduino- ի որ պիներին է LCD- ն միացված: Ըստ մեր սխեմայի դիագրամի, սահմանումները կլինեն ստորև ՝ int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // կապում, որոնց LCD- ն միացված է LiquidCrystal LCD (rs, en, d4, d5, d6, d7); // Ստեղծեք LCD- ը Կարգավորման գործառույթի ներսում մենք պարզապես ցուցադրում ենք ծրագրի անունը և այնուհետև անցնում դեպի հանգույց, որտեղ գտնվում է հիմնական նախագիծը: Հիմնականում մենք պետք է ստուգենք, արդյոք ստեղնաշարի վրա որևէ բան մուտքագրվու՞մ է, եթե մուտքագրված է, մենք պետք է ճանաչենք այն, ինչ մուտքագրվում է, և այն վերածվում է փոփոխականի, երբ «=» -ը սեղմվում է, մենք պետք է հաշվարկենք արդյունքը, այնուհետև այն վերջապես ցուցադրենք LCD- ով: Սա հենց այն է, ինչ կատարվում է օղակի գործառույթի ներսում, ինչպես ցույց է տրված ստորև keykey = kpd.getKey (); // սեղմված ստեղնային արժեքի պահում charif- ում (բանալի! = NO_KEY) DetectButtons (); if (result == true) CalculateResult (); DisplayResult (); Այն, ինչ տեղի է ունենում յուրաքանչյուր ֆունկցիայի ներսում, բացատրվում է մեկնաբանությունների տողերի միջոցով, անցեք ստորև ներկայացված ամբողջական ծածկագրով, շրջանցեք դրանով ՝ հասկանալու համար, թե իրականում ինչպես է այն աշխատում: Եթե որևէ կասկած ունեք որևէ կոնկրետ գծի վերաբերյալ, ազատ զգացեք օգտագործել մեկնաբանությունների բաժինը կամ ֆորումները:

Քայլ 4:

Քայլ 5. Arduino հաշվիչի աշխատանք

Աշխատում է Arduino հաշվիչով
Աշխատում է Arduino հաշվիչով

Կատարեք միացումները սխեմայի համաձայն և վերբեռնեք ներքևի ծածկագիրը: Եթե այն ցույց է տալիս սխալ, համոզվեք, որ գրադարանը ավելացրել եք վերը տրված հրահանգի համաձայն: Կարող եք նաև փորձել սիմուլյացիան ՝ ստուգելու, արդյոք խնդիրը ձեր սարքաշարի հետ է: Եթե ամեն ինչ արվի այնպես, ինչպես ենթադրվում էր, ապա ձեր սարքավորումները այսպիսի տեսք կունենան ստորև ՝ LCD- ով ցուցադրելով այս Arduino հաշվիչը ՝ օգտագործելով 4x4 ստեղնաշարի գործողություն ստորև թվարկված Ստեղնաշարի կերպար Ենթադրվում է, որ «A» հավելում (+) «B» հանում (-) «C» բազմապատկում (*) «D» բաժանում (/) «*» Մաքրել (C) «#» հավասար է (=) Դուք կարող եք օգտագործեք մարկեր ՝ յուրաքանչյուր կոճակի իրական պատկերների վրա գրելու համար: Դրանով դուք կարող եք ուղղակիորեն սկսել օգտագործել հաշվիչը: Մուտքագրեք համարը և կհայտնվի երկրորդ տողում, սեղմեք օպերանդը և մուտքագրեք ձեր երկրորդ համարը, վերջապես սեղմեք «#» ստեղնը ՝ ձեր արդյունքը ստանալու համար: Կարող եք նաև ստեղծել Touchscreen- ի վրա հիմնված Arduino հաշվիչ:

Քայլ 6: Կոդ

/ * * Arduino Keypad հաշվիչ ծրագիր */#ներառում // LCD- ի վերնագրի ֆայլ ՝ https://www.arduino.cc/en/Reference/LiquidCrystal#include // Keypad- ի վերնագրի ֆայլ ՝ https://github.com/ Chris-A/Keypadconst byte ROWS = 4; // Չորս տող կոնստրուկտոր բայթ COLS = 4; // Երեք սյունակ // Սահմանեք Keymapchar ստեղները [ROWS] [COLS] = {{'7', '8', '9', 'D'}, {'4', '5', '6', ' C '}, {' 1 ',' 2 ',' 3 ',' B '}, {'*',' 0 ','#',' A '}}; բայթ rowPins [ROWS] = {0, 1, 2, 3}; // Միացրեք ստեղնաշարը ROW0, ROW1, ROW2 և ROW3 Arduino- ի այս կապումներին: byte colPins [COLS] = {4, 5, 6, 7}; // Միացրեք ստեղնաշարը COL0, COL1 և COL2 Arduino- ի այս կապումներին: Keypad kpd = Keypad (makeKeymap (ստեղներ), rowPins, colPins, ROWS, COLS); // Ստեղծեք Keypadconst int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // կապում, որոնց LCD- ն միացված է LiquidCrystal LCD (rs, en, d4, d5, d6, d7); երկար Num1, Num2, Number; char բանալին, գործողությունը; բուլյան արդյունք = կեղծ; void setup () {lcd.begin (16, 2); // Մենք օգտագործում ենք 16*2 LCD էկրան lcd.print («DIY հաշվիչ»); // Displayուցադրել ներածական հաղորդագրություն lcd.setCursor (0, 1); // կուրսորը սահմանել 0 սյունակի վրա, տող 1 lcd.print ("-CircuitDigest"); // Displayուցադրել ներածական հաղորդագրության հետաձգում (2000); // Սպասեք, մինչև ցուցադրումը ցույց տա տեղեկատվությունը lcd.clear (); // Այնուհետեւ մաքրեք այն} void loop () {key = kpd.getKey (); // սեղմված ստեղնային արժեքի պահում charif- ում (բանալի! = NO_KEY) DetectButtons (); if (result == true) CalculateResult (); DisplayResult (); } void DetectButtons () {lcd.clear (); // Այնուհետեւ մաքրեք այն, եթե (key == '*') // Եթե չեղյալ է հայտարարվում կոճակը սեղմված է {Serial.println ("Button Cancel"); Թիվ = Num1 = Num2 = 0; արդյունք = կեղծ;} եթե (բանալին == '1') // Եթե կոճակը 1 սեղմված է {Serial.println ("Կոճակ 1"); եթե (Թիվ == 0) Թիվ = 1; else Number = (Number*10) + 1; // Երկու անգամ սեղմված} if (key == '4') // If 4 կոճակը սեղմված է {Serial.println ("Button 4"); եթե (Թիվ == 0) Թիվ = 4; else Number = (Number*10) + 4; // Երկու անգամ սեղմված} if (key == '7') // If 7 կոճակը սեղմված է {Serial.println ("Button 7"); եթե (Թիվ == 0) Թիվ = 7; else Number = (Number*10) + 7; // Երկու անգամ սեղմված} if (key == '0') {Serial.println ("Button 0"); // Կոճակը 0 սեղմված է, եթե (Թիվ == 0) Թիվ = 0; else Number = (Number*10) + 0; // Երկու անգամ սեղմված} if (key == '2') // Button 2 սեղմված է {Serial.println ("Button 2"); եթե (Թիվ == 0) Թիվ = 2; else Number = (Number*10) + 2; // Երկու անգամ սեղմված} if (key == '5') {Serial.println ("Button 5"); եթե (Թիվ == 0) Թիվ = 5; else Number = (Number*10) + 5; // Երկու անգամ սեղմված} if (key == '8') {Serial.println ("Button 8"); եթե (Թիվ == 0) Թիվ = 8; else Number = (Number*10) + 8; // Երկու անգամ սեղմված} if (key == '#') {Serial.println ("Button Equal"); Num2 = համար; արդյունք = ճշմարիտ; } if (key == '3') {Serial.println ("Button 3"); եթե (Թիվ == 0) Թիվ = 3; else Number = (Number*10) + 3; // Երկու անգամ սեղմված} if (key == '6') {Serial.println ("Button 6"); եթե (Թիվ == 0) Թիվ = 6; else Number = (Number*10) + 6; // Երկու անգամ սեղմված} if (key == '9') {Serial.println ("Button 9"); եթե (Թիվ == 0) Թիվ = 9; else Number = (Number*10) + 9; // Երկու անգամ սեղմված} if (key == 'A' || key == 'B' || key == 'C' || key == 'D') // 4 -րդ սյունակում կոճակների հայտնաբերում {Num1 = համար; Թիվ = 0; if (key == 'A') {Serial.println ("Addition"); գործողություն = '+';} if (key == 'B') {Serial.println ("Հանում"); գործողություն = '-'; } if (key == 'C') {Serial.println ("Բազմապատկում"); action = '*';} if (key == 'D') {Serial.println ("Devesion"); գործողություն = '/';} ուշացում (100); }} void CalculateResult () {if (action == '+') Number = Num1+Num2; եթե (գործողություն == '-') Թիվ = Num1-Num2; if (գործողություն == '*') Թիվ = Num1*Num2; եթե (գործողություն == '/') Թիվ = Num1/Num2; } void DisplayResult () {lcd.setCursor (0, 0); // կուրսորը սահմանել 0 -րդ սյունակի վրա, տող 1 lcd.print (Num1); lcd.print (գործողություն); lcd.print (Num2); եթե (արդյունք == ճշմարիտ) {lcd.print ("="); lcd.print (համարը);} // Displayուցադրել արդյունքը lcd.setCursor (0, 1); // կուրսորը սահմանել 0 սյունակի վրա, տող 1 lcd.print (Number); // Displayուցադրել արդյունքը}

Խորհուրդ ենք տալիս: