Niveau – gemiddeld
Tijdsduur – 20 / 25 Min
Kosten – €18.85 euro zonder Arduino €42.80 euro met

In dit leuke projectje ga je leren hoe je je eigen Arduino rekenmachine moet maken.

Je kan deze rekenmachine gebruiken voor simpele calculaties. Deze zijn plus, min, keer of gedeeld door. Dus verwacht niet dat je er vergelijkingen mee kan gaan oplossen.

We doen dit met behulp van een 4X4 keypad en een 16X2 LCD beeldscherm. Het beeldscherm sluiten we aan via I2C dus hou er rekening mee dat je extra librarys nodig hebt. Voor de keypad moet je de keypad library importeren meer informatie hierover vind je in het piezo piano project. Voor de I2C librarys vind je de informatie in het I2C LCD project.

Stap 1: Benodigdheden

1X Arduino UNO

12X Jumper wires

1X 4X4 keypad

1X 16X2 LCD

Stap 2: Bouwen en Bedraden

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.

Stap 3: programmeren

Nu je gaat programmeren moet je er rekening mee houden dat je de Wire, Keypad en LiquidCrystal_I2C librarys nodig hebt.

Tijdens het programmeren definiëren we de * en de # als andere symbolen. De * is namelijk de clear functie dus C en de # is het is teken en wordt dan dus gedefinieerd als =.

Zodra alle code erop staat en je kijkt op je Arduino laat het beeldscherm eerst “elektronica voor jou rekenmachine” zien. Daarna wordt het scherm blank en kan je beginnen met calculaties maken.

Voor het geval dat je al op het C teken drukt voordat je een som uitgerekend hebt en je wilt weer verder rekeningen zul je vast merken dat het niet lukt. Het is belangrijk dat je eerst op het = teken drukt als je dit niet doet werkt hij namelijk niet.

//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 = ' ';
  }
}