Számológép házilag

|

Csak néhány kiegészítő hardver és némi kódolás szükséges ahhoz, hogy számológéppé alakítsuk Arduino-mikrovezérlőnket. Cikkünkben bemutatjuk ezen folyamat lépéseit.

Elsőként egy olyan alap számológép prototípusát készítjük el, mely már az Arduino felületén végzi a számításokat, az eredményeket pedig a soros-monitoron jeleníti meg. Ehhez a rendkívül egyszerű program elkészítéséhez nincs is másra szükségünk mint két változóra, ezek legyenek long típusúak és nevezzük el őket szam1 és szam 2 néven, majd a start() függvény meghívása előtt állítsuk nullára az értéküket. Ezeken kívül vegyünk fel még egy karaktereket olvasó változót is a műveleteink kezelésére. A start függvény elé tehát kerüljön a long szam1=0.0; long szam2=0.0; char muvelet; utasítások. Az indításkor lefutó start() függvényben mindössze annyi a teendőnk, hogy megnyitjuk a Serial.begin(9600); parancs segítségével a Soros-monitorunk portját, a kódsor begépelése után pedig át is térhetünk a loop()-ban zajló eseményekre. A while(!Serial.available()); parancs lesz a segítségünkre a beolvasások során, ez az utasítás ugyanis a beviteli mezőt folyamatosan figyeli és csak abban az esetben enged továbblépni, ha adatot olvastunk be. Ezt a parancsot összesen háromszor adjuk meg, majd mindegyik után végrehajtunk egy beolvasást a számok esetén a Serial.parseInt(); , a művelet esetén pedig a Serial.read (); használatával.

Az első érték bekérése tehát a szam1 = Serial.parseInt(); utasítással valósul meg. Ha mindhárom parancsunk a helyére került továbbra is a loop függvényben maradva létrehozunk egy switch elágazást, melynek feltételeként a muvelet értéket adjuk, a belsejében pedig definiáljuk az egyes eseteket. Itt a case opciók segítségével vizsgáljuk a kiadott műveleteket vagyis összeadás esetén a case '+': Serial.println(szam1+szam2); break; utasítással figyelhetjük a beérkező adatokat. Hasonlóan hozzunk létre a többi alapműveletünk vizsgálatát is és már tölthetjük is fel a programunkat az Arduinora, hisz kész is a számológépes szoftverünk. Ez a program pedig kiindulási alapnak tökéletes lesz.

Gombról vezérelve

Eszközünk hardveresen már készen áll a gombok bevetésére így már csak a szoftveres oldalt kell tovább fejlesztenünk. Előző kódunkat alakítsuk át oly módon, hogy a változók deklarálása elé még odabiggyesztjük a szoftverünk alkotása során elengedhetetlen külsős könyvtárakat az include parancs segítségével. Itt elsődlegesen majd a gombsorunk és a kijelzőnk saját extra funkcióit beemelő header-fájlokra lesz szükségünk (include <Keys.h>; include <LiquidCrystal.h>;), majd az LCD csatlakoztatott pinjeit is nevezzük meg (esetünkben a LiquidCrystal lcd(7,8,9,10,11,12); a szükséges utasítás). Ezek után következhet az előző számológépünk három változója, annyi különbséggel, hogy itt még az eredményhez szükségünk lesz egy negyedik, double adatra, valamint a gombok kezeléséhez egy extra char-ra is. Ha végeztünk, jöhet a billentyűk kezelése, a const byte ROWS = 4; és a const byte COLS = 4; értékekkel megadjuk, hogy egy 4x4-es elrendezésű mátrixból érkeznek az értékek, majd konkrétan specifikáljuk is, hogy melyik billentyűhöz, mi is tartozik a char keys[ROWS][COLS] = {{'1','2','3','+'},{'4','5','6','-'},{'7','8','9','*'},{'C','0','=','/'}}; utasítás segítségével. Ezek után a csatlakoztatott Pineket itt is megadjuk akár csak a megjelenítő esetén byte rowPins[ROWS] = {A2,A3,A4,A5}; byte colPins[COLS] = {2,3,4,5}; és definiáljuk magát a billentyűzetet is a Keypad customKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); utasítással.

Haladhatunk is tovább a setup() függvény irányába, ahol a Serial-monitor megnyitását törölhetjük és a helyén a képernyő aktiválását hajthatjuk végre a pinMode(13, OUTPUT); digitalWrite(13, LOW); lcd.begin(16,2); utasítások segítségével. A loop-on belül a muvelet = customKeypad.getKey(); segítségével elkezdjük figyelni a beérkező adatokat, a switch ágat pedig kiegészítjük a számokat tartalmazó case '0' ... '9': lcd.setCursor(0,0); szam1 = szam1 * 10 + (customKey - '0'); lcd.print(szam1); break; sorokkal, majd a loopon kívül elkészítünk egy long MasodikSzam() nevű függvényt, melynek a belsejében a while( 1 ){customKey = customKeypad.getKey(); if(customKey >= '0' && customKey <= '9'){ szam2 = szam2 * 10 + (customKey - '0'); lcd.setCursor(0,2); lcd.print(second); } if(customKey == '=') break;} return szam2; kódot helyezzük el, mely szépen kiolvassa majd a második értékünket, egészen az egyenlőség billentyűnk lenyomásáig. Ha idáig eljutottunk a befejezéshez már csupán arra lesz szükségünk, hogy a műveleteknél összehozzuk a két értékünket és a végeredményt kijelzőnkre is kiirassuk. Ehhez helyezzük az összeadás esetén megjelenő függvénybe az lcd.setCursor(0,1); lcd.print("+"); szam2 = MasodikSzam(); osszeg = szam1 + szam2; lcd.setCursor(0,3); lcd.print(osszeg); utasítást, majd a szam1=0; szam2=0; eredményekkel töröljük az adatokat és a break;-el pedig lépjünk ki a switch-végére, hogy ismét aktív legyen eszközünk. Ezzel pedig az alapok már a rendelkezésünkre állnak, a többi művelet implementálása ugyanis teljesen hasonlóan megvalósítható.

Oldalak: 1 2

Úgy tűnik, AdBlockert használsz, amivel megakadályozod a reklámok megjelenítését. Amennyiben szeretnéd támogatni a munkánkat, kérjük add hozzá az oldalt a kivételek listájához, vagy támogass minket közvetlenül! További információért kattints!

Engedélyezi, hogy a https://www.helloworldonline.hu értesítéseket küldjön Önnek a kiemelt hírekről? Az értesítések bármikor kikapcsolhatók a böngésző beállításaiban.