ዝርዝር ሁኔታ:

የአርዱዲኖ ካልኩሌተር 6 ደረጃዎች
የአርዱዲኖ ካልኩሌተር 6 ደረጃዎች

ቪዲዮ: የአርዱዲኖ ካልኩሌተር 6 ደረጃዎች

ቪዲዮ: የአርዱዲኖ ካልኩሌተር 6 ደረጃዎች
ቪዲዮ: Arduino በከፊል ሲብራራ https://t.me/arduinoshopping 2024, ህዳር
Anonim
አርዱዲኖ ካልኩሌተር
አርዱዲኖ ካልኩሌተር

በተከተተ መርሃ ግብር ገና ከጀመሩ ፕሮግራሚንግ ሁል ጊዜ አስደሳች እና አርዱኢኖ ግሩም መድረክ ነው። በዚህ መማሪያ ውስጥ እኛ ከአርዱዲኖ ጋር የራሳችንን ካልኩሌተር እንገነባለን። እሴቶቹ በቁልፍ ሰሌዳ (4 × 4 ቁልፍ ሰሌዳ) በኩል ሊላኩ ይችላሉ እና ውጤቱም በኤልሲዲ ማያ ገጽ (16 × 2 ነጥብ-ማትሪክስ) ላይ ሊታይ ይችላል። ይህ ካልኩሌተር እንደ መደመር ፣ መቀነስ ፣ ማባዛት እና መከፋፈል ያሉ ቀላል አሰራሮችን በሙሉ ቁጥሮች ማከናወን ይችላል። ግን ጽንሰ -ሐሳቡን ከተረዱ በኋላ በአርዲኖ በተሠሩ ተግባራት ሳይንሳዊ ተግባሮችን እንኳን መተግበር ይችላሉ። በዚህ ፕሮጀክት መጨረሻ ላይ 16x2 LCD ን እና የቁልፍ ሰሌዳውን ከአርዱዲኖ ጋር እንዴት እንደሚጠቀሙ እና እንዲሁም በቀላሉ ለእነሱ ፕሮግራም ማድረግ ለእነሱ እንዴት ቀላል እንደሆነ ያውቃሉ። የሚገኙ ቤተ -መጻሕፍት። እንዲሁም አንድን የተወሰነ ተግባር ለመፈፀም አርዱዲኖዎን እንዴት ፕሮግራም እንደሚያዘጋጁ ይረዱዎታል።

ደረጃ 1: የሚያስፈልጉ ነገሮች

አርዱዲኖ ኡኖ (ማንኛውም ስሪት ይሠራል) 16 × 2 LCD ማሳያ 4 × 4 የቁልፍ ሰሌዳ 9 ቪ ባትሪ የዳቦ ሰሌዳ እና ሽቦዎችን ማገናኘት

ደረጃ 2 የወረዳ ዲያግራም

የወረዳ ዲያግራም
የወረዳ ዲያግራም

ደረጃ 3: አርዱዲኖ ካልኩሌተር ፕሮግራም

ለዚህ ፕሮጀክት የተሟላ የአርዱዲኖ ፕሮግራም በዚህ ፕሮጀክት መጨረሻ ላይ ተሰጥቷል። ኮዱ ወደ ትናንሽ ትርጉም ያላቸው ቁርጥራጮች ተከፋፍሎ ከዚህ በታች ተብራርቷል። ቀደም ሲል እንደተነገረው ቤተ -መጽሐፍትን በመጠቀም ኤልዲዲ እና የቁልፍ ሰሌዳ ከአርዱዲኖ ጋር እናገናኛለን። ስለዚህ በመጀመሪያ ወደ እኛ አርዱዲኖ አይዲኢ እንጨምርላቸው። ለኤልሲዲ ቤተ -መጽሐፍት ቀድሞውኑ በነባሪዎ በአርዱዲኖ ውስጥ ተካትቷል ስለዚህ እኛ መጨነቅ አያስፈልገንም። ለቁልፍ ሰሌዳ ቤተ -መጽሐፍት ከጊቱብ ለማውረድ አገናኙን ጠቅ ያድርጉ። የዚፕ ፋይል ያገኛሉ ፣ ከዚያ ይህንን ሊብ በአርዲኖ በ Sketch -> ቤተ -መጽሐፍትን ያካትቱ ->. ZIP ፋይል ያክሉ እና ቦታውን ወደዚህ የወረደ ፋይል ያመልክቱ። አንዴ ከተጠናቀቅን ሁላችንም ለፕሮግራም ተዘጋጅተናል። ምንም እንኳን የቁልፍ ሰሌዳ ለመጠቀም ቤተመጽሐፍት ብንጠቀምም ስለ ቁልፍ ሰሌዳው ወደ አርዱinoኖ ጥቂት ዝርዝሮችን (ከዚህ በታች ይታያል) መጥቀስ አለብን። ተለዋዋጭ ROWS እና COLS የእኛ ቁልፍ ሰሌዳ ምን ያህል ረድፎች እና ዓምዶች እንደሚነግሩት እና የቁልፍ ሰሌዳው በቁልፍ ሰሌዳው ላይ ቁልፎቹ የሚገኙበትን ቅደም ተከተል ያሳያል። እኔ በዚህ ፕሮጀክት ውስጥ የምጠቀምበት የቁልፍ ሰሌዳ ከዚህ በታች ለቁልፍ ካርታው እንዲሁ ይመስላል ፣ ተመሳሳይ ነው። ከዚህ በታች እኛ ተለዋዋጭ ድርድር ረድፍ ፒን እና ኮሊፒንስ. // አራት ረድፎች ባይት COLS = 4; // ሶስት ዓምዶች // የቁልፍ ካርታ ቁልፎችን ይግለጹ [ROWS] [COLS] = {{'1', '2', '3', 'A'} ፣ {'4', '5', '6', ' ለ '} ፣ {' 7 '፣' 8 '፣' 9 '፣' C '} ፣ {'*'፣' 0 '፣'#'፣' D '}} ፤ ባይት ረድፍ ፒኖች [ROWS] = {0, 1 ፣ 2 ፣ 3} ፤ // የቁልፍ ሰሌዳ ROW0 ፣ ROW1 ፣ ROW2 እና ROW3 ን ከእነዚህ Arduino pins.byte colPins [COLS] = {4, 5, 6, 7} ጋር ያገናኙ። // የቁልፍ ሰሌዳውን COL0 ፣ COL1 እና COL2 ን ከእነዚህ አርዱዲኖ ፒኖች ጋር ያገናኙ። እኛ የምንጠቀመውን የቁልፍ ሰሌዳ አይነት እና እንዴት እንደተገናኘን ከጠቀስን ፣ ከዚህ በታች ያለውን መስመር በመጠቀም እነዚያን ዝርዝሮች በመጠቀም የቁልፍ ሰሌዳውን መፍጠር እንችላለን ቁልፍ ሰሌዳ kpd = የቁልፍ ሰሌዳ (makeKeymap (ቁልፎች)) ፣ ረድፎች ፒን ፣ ኮሊፒንስ ፣ ረድፎች ፣ ቀለሞች); // የቁልፍ ሰሌዳውን ይፍጠሩ በተመሳሳይ ሁኔታ ኤልዲሲው ከየትኛው የአርዱዲኖ ፒኖች ጋር እንደተገናኘ መናገር አለብን። በእኛ የወረዳ ዲያግራም መሠረት ትርጓሜዎቹ ከዚህ በታች ይሆናሉ intst rs = 8 ፣ en = 9 ፣ d4 = 10 ፣ d5 = 11 ፣ d6 = 12 ፣ d7 = 13; /ኤል.ዲ.ሲ የተገናኘባቸው ፒኖች LiquidCrystal lcd (rs ፣ en ፣ d4 ፣ d5 ፣ d6 ፣ d7); // ኤልሲዲውን ይፍጠሩ በማዋቀር ተግባር ውስጥ እኛ የፕሮጀክቱን ስም ብቻ እናሳያለን እና ከዚያ ዋናው ፕሮጀክት ወደሚገኝበት ዙር እንቀጥላለን። በመሠረቱ ፣ በቁልፍ ሰሌዳው ላይ የሆነ ነገር እየተፃፈ መሆኑን ማረጋገጥ አለብን ፣ ከተየብን ማወቅ አለብን የተተየበው እና ከዚያ “=” ሲጫን ወደ ተለዋዋጭ ይለውጡት ውጤቱን ማስላት እና በመጨረሻም በ LCD ላይ ማሳየት አለብን። ከዚህ በታች እንደሚታየው በሉፕ ተግባር ውስጥ የሚከናወነው በትክክል ነው = kpd.getKey (); // የተጫነ የቁልፍ ዋጋን በካሪፍ ውስጥ (ቁልፍ! = NO_KEY) DetectButtons () ፣ ከሆነ (ውጤት == እውነት) CalculateResult () ፤ DisplayResult () ፤ በእያንዳንዱ ተግባር ውስጥ ምን እንደሚከሰት የአስተያየት መስመሮችን በመጠቀም ተብራርቷል ፣ ከዚህ በታች ባለው ሙሉ ኮድ ውስጥ ይሂዱ ፣ በትክክል እንዴት እንደሚሰራ ለመረዳት ከእሱ ጋር ይራመዱ። በአንድ የተወሰነ መስመር ላይ ጥርጣሬ ካለዎት የአስተያየቱን ክፍል ወይም መድረኮችን ለመጠቀም ነፃነት ይሰማዎ።

ደረጃ 4

ደረጃ 5 - የአርዱዲኖ ካልኩሌተር ሥራ

የአርዱዲኖ ካልኩሌተር ሥራ
የአርዱዲኖ ካልኩሌተር ሥራ

እንደ የወረዳ ዲያግራም ግንኙነቶችን ያድርጉ እና ከዚህ በታች ያለውን ኮድ ይስቀሉ። ስህተትን ካሳየ ከላይ በተሰጠው መመሪያ መሠረት ቤተ -መጽሐፍቱን ማከልዎን ያረጋግጡ። እንዲሁም ችግሩ በሃርድዌርዎ ላይ መሆኑን ለማረጋገጥ ማስመሰልን መሞከር ይችላሉ። ሁሉም ነገር እንደታሰበው ከተሰራ ፣ የእርስዎ ሃርድዌር 4x4 የቁልፍ ሰሌዳ በተግባር ሲታይ ኤልሲዲ ከዚህ በታች እንደዚህ ያለ ይመስላል ፣ እዚህ የተጠቀሙበት የቁልፍ ሰሌዳ በላዩ ላይ ትክክለኛ ምልክቶች ስለሌሉት ፊደሎቹን እንደ ኦፕሬተሮች አድርጌ እገምታለሁ ከዚህ በታች ተዘርዝሯል በቁልፍ ሰሌዳው ላይ ያለው ቁምፊ “ሀ” መደመር (+) “ለ” መቀነስ (-) “ሐ” ማባዛት (*) “ዲ” ክፍል (/) “*” አጽዳ (ሐ) “#” እኩል (=) ይችላሉ እያንዳንዱ አዝራር በትክክል በሚወክለው ላይ ለመፃፍ ምልክት ማድረጊያ ይጠቀሙ። ይህን በማድረግ ፣ የሂሳብ ማሽንን በቀጥታ መጠቀም ይችላሉ። ቁጥሩን ይተይቡ እና በሁለተኛው መስመር ላይ ይታያሉ ኦፔራውን ይጫኑ እና ሁለተኛ ቁጥርዎን ይተይቡ በመጨረሻም ውጤትዎን ለማግኘት “#” ቁልፍን ይጫኑ። እንዲሁም ይህንን የንኪ ማያ ገጽ ላይ የተመሠረተ የአርዱዲኖ ካልኩሌተርን ለመገንባት መሞከር ይችላሉ።

ደረጃ 6 ኮድ

/ * * Arduino Keypad calculator Program */#ያካትታሉ // ለኤልሲዲ የርዕስ ፋይል ከ https://www.arduino.cc/en/Reference/LiquidCrystal#include // የቁልፍ ሰሌዳ የራስጌ ፋይል ከ https://github.com/ ክሪስ-ሀ/የቁልፍ ሰሌዳconst ባይት ረድፎች = 4; // አራት ረድፎች ባይት COLS = 4; // ሶስት አምዶች // የቁልፍ ካርታ ቁልፎቹን ይግለጹ [ROWS] [COLS] = {{'7', '8', '9', 'D'} ፣ {'4', '5', '6', ' C '} ፣ {' 1 '፣' 2 '፣' 3 '፣' B '} ፣ {'*'፣' 0 '፣'#'፣' A '}} ፤ ባይት ረድፍ ፒኖች [ROWS] = {0, 1 ፣ 2 ፣ 3} ፤ // የቁልፍ ሰሌዳ ROW0 ፣ ROW1 ፣ ROW2 እና ROW3 ን ከእነዚህ Arduino pins.byte colPins [COLS] = {4, 5, 6, 7} ጋር ያገናኙ። // የቁልፍ ሰሌዳ COL0 ን ፣ COL1 ን እና COL2 ን ከእነዚህ Arduino pins ጋር ያገናኙ። Keypad kpd = Keypad (makeKeymap (ቁልፎች) ፣ ረድፎች ፒን ፣ ኮሊፒንስ ፣ ረድፎች ፣ COLS); // የቁልፍ ሰሌዳውን int rs = 8 ፣ en = 9 ፣ d4 = 10 ፣ d5 = 11 ፣ d6 = 12 ፣ d7 = 13 ይፍጠሩ። /ኤል.ዲ.ሲ የተገናኘባቸው ፒኖች LiquidCrystal lcd (rs ፣ en ፣ d4 ፣ d5 ፣ d6 ፣ d7); ረጅም ቁጥር 1 ፣ ቁጥር 2 ፣ ቁጥር; የቻር ቁልፍ ፣ እርምጃ; ቡሊያን ውጤት = ሐሰት ፣ ባዶነት ማዋቀር () {lcd.begin (16 ፣ 2) ፤ // እኛ 16*2 LCD ማሳያ lcd.print (“DIY Calculator”) እየተጠቀምን ነው ፤ // የመግቢያ መልእክት lcd.setCursor (0 ፣ 1) ያሳዩ ፤ // ጠቋሚውን ወደ አምድ 0 ፣ መስመር 1 lcd.print (“-CircuitDigest”) ያዘጋጁ ፤ // የመግቢያ መልእክት መዘግየት ያሳዩ (2000); // መረጃን ለማሳየት ማሳያውን ይጠብቁ lcd.clear (); // ከዚያ ያፅዱ} ባዶነት loop () {key = kpd.getKey (); // የተጫነ የቁልፍ ዋጋን በካሪፍ ውስጥ (ቁልፍ! = NO_KEY) DetectButtons () ፣ ከሆነ (ውጤት == እውነት) CalculateResult () ፤ DisplayResult () ፤ } ባዶ DetectButtons () {lcd.clear (); // ከዚያ (ቁልፍ == '*') // ከተሰረዘ አዝራሩ ከተጫነ {Serial.println ("አዝራር ሰርዝ") ፤ ቁጥር = Num1 = Num2 = 0; ውጤት = ሐሰት;} ከሆነ (ቁልፍ == '1') // አዝራር 1 ከተጫነ {Serial.println ("አዝራር 1"); ከሆነ (ቁጥር == 0) ቁጥር = 1; ሌላ ቁጥር = (ቁጥር*10) + 1; // ሁለት ጊዜ ተጭኖ ከሆነ (ቁልፍ == '4') // አዝራር 4 ከተጫነ {Serial.println ("አዝራር 4"); ከሆነ (ቁጥር == 0) ቁጥር = 4; ሌላ ቁጥር = (ቁጥር*10) + 4; // ሁለት ጊዜ ተጭኖ ከሆነ (ቁልፍ == '7') // አዝራር 7 ከተጫነ {Serial.println ("አዝራር 7"); ከሆነ (ቁጥር == 0) ቁጥር = 7; ሌላ ቁጥር = (ቁጥር*10) + 7; // ሁለት ጊዜ ተጭኖ ከሆነ (ቁልፍ == '0') {Serial.println ("አዝራር 0"); // አዝራር 0 ተጭኖ ከሆነ (ቁጥር == 0) ቁጥር = 0; ሌላ ቁጥር = (ቁጥር*10) + 0; // ሁለት ጊዜ ተጭኖ ከሆነ (ቁልፍ == '2') // አዝራር 2 ተጭኗል {Serial.println ("አዝራር 2"); ከሆነ (ቁጥር == 0) ቁጥር = 2; ሌላ ቁጥር = (ቁጥር*10) + 2; // ሁለት ጊዜ ተጭኖ ከሆነ (ቁልፍ == '5') {Serial.println ("አዝራር 5"); ከሆነ (ቁጥር == 0) ቁጥር = 5; ሌላ ቁጥር = (ቁጥር*10) + 5; // ሁለት ጊዜ ተጭኖ ከሆነ (ቁልፍ == '8') {Serial.println ("አዝራር 8"); ከሆነ (ቁጥር == 0) ቁጥር = 8; ሌላ ቁጥር = (ቁጥር*10) + 8; // ሁለት ጊዜ ተጭኖ ከሆነ (ቁልፍ == '#') {Serial.println ("የአዝራር እኩል"); Num2 = ቁጥር; ውጤት = እውነት; } ከሆነ (ቁልፍ == '3') {Serial.println ("አዝራር 3"); ከሆነ (ቁጥር == 0) ቁጥር = 3; ሌላ ቁጥር = (ቁጥር*10) + 3; // ሁለት ጊዜ ተጭኖ ከሆነ (ቁልፍ == '6') {Serial.println ("አዝራር 6"); ከሆነ (ቁጥር == 0) ቁጥር = 6; ሌላ ቁጥር = (ቁጥር*10) + 6; // ሁለት ጊዜ ተጭኖ ከሆነ (ቁልፍ == '9') {Serial.println ("አዝራር 9"); ከሆነ (ቁጥር == 0) ቁጥር = 9; ሌላ ቁጥር = (ቁጥር*10) + 9; // ሁለት ጊዜ ተጭኗል} ከሆነ (ቁልፍ == 'ሀ' || ቁልፍ == 'ለ' || ቁልፍ == 'ሐ' || ቁልፍ == 'መ') // በአምድ 4 ላይ አዝራሮችን መለየት {Num1 = ቁጥር; ቁጥር = 0; ከሆነ (ቁልፍ == 'ሀ') {Serial.println ("መደመር"); እርምጃ = '+';} ከሆነ (ቁልፍ == 'ለ') {Serial.println ("መቀነስ"); እርምጃ = '-'; } ከሆነ (ቁልፍ == 'C') {Serial.println ("ማባዛት"); እርምጃ = '*';} ከሆነ (ቁልፍ == 'D') {Serial.println ("Devesion"); እርምጃ = '/';} መዘግየት (100); }} ባዶ CalculateResult () {ከሆነ (እርምጃ == '+') ቁጥር = Num1+Num2; ከሆነ (እርምጃ == '-') ቁጥር = Num1-Num2; ከሆነ (እርምጃ == '*') ቁጥር = Num1*Num2; ከሆነ (እርምጃ == '/') ቁጥር = Num1/Num2; } ባዶ ማሳያ ማሳያ () {lcd.setCursor (0, 0); // ጠቋሚውን ወደ አምድ 0 ፣ መስመር 1 lcd.print (Num1) ያዘጋጁ ፤ lcd.print (ድርጊት); lcd.print (Num2); ከሆነ (ውጤት == እውነት) {lcd.print ("="); lcd.print (ቁጥር);} // ውጤቱን ያሳዩ lcd.setCursor (0, 1); // ጠቋሚውን ወደ አምድ 0 ፣ መስመር 1 lcd.print (ቁጥር) ያዘጋጁ ፤ // ውጤቱን አሳይ}

የሚመከር: