webwinkelkeur logo

4.7 avg.

5161+ reviews
webwinkelkeur logoView all

5161+ reviews

5161+ reviews

Order by 16:00 for same day shipping

14 days return

GB

EN

Individual

Business

Arduino Project: Calculator

Intermediate
25 Min
22,76

In this fun project you will learn how to make your own Arduino calculator.

You can use this calculator for simple calculations. These are plus, minus, times or divided by. So don't expect to be able to solve equations with it.

We do this using a 4X4 keypad and a 16X2 LCD display. We connect the display via I2C so keep in mind that you need extra libraries. For the keypad you need to import the keypad library, more information about this can be found in the electronicsforyou.com /arduino-piezo-piano/">piezo piano project. For the I2C libraries you can find the information in the electronicsforyou.com /arduino-project-i2c-lcd/">I2C LCD project.

Building and Wiring

Nu ga je de Arduino rekenmachine bedraden. We beginnen met het beeldscherm. Bij het beeldscherm sluiten we eerst de GND van het beeldscherm op de GND van de Arduino aan, de VCC op de 5V van de Arduino, tot slot de SDA op A4 en SCL op A5. De keypad sluit je op precies dezelfde manier aan als op de fritzing te zien is. Dat houdt in dat als de knoppen naar u toewijzen dat de meest linker pin naar I/O pin 4 moet, de pin rechts daarvan gaat naar I/O pin 5, vervolgens de pin die rechts van deze pin zit naar I/O pin 6 en de pin rechts hiervan naar I/O pin 7. Herhaal dit voor de overige vier pinnen alleen dan op I/O pinnen o t/m 3. Dit houdt in weer van links naar rechts. Het is belangrijk om te weten dat als de keypad niet op de juiste manier werkt er hoogst waarschijnlijk een jumper wire verkeerd is aangesloten. Zodra dat is gelukt heb je alles voor je rekenmachine aangesloten.

Programming

//de librarys die we nodig hebben

#include <Wire.h>

#include <Keypad.h>

#include <LiquidCrystal_I2C>

//keypad definities

const byte ROWS = 4;

const byte COLS = 4;

char keys[ROWS][COLS] = {

  {‘1’, ‘2’, ‘3’, ‘+’},

  {‘4’, ‘5’, ‘6’, ‘-‘},

  {‘7’, ‘8’, ‘9’, ‘*’},

  {‘C’, ‘0’, ‘=’, ‘/’}

};

byte rowPins[ROWS] = {0, 1, 2, 3};

byte colPins[COLS] = {4, 5, 6, 7};

 

Keypad ourKeypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

//lcd initializeren

LiquidCrystal_I2C lcd(0x3F,20,4);

 

//hier zeggen wat deze waardes zijn

boolean eersteNumState = true;

String eersteNum = “”;

String tweedeNum = “”;

float antw = 0.0;

char oper = ‘ ‘;

 

void setup(){

  //hier zetten we het beeldscherm aan

  lcd.begin(16,2);

  lcd.init();

  lcd.init();

  lcd.backlight();

  lcd.setCursor(0,0);

  lcd.print(“Elektronica”);

  lcd.setCursor(0,1);

  lcd.print(“Voor Jou”);

  delay(1500);

  lcd.clear();

  lcd.setCursor(0,0);

  lcd.print(“rekenmachine”);

  delay(1500);

  lcd.clear();

}

void loop(){

  char newKey = ourKeypad.getKey();

  //wat hij moet doen als hij een nummer binnen krijgt

  if(newKey != NO_KEY && (newKey == ‘1’ || newKey == ‘2’ || newKey == ‘3’ || newKey == ‘4’ || newKey == ‘5’ || newKey == ‘6’ || newKey == ‘7’ || newKey == ‘8’ || newKey == ‘9’ || newKey ==’0′)){

    if(eersteNumState == true){

      eersteNum = eersteNum + newKey;

      lcd.print(newKey);

    }else{

      tweedeNum = tweedeNum + newKey;

      lcd.print(newKey);

    }

  }

  //wat hij moet doen als hij een operator binnen krijgt

  if(newKey != NO_KEY && (newKey == ‘+’ || newKey == ‘-‘ || newKey == ‘*’ || newKey == ‘/’)){

    if(eersteNumState == true){

      oper = newKey;

      eersteNumState = false;

      lcd.print(oper);

    }

  }

  //hier zeggen we wat er gebeurt als je

  //op # drukt

  if(newKey != NO_KEY && newKey == ‘=’){

    //wat hij moet doen als je operator

    //+ is

    if(oper == ‘+’){

      antw = eersteNum.toFloat() + tweedeNum.toFloat();

    }

    //wat hij moet doen als je operator

    //- is

    if(oper == ‘-‘){

      antw = eersteNum.toFloat() – tweedeNum.toFloat();

    }

    //wat hij moet doen als je operator

    //* is

    if(oper == ‘*’){

      antw = eersteNum.toFloat() * tweedeNum.toFloat();

    }

    //wat hij moet doen als je operator

    //gedeeld door is

    if(oper == ‘/’){

      antw = eersteNum.toFloat() / tweedeNum.toFloat();

    }

    lcd.setCursor(0,0);

    lcd.print(eersteNum);

    lcd.print(oper);

    lcd.print(tweedeNum);

    lcd.setCursor(0,1);

    lcd.print(“=”);

    lcd.print(antw);

    eersteNumState = true;

  }

  if(newKey != NO_KEY && newKey == ‘C’){

    //hier zeggen we wat er gebeurt als je

    //op * drukt

    lcd.clear();

    lcd.setCursor(0,0);

    eersteNum = “”;

    tweedeNum = “”;

    antw = 0;

    oper = ‘ ‘;

  }

}