#include <LiquidCrystal_I2C.h>
#include <mechButton.h>
#include <calculator.h>
#define NUM_DIGITS 16
calculator theCalc;
mechButton btn0(2);
mechButton btnPt(3);
mechButton btnPi(4);
mechButton btnAdd(5);
mechButton btnSub(6);
mechButton btnThree(7);
mechButton btnTwo(8);
mechButton btnOne(9);
mechButton btnMult(10);
mechButton btnSix(11);
mechButton btnFive(12);
mechButton btnFour(13);
mechButton btnDiv(A0);
mechButton btnNine(A1);
mechButton btnEight(A2);
mechButton btnSeven(A3);
mechButton btnEnt(0);
LiquidCrystal_I2C lcd(0x27,NUM_DIGITS,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
int fixVal;
char temp[20];
void setup() {
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.setCursor(2,0);
lcd.print(F("RPN Calc"));
fixVal = 2;
}
void showNum(float inNum) {
dtostrf(inNum,16,fixVal,temp); // Make our float value into a string with "fixVal" decimal.
lcd.setCursor(0,0); // Put the cursor at the top left.
lcd.print(F(" ")); // Blank out tht line.
lcd.setCursor(0,0); // Put the cursor back up there.
lcd.print(temp); // Print out the formatted nunber string.
}
void clearBtn(mechButton* theBtn) {
while (!theBtn->trueFalse()) {
sleep(10);
}
}
bool checkButtons(void) {
if (!btn0.trueFalse()) {
theCalc.buttonClick("0");
clearBtn(&btn0);
return true;
}
if (!btnPt.trueFalse()) {
theCalc.buttonClick(".");
clearBtn(&btnPt);
return true;
}
if (!btnPi.trueFalse()) {
theCalc.buttonClick("PI");
clearBtn(&btnPi);
return true;
}
if (!btnAdd.trueFalse()) {
theCalc.buttonClick("+");
clearBtn(&btnAdd);
return true;
}
if (!btnSub.trueFalse()) {
theCalc.buttonClick("-");
clearBtn(&btnSub);
return true;
}
if (!btnThree.trueFalse()) {
theCalc.buttonClick("3");
clearBtn(&btnThree);
return true;
}
if (!btnTwo.trueFalse()) {
theCalc.buttonClick("2");
clearBtn(&btnTwo);
return true;
}
if (!btnOne.trueFalse()) {
theCalc.buttonClick("1");
clearBtn(&btnOne);
return true;
}
if (!btnMult.trueFalse()) {
theCalc.buttonClick("X");
clearBtn(&btnMult);
return true;
}
if (!btnSix.trueFalse()) {
theCalc.buttonClick("6");
clearBtn(&btnSix);
return true;
}
if (!btnFive.trueFalse()) {
theCalc.buttonClick("5");
clearBtn(&btnFive);
return true;
}
if (!btnFour.trueFalse()) {
theCalc.buttonClick("4");
clearBtn(&btnFour);
return true;
}
if (!btnDiv.trueFalse()) {
theCalc.buttonClick("/");
clearBtn(&btnDiv);
return true;
}
if (!btnNine.trueFalse()) {
theCalc.buttonClick("9");
clearBtn(&btnNine);
return true;
}
if (!btnEight.trueFalse()) {
theCalc.buttonClick("8");
clearBtn(&btnEight);
return true;
}
if (!btnSeven.trueFalse()) {
theCalc.buttonClick("7");
clearBtn(&btnSeven);
return true;
}
if (!btnEnt.trueFalse()) {
theCalc.buttonClick("ENTER");
clearBtn(&btnEnt);
return true;
}
return false;
}
void loop() {
idle();
if (checkButtons()) {
showNum(theCalc.getX());
}
}
Type first value
RPN Calc.
Click ENTER
Second value
Click function.