Innehållsförteckning:

Arduino -räknare: 6 steg
Arduino -räknare: 6 steg

Video: Arduino -räknare: 6 steg

Video: Arduino -räknare: 6 steg
Video: Using HT1621 6 Digits Seven Segment LCD Display | Lesson 103: Arduino Step By Step Course 2024, November
Anonim
Arduino -kalkylator
Arduino -kalkylator

Programmering är alltid roligt och Arduino är en underbar plattform om du precis har börjat med inbäddad programmering. I denna handledning kommer vi att bygga vår egen miniräknare med Arduino. Värdena kan skickas in via en knappsats (4 × 4 knappsats) och resultatet kan ses på en LCD-skärm (16 × 2 Dot-matris). Denna räknare kan utföra enkla operationer som addition, subtraktion, multiplikation och division med heltal. Men när du väl förstår konceptet kan du implementera även vetenskapliga funktioner med Arduinos inbyggda funktioner. I slutet av detta projekt kommer du att veta hur du använder en 16x2 LCD och knappsats med Arduino och även hur enkelt det är att programmera för dem med hjälp av lätt tillgängliga bibliotek. Du kommer också att förstå hur du programmerar din Arduino för att utföra en viss uppgift.

Steg 1: Saker som krävs

Arduino Uno (valfri version fungerar) 16 × 2 LCD -skärm 4 × 4 knappsats 9V batteri Brödbräda och anslutningskablar

Steg 2: Kretsdiagram

Kretsdiagram
Kretsdiagram

Steg 3: Arduino Calculator Program

Det fullständiga Arduino -programmet för detta projekt ges i slutet av detta projekt. Koden är uppdelad i små meningsfulla bitar och förklaras nedan. Som tidigare berättat kommer vi att ansluta en LCD och knappsats till Arduino med hjälp av bibliotek. Så låt oss lägga till dem i vår Arduino IDE först. Biblioteket för LCD är redan inkluderat i din Arduino som standard så vi behöver inte oroa oss för det. För knappsatsbibliotek, klicka på länken för att ladda ner den från Github. Du får en ZIP -fil och lägger sedan till denna lib till Arduino med Sketch -> Inkludera bibliotek -> Lägg till. ZIP -fil och pekar platsen på den nedladdade filen. När vi är klara är vi redo för programmering. Även om vi har använt ett bibliotek för att använda en knappsats måste vi nämna några detaljer (visas nedan) om knappsatsen till Arduino. Variabeln ROWS och COLS visar hur många rader och kolumner vår knappsats har och tangentbordet visar i vilken ordning tangenterna finns på tangentbordet. Knappsatsen som jag använder i detta projekt ser ut så här nedan till nyckelkartan representerar också densamma. Ytterligare nedan har vi nämnt till vilka stift knappsatsen är ansluten med variabel array rowPins och colPins.const byte RADER = 4; // Fyra rader, konstant byte COLS = 4; // Tre kolumner // Definiera Keymapchar -tangenterna [RADER] [COLS] = {{'1', '2', '3', 'A'}, {'4', '5', '6', ' B '}, {' 7 ',' 8 ',' 9 ',' C '}, {'*',' 0 ','#',' D '}}; byte rowPins [ROWS] = {0, 1, 2, 3}; // Anslut knappsatsen ROW0, ROW1, ROW2 och ROW3 till dessa Arduino -stift. Byte colPins [COLS] = {4, 5, 6, 7}; // Anslut knappsats COL0, COL1 och COL2 till dessa Arduino -stift. När vi har nämnt vilken typ av knappsats vi använder och hur den är ansluten kan vi skapa knappsatsen med hjälp av dessa detaljer med raden nedan Tangentbord kpd = Tangentbord (makeKeymap (tangenter)), rowPins, colPins, ROWS, COLS); // Skapa knappsatsen På samma sätt måste vi också berätta för vilka stift på Arduino LCD -skärmen är ansluten till. Enligt vårt kretsschema skulle definitionerna vara som nedankonst int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Stift som LCD är ansluten till LiquidCrystal lcd (rs, en, d4, d5, d6, d7); // skapa LCDInnan installationsfunktionen visar vi bara projektets namn och fortsätter sedan till loop där huvudprojektet ligger. I grund och botten måste vi kontrollera om något skrivs på knappsatsen, om det skrivs måste vi känna igen vad som skrivs in och sedan konvertera det till en variabel när “=” trycks in måste vi beräkna resultatet och sedan slutligen visa det på LCD -skärmen. Detta är exakt vad som görs inuti slingfunktionen som visas nedan = kpd.getKey (); // lagra tryckt nyckelvärde i en charif (key! = NO_KEY) DetectButtons (); if (result == true) CalculateResult (); DisplayResult (); Vad som händer inuti varje funktion förklaras med hjälp av kommentarsraderna, gå igenom hela koden nedan, busa med det för att förstå hur det faktiskt fungerar. Om du har några tvivel om en specifik rad, använd gärna kommentarsektionen eller forumet.

Steg 4:

Steg 5: Arbeta med Arduino Calculator

Arduino Calculator fungerar
Arduino Calculator fungerar

Gör anslutningarna enligt kretsschema och ladda upp koden nedan. Om det visar fel, se till att du har lagt till biblioteket enligt instruktionerna ovan. Du kan också prova simuleringen för att kontrollera om problemet är med din maskinvara. Om allt är gjort som det ska vara, kommer din hårdvara att se ut ungefär så här nedan med LCD -skärmen som visar denna Arduino -kalkylator med hjälp av 4x4 -knappsatsen i funktion Eftersom knappsatsen som används här inte har rätt markeringar på den har jag antagit att alfabetet är operatörer som listas nedan Tecken på knappsatsen Antas vara "A" Addition (+) "B" Subtraktion (-) "C" Multiplikation (*) "D" Division (/) "*" Clear (C) "#" är lika med (=) Du kan Använd en markör för att skriva över vad varje knapp faktiskt representerar. Med det gjort kan du börja använda miniräknaren direkt. Skriv numret och kommer att visas på den andra raden, tryck på operanden och skriv ditt andra nummer och tryck slutligen på "#" -knappen för att få ditt resultat. Du kan också försöka bygga den här pekskärmsbaserade Arduino -kalkylatorn.

Steg 6: Kod

/ * * Arduino knappsatsberäknare Program */#inkluderar // Rubrikfil för LCD från https://www.arduino.cc/en/Reference/LiquidCrystal#include // Rubrikfil för knappsats från https://github.com/ Chris-A/Tangentbordkonst byte RADER = 4; // Fyra rader, konstant byte COLS = 4; // Tre kolumner // Definiera Keymapchar -tangenterna [RADER] [COLS] = {{'7', '8', '9', 'D'}, {'4', '5', '6', ' C '}, {' 1 ',' 2 ',' 3 ',' B '}, {'*',' 0 ','#',' A '}}; byte rowPins [ROWS] = {0, 1, 2, 3}; // Anslut knappsatsen ROW0, ROW1, ROW2 och ROW3 till dessa Arduino -stift. Byte colPins [COLS] = {4, 5, 6, 7}; // Anslut knappsats COL0, COL1 och COL2 till dessa Arduino -pinnar. Tangentbord kpd = Knappsats (makeKeymap (nycklar), rowPins, colPins, ROWS, COLS); // Skapa tangentbordskonsten int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Stift som LCD är ansluten till LiquidCrystal lcd (rs, en, d4, d5, d6, d7); långa Num1, Num2, Antal; röding nyckel, handling; booleskt resultat = falskt; void setup () {lcd.begin (16, 2); // Vi använder en 16*2 LCD -skärm lcd.print ("DIY -kalkylator"); // Visa ett introduktionsmeddelande lcd.setCursor (0, 1); // ställ markören till kolumn 0, rad 1 lcd.print ("-CircuitDigest"); // Visa en intro -meddelandefördröjning (2000); // Vänta tills displayen visar information lcd.clear (); // Rensa det sedan} void loop () {key = kpd.getKey (); // lagra tryckt nyckelvärde i en charif (key! = NO_KEY) DetectButtons (); if (result == true) CalculateResult (); DisplayResult (); } void DetectButtons () {lcd.clear (); // Rengör sedan den om (key == '*') // Om Avbryt -knappen trycks in {Serial.println ("Knappavbryt"); Tal = Num1 = Num2 = 0; result = false;} if (key == '1') // Om knapp 1 trycks in {Serial.println ("Button 1"); om (Number == 0) Number = 1; annars Antal = (Tal*10) + 1; // Tryckt två gånger} om (key == '4') // Om knapp 4 trycks ned {Serial.println ("knapp 4"); om (Number == 0) Number = 4; annars Antal = (Tal*10) + 4; // Tryckt två gånger} om (key == '7') // Om knapp 7 trycks ned {Serial.println ("knapp 7"); om (Number == 0) Number = 7; annars Antal = (Tal*10) + 7; // Tryckt två gånger} if (key == '0') {Serial.println ("Knapp 0"); // Knapp 0 trycks om (Number == 0) Number = 0; annars Antal = (Tal*10) + 0; // Tryckt två gånger} om (key == '2') // Knapp 2 trycks {Serial.println ("Knapp 2"); om (Number == 0) Number = 2; annars Antal = (Tal*10) + 2; // Tryckt två gånger} if (key == '5') {Serial.println ("Knapp 5"); om (Number == 0) Number = 5; annars Antal = (Tal*10) + 5; // Tryckt två gånger} if (key == '8') {Serial.println ("Knapp 8"); om (Number == 0) Number = 8; annars Antal = (Tal*10) + 8; // Tryckt två gånger} if (key == '#') {Serial.println ("Button Equal"); Num2 = Tal; resultat = sant; } if (key == '3') {Serial.println ("Knapp 3"); om (Number == 0) Number = 3; annars Antal = (Tal*10) + 3; // Tryckt två gånger} if (key == '6') {Serial.println ("Knapp 6"); om (Number == 0) Number = 6; annars Antal = (Tal*10) + 6; // Tryckt två gånger} if (key == '9') {Serial.println ("Knapp 9"); om (Number == 0) Number = 9; annars Antal = (Tal*10) + 9; // Tryckt två gånger} if (key == 'A' || key == 'B' || key == 'C' || key == 'D') // Detecting Buttons on Column 4 {Num1 = Number; Antal = 0; if (key == 'A') {Serial.println ("Tillägg"); action = '+';} if (key == 'B') {Serial.println ("Subtraktion"); action = '-'; } if (key == 'C') {Serial.println ("multiplikation"); action = '*';} if (key == 'D') {Serial.println ("Devesion"); action = '/';} fördröjning (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); // ställ markören till kolumn 0, rad 1 lcd.print (Num1); lcd.print (åtgärd); lcd.print (Num2); if (resultat == true) {lcd.print ("="); lcd.print (Number);} // Visa resultatet lcd.setCursor (0, 1); // ställ markören till kolumn 0, rad 1 lcd.print (Number); // Visa resultatet}

Rekommenderad: