Indholdsfortegnelse:

Arduino -lommeregner: 6 trin
Arduino -lommeregner: 6 trin

Video: Arduino -lommeregner: 6 trin

Video: Arduino -lommeregner: 6 trin
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Oktober
Anonim
Arduino lommeregner
Arduino lommeregner

Programmering er altid sjovt, og Arduino er en vidunderlig platform, hvis du lige er begyndt med indlejret programmering. I denne vejledning bygger vi vores egen lommeregner med Arduino. Værdierne kan sendes ind via et tastatur (4 × 4 tastatur), og resultatet kan ses på en LCD-skærm (16 × 2 Dot-matrix). Denne lommeregner kunne udføre enkle operationer som addition, subtraktion, multiplikation og division med hele tal. Men når du forstår konceptet, kan du implementere selv videnskabelige funktioner med Arduinos indbyggede funktioner. I slutningen af dette projekt ved du, hvordan du bruger en 16x2 LCD og tastatur med Arduino, og også hvor let det er at programmere for dem ved hjælp af let tilgængelige biblioteker. Du vil også forstå, hvordan du programmerer din Arduino til at udføre en bestemt opgave.

Trin 1: Ting påkrævet

Arduino Uno (enhver version fungerer) 16 × 2 LCD -display 4 × 4 tastatur 9V batteri Brødbræt og tilslutningskabler

Trin 2: Kredsløbsdiagram

Kredsløbsdiagram
Kredsløbsdiagram

Trin 3: Arduino Calculator Program

Det komplette Arduino -program til dette projekt er givet i slutningen af dette projekt. Koden er opdelt i små meningsfulde bidder og forklaret nedenfor. Som tidligere fortalt, vil vi interface et LCD og tastatur med Arduino ved hjælp af biblioteker. Så lad os først tilføje dem til vores Arduino IDE. Biblioteket til LCD er allerede inkluderet i din Arduino som standard, så vi behøver ikke bekymre dig om det. For tastaturbibliotek klik på linket for at downloade det fra Github. Du får en ZIP -fil, og tilføj derefter denne lib til Arduino ved Sketch -> Inkluder bibliotek -> Tilføj. ZIP -fil, og peg placeringen til denne downloadede fil. Når det er gjort, er vi alle klar til programmering. Selvom vi har brugt et bibliotek til at bruge et tastatur, skal vi nævne få detaljer (vist nedenfor) om tastaturet til Arduino. Variablen ROWS og COLS fortæller, hvor mange rækker og kolonner vores tastatur har, og tastaturet viser den rækkefølge, tasterne findes på tastaturet. Tastaturet, som jeg bruger i dette projekt, ser sådan ud nedenfor til nøglekortet repræsenterer også det samme. Yderligere nedenfor har vi nævnt, til hvilke ben tastaturet er forbundet ved hjælp af variabel array rowPins og colPins.const byte ROWS = 4; // Fire rækker, konstant byte COLS = 4; // Tre kolonner // Definer Keymapchar -tasterne [ROWS] [COLS] = {{'1', '2', '3', 'A'}, {'4', '5', '6', ' B '}, {' 7 ',' 8 ',' 9 ',' C '}, {'*',' 0 ','#',' D '}}; byte rowPins [ROWS] = {0, 1, 2, 3}; // Tilslut tastaturet ROW0, ROW1, ROW2 og ROW3 til disse Arduino pins. Byte colPins [COLS] = {4, 5, 6, 7}; // Tilslut tastaturet COL0, COL1 og COL2 til disse Arduino -ben. Når vi har nævnt hvilken type tastatur vi bruger, og hvordan det er forbundet, kan vi oprette tastaturet ved hjælp af disse detaljer ved hjælp af linjen herunderKeyboard kpd = Tastatur (makeKeymap (nøgler)), rowPins, colPins, ROWS, COLS); // Opret tastaturet På samme måde skal vi også fortælle, hvilke ben på Arduino LCD'en er forbundet til. I henhold til vores kredsløbsdiagram ville definitionerne være som underkonstant int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Stifter, som LCD er forbundet til LiquidCrystal lcd (rs, en, d4, d5, d6, d7); // opret LCD -displayet Inde i opsætningsfunktionen viser vi bare projektets navn og fortsætter derefter til loop, hvor hovedprojektet ligger. Grundlæggende skal vi kontrollere, om der skrives noget på tastaturet, hvis det er tastet, skal vi genkende det hvad der bliver skrevet og derefter konvertere det til en variabel, når der trykkes på “=”, skal vi beregne resultatet og derefter endelig vise det på LCD -displayet. Dette er præcis, hvad der gøres inde i loop -funktionen som vist nedenforkey = kpd.getKey (); // lagring af trykket nøgleværdi i et charif (key! = NO_KEY) DetectButtons (); if (result == true) CalculateResult (); DisplayResult (); Hvad der sker inde i hver funktion, forklares ved hjælp af kommentarlinjerne, gå gennem den komplette kode herunder, rode rundt med den for at forstå, hvordan den rent faktisk fungerer. Hvis du er i tvivl om en bestemt linje, er du velkommen til at bruge kommentarfeltet eller fora.

Trin 4:

Trin 5: Arbejde med Arduino -lommeregner

Arbejde med Arduino -lommeregner
Arbejde med Arduino -lommeregner

Forbind forbindelserne i henhold til kredsløbsdiagram og upload koden herunder. Hvis det viser fejl, skal du sørge for at have tilføjet biblioteket i henhold til instruktionerne ovenfor. Du kan også prøve simuleringen for at kontrollere, om problemet er med din hardware. Hvis alt er udført, som det skal være, så vil din hardware se sådan ud nedenfor med LCD'en, der viser denne Arduino -lommeregner ved hjælp af 4x4 -tastatur i aktion Da tastaturet, der bruges her, ikke har ordentlige markeringer på det, har jeg antaget, at alfabeterne er operatører som angivet nedenfor Tegn på tastatur Antages at være “A” Addition (+) “B” Subtraktion (-) “C” Multiplikation (*) “D” Division (/) “*” Clear (C) “#” er lig med (=) Du kan bruge en markør til at skrive over, hvad hver knap faktisk repræsenterer. Med det gjort, kan du direkte begynde at bruge lommeregneren. Indtast nummeret og vises på den anden linje, tryk på operanden, og skriv dit andet nummer, og tryk endelig på "#" -tasten for at få dit resultat. Du kan også prøve at bygge denne Touchscreen -baserede Arduino -lommeregner.

Trin 6: Kode

/ * * Arduino -tastaturberegnerprogram */#inkluderer // Header -fil til LCD fra https://www.arduino.cc/en/Reference/LiquidCrystal#include // Header -fil til tastatur fra https://github.com/ Chris-A/tastaturkonst byte Rækker = 4; // Fire rækker, konstant byte COLS = 4; // Tre kolonner // Definer Keymapchar -tasterne [ROWS] [COLS] = {{'7', '8', '9', 'D'}, {'4', '5', '6', ' C '}, {' 1 ',' 2 ',' 3 ',' B '}, {'*',' 0 ','#',' A '}}; byte rowPins [ROWS] = {0, 1, 2, 3}; // Tilslut tastaturet ROW0, ROW1, ROW2 og ROW3 til disse Arduino -pins. Byte colPins [COLS] = {4, 5, 6, 7}; // Tilslut tastaturet COL0, COL1 og COL2 til disse Arduino -ben. Tastatur kpd = Tastatur (makeKeymap (nøgler), rowPins, colPins, ROWS, COLS); // Opret tastaturkonst int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Stifter, som LCD er forbundet til LiquidCrystal lcd (rs, en, d4, d5, d6, d7); langt Num1, Num2, Tal; kul nøgle, handling; boolsk resultat = falsk; ugyldig opsætning () {lcd.begin (16, 2); // Vi bruger et 16*2 LCD -display lcd.print ("DIY -lommeregner"); // Vis en introduktionsmeddelelse lcd.setCursor (0, 1); // indstil markøren til kolonne 0, linje 1 lcd.print ("-CircuitDigest"); // Vis en intro -meddelelsesforsinkelse (2000); // Vent på displayet for at vise info lcd.clear (); // Rens det derefter} void loop () {key = kpd.getKey (); // lagring af trykket nøgleværdi i et charif (key! = NO_KEY) DetectButtons (); if (result == true) CalculateResult (); DisplayResult (); } void DetectButtons () {lcd.clear (); // Rens derefter den hvis (key == '*') // Hvis der trykkes på annulleringsknappen {Serial.println ("Button Cancel"); Tal = Num1 = Num2 = 0; resultat = falsk;} hvis (key == '1') // Hvis der trykkes på knap 1 {Serial.println ("Knap 1"); hvis (tal == 0) tal = 1; ellers Tal = (Tal*10) + 1; // Tryk to gange} hvis (tast == '4') // Hvis der trykkes på knap 4 {Serial.println ("knap 4"); hvis (tal == 0) tal = 4; ellers Tal = (Tal*10) + 4; // Tryk to gange} hvis (tast == '7') // Hvis der trykkes på knap 7 {Serial.println ("knap 7"); hvis (tal == 0) tal = 7; ellers Tal = (Tal*10) + 7; // Tryk to gange} hvis (key == '0') {Serial.println ("Knap 0"); // Knap 0 trykkes, hvis (Tal == 0) Tal = 0; ellers Tal = (Tal*10) + 0; // Tryk to gange} hvis (key == '2') // Knap 2 trykkes på {Serial.println ("Knap 2"); hvis (tal == 0) tal = 2; ellers Tal = (Tal*10) + 2; // Trykket to gange} hvis (key == '5') {Serial.println ("Knap 5"); hvis (tal == 0) tal = 5; ellers Tal = (Tal*10) + 5; // Trykket to gange} hvis (key == '8') {Serial.println ("Knap 8"); hvis (tal == 0) tal = 8; ellers Tal = (Tal*10) + 8; // Tryk to gange} hvis (key == '#') {Serial.println ("Button Equal"); Num2 = Tal; resultat = sandt; } if (key == '3') {Serial.println ("Knap 3"); hvis (tal == 0) tal = 3; ellers Tal = (Tal*10) + 3; // Trykket to gange} hvis (key == '6') {Serial.println ("Knap 6"); hvis (tal == 0) tal = 6; ellers Tal = (Tal*10) + 6; // Trykt to gange} hvis (key == '9') {Serial.println ("Knap 9"); hvis (tal == 0) tal = 9; ellers Tal = (Tal*10) + 9; // Tryk to gange} hvis (tast == 'A' || tast == 'B' || tast == 'C' || tast == 'D') // Registrering af knapper i kolonne 4 {Num1 = tal; Antal = 0; if (key == 'A') {Serial.println ("Tilføjelse"); action = '+';} if (key == 'B') {Serial.println ("Subtraktion"); handling = '-'; } if (key == 'C') {Serial.println ("multiplikation"); action = '*';} if (key == 'D') {Serial.println ("Devesion"); handling = '/';} forsinkelse (100); }} void CalculateResult () {if (action == '+') Number = Num1+Num2; hvis (handling == '-') Tal = Num1-Num2; hvis (handling == '*') Tal = Num1*Num2; hvis (handling == '/') Tal = Num1/Num2; } ugyldig DisplayResult () {lcd.setCursor (0, 0); // indstil markøren til kolonne 0, linje 1 lcd.print (Num1); lcd.print (handling); lcd.print (Num2); hvis (resultat == sandt) {lcd.print ("="); lcd.print (Number);} // Vis resultatet lcd.setCursor (0, 1); // indstil markøren til kolonne 0, linje 1 lcd.print (tal); // Vis resultatet}

Anbefalede: