INHOUDSOPGAWE:

Arduino Sakrekenaar: 6 stappe
Arduino Sakrekenaar: 6 stappe

Video: Arduino Sakrekenaar: 6 stappe

Video: Arduino Sakrekenaar: 6 stappe
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, November
Anonim
Arduino sakrekenaar
Arduino sakrekenaar

Programmering is altyd lekker en Arduino is 'n wonderlike platform as u eers met ingebedde programmering begin. In hierdie handleiding bou ons ons eie sakrekenaar met Arduino. Die waardes kan deur 'n klavier (4 × 4 klavier) gestuur word, en die resultaat kan op 'n LCD-skerm (16 × 2 Dot-matriks) besigtig word. Hierdie sakrekenaar kan eenvoudige bewerkings soos optelling, aftrekking, vermenigvuldiging en deling met heelgetalle uitvoer. Maar sodra u die konsep verstaan, kan u selfs wetenskaplike funksies implementeer met die ingeboude funksies van Arduino. Aan die einde van hierdie projek sal u weet hoe u 'n 16x2 LCD en toetsenbord met Arduino kan gebruik, en ook hoe maklik dit is om vir hulle te programmeer met behulp van die maklikste beskikbare biblioteke. U sal ook verstaan hoe u u Arduino kan programmeer om 'n spesifieke taak uit te voer.

Stap 1: Vereiste dinge

Arduino Uno (enige weergawe werk) 16 × 2 LCD -skerm 4 × 4 toetsbord 9V battery broodbord en verbindingsdrade

Stap 2: Kringdiagram

Stroombaandiagram
Stroombaandiagram

Stap 3: Arduino Sakrekenaarprogram

Die volledige Arduino -program vir hierdie projek word aan die einde van hierdie projek gegee. Die kode word in klein, betekenisvolle stukke verdeel en hieronder uiteengesit. Laat ons hulle dus eers by ons Arduino IDE voeg. Die biblioteek vir LCD is standaard reeds by u Arduino ingesluit, sodat ons ons nie daaroor hoef te bekommer nie. Vir die sleutelbordbiblioteek, klik op die skakel om dit van Github af te laai. U kry 'n zip -lêer en voeg hierdie lib by Arduino by Sketch -> Include Library -> Voeg. ZIP -lêer by en wys die plek na die afgelaaide lêer. As ons klaar is, is ons gereed vir programmering. Alhoewel ons 'n biblioteek gebruik het vir die gebruik van 'n bedieningspaneel, moet ons 'n paar besonderhede (hieronder getoon) oor die bedieningspaneel van die Arduino noem. Die veranderlike RYGE en KOLLE sal aandui hoeveel rye en kolomme ons sleutelbord het en die sleutelbord toon die volgorde waarin die sleutels op die sleutelbord voorkom. Die bedieningspaneel wat ek in hierdie projek gebruik, lyk soos volg: die sleutelkaart stel ook dieselfde voor. Verder hieronder het ons genoem na watter penne die sleutelbord gekoppel is met behulp van die veranderlike skikking rowPins en colPins.const byte RYE = 4; // Vier rye konst byte COLS = 4; // Drie kolomme // Definieer die Keymapchar -sleutels [RYE] [COLS] = {{'1', '2', '3', 'A'}, {'4', '5', '6', ' B '}, {' 7 ',' 8 ',' 9 ',' C '}, {'*',' 0 ','#',' D '}}; byte rowPins [ROWS] = {0, 1, 2, 3}; // Koppel die bedieningspaneel ROW0, ROW1, ROW2 en ROW3 aan hierdie Arduino -penne. Byte colPins [COLS] = {4, 5, 6, 7}; // Koppel die bedieningspaneel COL0, COL1 en COL2 aan hierdie Arduino -penne. Sodra ons genoem het watter tipe bedieningspaneel ons gebruik en hoe dit verbind is, kan ons die bedieningspaneel met behulp van die gegewens skep met behulp van die onderstaande lyn Keypad kpd = Toetsenbord (makeKeymap (sleutels)), rowPins, colPins, RYE, COLS); // Skep die sleutelbord Net so moet ons ook vertel aan watter penne van die Arduino die LCD gekoppel is. Volgens ons stroombaandiagram sal die definisies soos volg wees: konst int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Spelde waarmee die LCD gekoppel is LiquidCrystal lcd (rs, en, d4, d5, d6, d7); // skep die LCD Binne die opstelfunksie, vertoon ons net die naam van die projek en gaan dan na die lus waar die hoofprojek lê. Basies moet ons kyk of iets op die bedieningspaneel ingetik word, as ons getik is, moet ons dit herken wat getik word en omskakel dit dan na 'n veranderlike as die "=" ingedruk word, moet ons die resultaat bereken en dit uiteindelik op die LCD vertoon. Dit is presies wat in die lusfunksie gedoen word, soos hieronder getoon = kpd.getKey (); // stoor die gedrukte sleutelwaarde in 'n charif (sleutel! = NO_KEY) DetectButtons (); if (result == true) CalculateResult (); DisplayResult (); Wat binne elke funksie gebeur, word verduidelik met behulp van die kommentaarlyne, gaan deur die volledige kode hieronder, peuter daaroor om te verstaan hoe dit eintlik werk. As u twyfel oor 'n spesifieke reël, kan u die kommentaarafdeling of die forums gebruik.

Stap 4:

Stap 5: Werk van Arduino Sakrekenaar

Werk van Arduino Sakrekenaar
Werk van Arduino Sakrekenaar

Maak die verbindings volgens die stroomdiagram en laai die onderstaande kode op. As dit fout toon, maak seker dat u die biblioteek bygevoeg het volgens die instruksies hierbo. U kan ook die simulasie probeer om te kyk of die probleem met u hardeware is. As alles gedoen word soos dit veronderstel is om te lyk, sal u hardeware hieronder soos volg lyk met die LCD wat hierdie Arduino -sakrekenaar met 4x4 -bedieningspaneel in aksie toon Aangesien die bedieningspaneel wat hier gebruik word, nie die regte merke bevat nie, het ek aangeneem dat die alfabette as operateurs is hieronder gelys Karakter op bedieningspaneel Word veronderstel om "A" optel (+) "B" aftrek (-) "C" vermenigvuldiging (*) "D" afdeling (/) "*" duidelik (C) "#" is gelyk (=) U kan Gebruik 'n merker om te skryf wat elke knoppie eintlik verteenwoordig. Met dit gedoen, kan u die sakrekenaar direk begin gebruik. Tik die nommer en sal op die tweede reël verskyn, druk op die operand en tik u tweede nommer op die "#" -toets om u resultaat te kry. U kan ook probeer om hierdie aanraakskerm -gebaseerde Arduino -sakrekenaar te bou.

Stap 6: Kode

/ * * Arduino -sleutelbordrekenaarprogram */#bevat // Koptekstlêer vir LCD vanaf https://www.arduino.cc/en/Reference/LiquidCrystal#include // Koptekstlêer vir toetsbord vanaf https://github.com/ Chris-A/Keypadconst byte RYDE = 4; // Vier rye konst byte COLS = 4; // Drie kolomme // Definieer die Keymapchar -sleutels [RYE] [COLS] = {{'7', '8', '9', 'D'}, {'4', '5', '6', ' C '}, {' 1 ',' 2 ',' 3 ',' B '}, {'*',' 0 ','#',' A '}}; byte rowPins [ROWS] = {0, 1, 2, 3}; // Koppel die bedieningspaneel ROW0, ROW1, ROW2 en ROW3 aan hierdie Arduino -penne. Byte colPins [COLS] = {4, 5, 6, 7}; // Koppel die sleutelbord COL0, COL1 en COL2 aan hierdie Arduino -penne. Toetsenbord kpd = Toetsenbord (makeKeymap (sleutels), rowPins, colPins, ROWS, COLS); // Skep die sleutelbordkonst int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Spelde waarmee die LCD gekoppel is LiquidCrystal lcd (rs, en, d4, d5, d6, d7); lang Num1, Num2, Getal; char sleutel, aksie; booleaanse resultaat = vals; ongeldige opstelling () {lcd.begin (16, 2); // Ons gebruik 'n 16*2 LCD -skerm lcd.print ("DIY Sakrekenaar"); // Wys 'n intro -boodskap lcd.setCursor (0, 1); // stel die wyser in kolom 0, reël 1 lcd.print ("-CircuitDigest"); // Vertoon 'n intro -boodskap vertraging (2000); // Wag totdat die vertoning inligting vertoon lcd.clear (); // Maak dit dan skoon} void loop () {key = kpd.getKey (); // stoor die gedrukte sleutelwaarde in 'n charif (sleutel! = NO_KEY) DetectButtons (); if (result == true) CalculateResult (); DisplayResult (); } ongeldig DetectButtons () {lcd.clear (); // Maak dit dan skoon as (key == '*') // As die kansellasie -knoppie ingedruk word {Serial.println ("Button Cancel"); Getal = Num1 = Num2 = 0; result = false;} if (key == '1') // As knoppie 1 ingedruk word {Serial.println ("Button 1"); as (Getal == 0) Getal = 1; anders Getal = (Getal*10) + 1; // Twee keer ingedruk} as (sleutel == '4') // As knoppie 4 ingedruk word {Serial.println ("Button 4"); as (Getal == 0) Getal = 4; anders Getal = (Getal*10) + 4; // Twee keer ingedruk} as (sleutel == '7') // As knoppie 7 ingedruk word {Serial.println ("Knoppie 7"); as (Getal == 0) Getal = 7; anders Getal = (Getal*10) + 7; // Twee keer ingedruk} if (key == '0') {Serial.println ("Button 0"); // Knoppie 0 word ingedruk as (Number == 0) Number = 0; anders Getal = (Getal*10) + 0; // Twee keer ingedruk} as (sleutel == '2') // Knoppie 2 word ingedruk {Serial.println ("Knoppie 2"); as (Getal == 0) Getal = 2; anders Getal = (Getal*10) + 2; // Twee keer ingedruk} if (sleutel == '5') {Serial.println ("Knoppie 5"); as (Getal == 0) Getal = 5; anders Getal = (Getal*10) + 5; // Twee keer ingedruk} if (sleutel == '8') {Serial.println ("Knoppie 8"); as (Getal == 0) Getal = 8; anders Getal = (Getal*10) + 8; // Twee keer ingedruk} if (key == '#') {Serial.println ("Button Equal"); Num2 = Getal; resultaat = waar; } if (sleutel == '3') {Serial.println ("Knoppie 3"); as (Getal == 0) Getal = 3; anders Getal = (Getal*10) + 3; // Twee keer ingedruk} if (key == '6') {Serial.println ("Button 6"); as (Getal == 0) Getal = 6; anders Getal = (Getal*10) + 6; // Twee keer ingedruk} if (key == '9') {Serial.println ("Button 9"); as (Getal == 0) Getal = 9; anders Getal = (Getal*10) + 9; // Twee keer ingedruk} as (sleutel == 'A' || sleutel == 'B' || sleutel == 'C' || sleutel == 'D') // Opsporing van knoppies op kolom 4 {Num1 = getal; Getal = 0; if (sleutel == 'A') {Serial.println ("Byvoeging"); action = '+';} if (sleutel == 'B') {Serial.println ("Aftrekking"); aksie = '-'; } if (sleutel == 'C') {Serial.println ("Vermenigvuldiging"); action = '*';} if (key == 'D') {Serial.println ("Devesion"); aksie = '/';} vertraging (100); }} void CalculateResult () {if (action == '+') Number = Num1+Num2; as (aksie == '-') Getal = Num1-Num2; as (aksie == '*') Getal = Num1*Num2; as (aksie == '/') Getal = Num1/Num2; } ongeldig DisplayResult () {lcd.setCursor (0, 0); // stel die wyser in kolom 0, reël 1 lcd.print (Num1); lcd.print (aksie); lcd.print (Num2); as (resultaat == waar) {lcd.print ("="); lcd.print (Number);} // Wys die resultaat lcd.setCursor (0, 1); // stel die wyser in kolom 0, reël 1 lcd.print (nommer); // Wys die resultaat}

Aanbeveel: