Sisukord:

Arduino kalkulaator: 6 sammu
Arduino kalkulaator: 6 sammu

Video: Arduino kalkulaator: 6 sammu

Video: Arduino kalkulaator: 6 sammu
Video: Уроки Arduino #6 - отработка нажатия кнопки при помощи флажков 2024, November
Anonim
Arduino kalkulaator
Arduino kalkulaator

Programmeerimine on alati lõbus ja Arduino on suurepärane platvorm, kui alles alustate sisseehitatud programmeerimist. Selles õpetuses ehitame Arduino abil oma kalkulaatori. Väärtusi saab sisestada klaviatuuri kaudu (4 × 4 klaviatuur) ja tulemust saab vaadata LCD-ekraanilt (16 × 2 punktmaatriks). See kalkulaator võib teha lihtsaid toiminguid, nagu liitmine, lahutamine, korrutamine ja täisarvudega jagamine. Kuid kui olete kontseptsioonist aru saanud, saate Arduino sisseehitatud funktsioonidega rakendada isegi teaduslikke funktsioone. Selle projekti lõpus saate teada, kuidas kasutada 16x2 LCD -ekraani ja klaviatuuri koos Arduinoga ning ka seda, kui lihtne on nende jaoks hõlpsasti programmeerida saadaolevad raamatukogud. Samuti saate aru, kuidas programmeerida oma Arduino teatud ülesande täitmiseks.

Samm: vajalikud asjad

Arduino Uno (mis tahes versioon töötab) 16 × 2 LCD -ekraan 4 × 4 klahvistik 9 V aku Leivaplaat ja juhtmete ühendamine

2. samm: vooluahela skeem

Lülitusskeem
Lülitusskeem

Samm: Arduino kalkulaatoriprogramm

Selle projekti täielik Arduino programm on antud selle projekti lõpus. Kood on jagatud väikesteks sisulisteks tükkideks ja seda selgitatakse allpool. Nagu varem öeldud, liidame teekide abil LCD -ekraani ja klahvistiku Arduinoga. Nii et lisame need kõigepealt meie Arduino IDE -sse. LCD -teek on teie Arduino vaikimisi juba kaasas, nii et me ei pea selle pärast muretsema. Klahvistiku kogu jaoks klõpsake lingil, et see Githubist alla laadida. Saate ZIP -faili, seejärel lisage see lib Arduinole Sketchi abil -> Kaasa raamatukogu -> Lisa. ZIP -fail ja suunake selle allalaaditud faili asukoht. Kui see on tehtud, oleme kõik programmeerimiseks valmis. Kuigi oleme klaviatuuri kasutamiseks kasutanud raamatukogu, peame Arduino klaviatuuri kohta mainima mõningaid üksikasju (näidatud allpool). Muutujad ROWS ja COLS näitavad, kui palju ridu ja veerge meie klaviatuuril on ning klahvikaart näitab klahvide klaviatuuril leidmise järjekorda. Klaviatuur, mida ma selles projektis kasutan, näeb võtmekaardilt välja selline. Allpool oleme maininud, milliste tihvtidega klaviatuur on ühendatud muutuva massiivi abil ridaPins ja colPins.const bait ROWS = 4; // Neli ridakonstituudi baiti COLS = 4; // Kolm veergu // Määrake võtmekaardi võtmed [ROWS] [COLS] = {{'1', '2', '3', 'A'}, {'4', '5', '6', ' B '}, {' 7 ',' 8 ',' 9 ',' C '}, {'*',' 0 ','#',' D '}}; bait rowPins [ROWS] = {0, 1, 2, 3}; // Ühendage klaviatuur ROW0, ROW1, ROW2 ja ROW3 nende Arduino nööpnõeltega. Baiti colPins [COLS] = {4, 5, 6, 7}; // Ühendage klaviatuur COL0, COL1 ja COL2 nende Arduino nööpnõeltega. Kui oleme maininud, millist tüüpi klaviatuuri kasutame ja kuidas see on ühendatud, saame klahvistiku luua nende üksikasjade abil, kasutades allolevat rida. Klahvistik kpd = Klahvistik (makeKeymap (võtmed), ridanõelad, kollanõelad, read, veerud); // Klaviatuuri loomine Samamoodi peame ka ütlema, milliste Arduino tihvtidega LCD on ühendatud. Vastavalt meie lülitusskeemile oleksid määratlused järgmised: int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Nööpnõelad, millega LCD on ühendatudLiquidCrystal lcd (rs, en, d4, d5, d6, d7); // LCD -ekraani loomine Seadistusfunktsiooni sees kuvame lihtsalt projekti nime ja liigume edasi samasse ahelasse, kus asub põhiprojekt. Põhimõtteliselt peame kontrollima, kas klaviatuuril midagi trükitakse, kui sisestame, siis peame ära tundma mida kirjutatakse ja seejärel teisendada see muutujaks, kui vajutada “=”, peame tulemuse välja arvutama ja seejärel lõpuks LCD -ekraanile kuvama. See on täpselt see, mida tehakse tsüklifunktsiooni sees, nagu allpool näidatud. Võti = kpd.getKey (); // vajutatud klahviväärtuse salvestamine sümbolisse (võti! = NO_KEY) DetectButtons (); if (result == true) CalculateResult (); DisplayResult (); Iga funktsiooni sees toimuvat selgitatakse kommentaariridade abil, vaadake läbi allolev täielik kood, uurige selle ümber, et mõista, kuidas see tegelikult töötab. Kui teil on konkreetse rea suhtes kahtlusi, kasutage julgelt kommentaaride jaotist või foorumeid.

4. samm:

Samm: Arduino kalkulaatori kasutamine

Arduino kalkulaatori töö
Arduino kalkulaatori töö

Tehke ühendused vastavalt skeemile ja laadige alla kood. Kui see näitab viga, veenduge, et olete teeki lisanud vastavalt ülaltoodud juhistele. Võite proovida ka simulatsiooni, et kontrollida, kas probleem on teie riistvaras. Kui kõik on tehtud nii, nagu peaks, siis näeb teie riistvara allpool välja selline, kus LCD kuvab selleArduino kalkulaator kasutab 4x4 klahvistikku tegevuses allpool loetletudTähemärk klaviatuuril Eeldatakse, et see on "A" liitmine (+) "B" lahutamine (-) "C" korrutamine (*) "D" jaotus (/) "*" Selge (C) "#" Võrdne (=) Saate kasutage markerit, et kirjutada, mida iga nupp tegelikult kujutab. Kui see on tehtud, saate otse kalkulaatorit kasutama hakata. Sisestage number ja ilmub teisele reale, vajutage operandi ja tippige oma teine number, lõpuks vajutage tulemuse saamiseks klahvi#. Võite proovida luua ka selle puuteekraanil põhineva Arduino kalkulaatori.

6. samm: kood

/ * * Arduino klahvistiku kalkulaatoriprogramm */#include // Päisefail LCD -le https://www.arduino.cc/en/Reference/LiquidCrystal#include // Klaviatuuri päisefail aadressilt https://github.com/ Chris-A/Klahvistiku bait RIDA = 4; // Neli ridakonstituudi baiti COLS = 4; // Kolm veergu // Määrake võtmekaardi võtmed [ROWS] [COLS] = {{'7', '8', '9', 'D'}, {'4', '5', '6', ' C '}, {' 1 ',' 2 ',' 3 ',' B '}, {'*',' 0 ','#',' A '}}; bait rowPins [ROWS] = {0, 1, 2, 3}; // Ühendage klaviatuur ROW0, ROW1, ROW2 ja ROW3 nende Arduino nööpnõeltega. Baiti colPins [COLS] = {4, 5, 6, 7}; // Ühenda klaviatuur COL0, COL1 ja COL2 nende Arduino nööpnõeltega. Klaviatuur kpd = Klaviatuur (makeKeymap (võtmed), rowPins, colPins, ROWS, COLS); // Klaviatuurikonstti loomine int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Nööpnõelad, millega LCD on ühendatudLiquidCrystal lcd (rs, en, d4, d5, d6, d7); pikk Num1, Num2, Number; char võti, tegevus; loogiline tulemus = vale; void setup () {lcd.begin (16, 2); // Kasutame 16*2 LCD -ekraani lcd.print ("DIY Calculator"); // Sissejuhatava teate kuvamine lcd.setCursor (0, 1); // määrake kursor veergu 0, rida 1 lcd.print ("-CircuitDigest"); // Kuva introsõnumi viivitus (2000); // Oodake, kuni ekraanil kuvatakse teave lcd.clear (); // Seejärel puhasta see} void loop () {key = kpd.getKey (); // vajutatud klahviväärtuse salvestamine sümbolisse (võti! = NO_KEY) DetectButtons (); if (result == true) CalculateResult (); DisplayResult (); } tühine DetectButtons () {lcd.clear (); // Seejärel puhasta see, kui (võti == '*') // Kui tühistamisnuppu vajutatakse {Serial.println ("Button Cancel"); Arv = arv1 = arv2 = 0; result = false;} if (key == '1') // Kui nuppu 1 vajutatakse {Serial.println ("Button 1"); kui (arv == 0) arv = 1; else Arv = (arv*10) + 1; // Vajutatakse kaks korda} if (võti == '4') // Kui nuppu 4 vajutatakse {Serial.println ("Nupp 4"); kui (arv == 0) arv = 4; else Arv = (arv*10) + 4; // Vajutatakse kaks korda} if (key == '7') // Kui nuppu 7 vajutatakse {Serial.println ("Button 7"); kui (arv == 0) arv = 7; else Arv = (arv*10) + 7; // Vajutati kaks korda} if (key == '0') {Serial.println ("Button 0"); // Nupule 0 vajutatakse, kui (Number == 0) Number = 0; else Arv = (arv*10) + 0; // Vajutatakse kaks korda}, kui (võti == '2') // Nupp 2 on vajutatud {Serial.println ("Button 2"); kui (arv == 0) arv = 2; else Arv = (arv*10) + 2; // Vajutati kaks korda} if (key == '5') {Serial.println ("Button 5"); kui (arv == 0) arv = 5; else Arv = (arv*10) + 5; // Vajutati kaks korda} if (key == '8') {Serial.println ("Button 8"); kui (arv == 0) arv = 8; else Arv = (arv*10) + 8; // Vajutati kaks korda} if (key == '#') {Serial.println ("Button Equal"); Num2 = arv; tulemus = tõene; } if (võti == '3') {Serial.println ("Button 3"); kui (arv == 0) arv = 3; else Arv = (arv*10) + 3; // Vajutati kaks korda} if (võti == '6') {Serial.println ("Button 6"); kui (arv == 0) arv = 6; else Arv = (arv*10) + 6; // Vajutati kaks korda} if (võti == '9') {Serial.println ("Button 9"); kui (arv == 0) arv = 9; else Arv = (arv*10) + 9; // Vajutati kaks korda} if (võti == 'A' || võti == 'B' || võti == 'C' || võti == 'D') // Nuppude tuvastamine veerus 4 {Num1 = Number; Arv = 0; if (võti == 'A') {Serial.println ("Lisamine"); action = '+';} if (võti == 'B') {Serial.println ("Lahutamine"); tegevus = '-'; } if (võti == 'C') {Serial.println ("Korrutamine"); action = '*';} if (võti == 'D') {Serial.println ("Devesion"); action = '/';} viivitus (100); }} tühine CalculateResult () {if (action == '+') Number = Num1+Num2; if (action == '-') Number = Num1-Num2; if (action == '*') Number = Num1*Num2; if (action == '/') Number = Num1/Num2; } tühine DisplayResult () {lcd.setCursor (0, 0); // määra kursor veergu 0, rida 1 lcd.print (Num1); lcd.print (tegevus); lcd.print (Num2); if (tulemus == tõene) {lcd.print ("="); lcd.print (arv);} // Kuva tulemus lcd.setCursor (0, 1); // määrake kursor veergu 0, rida 1 lcd.print (Number); // Kuva tulemus}

Soovitan: