In dit leuke projectje ga je leren hoe jij je eigen Arduino rekenmachine kan 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 library’s 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.
Bouwen en Bedraden
Programmeren
//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 = ‘ ‘;
}
}