Hello guys ! I need help with understanding and adding floats to my input .
I trying to make a calculator and using old calculator case and keyboard which i have .
I'm not so experienced in arduino and c++. The knowlege i have is from arduino tutorials I've watched
and the only calculator i can make is from the serial monitor which is easy .
so i bought a compatable with the calculator case display which is i2c oled 0.91 inch display and i remaked the keyboard so i can use the #include <Keypad.h> and it was kind of big success for me then i tried to make something but with no success i mean it displayed the digits from 1 to 9 but that was all so i decided to find any sketch and modify it a bit so it can fit to the thing I want to make.
and found a sketch "arduino calculatro by mission criticall" and modified it a bit and its working .
So i don't know how to make the numbers in input like 1.65, 22.6 etc.
Can anyone help me with this I don't know what to put in the code i mean i have no idea how i can add the " . " to my input number . Thanks in advance !!
I'm using arduino nano
keypad
and i2c oled 0.91 inch
here is the full code
#include <Keypad.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
const byte numRows= 5; //number of rows on the keypad
const byte numCols= 4; //number of columns on the keypad
//keymap defines the key pressed according to the row and columns just as appears on the keypad
char customKey;
double first = 0;
float second = 0;
//long second = 0;
double total = 0;
char Operator;
bool equalPressed=false;
bool showFirst = false;
bool isDecimal1=false;
float decimals1=10.0;
bool isDecimal2=false;
float decimals2=10.0;
char keymap[numRows][numCols]=
{
{'Q','E','%','x'},
{'7','8','9','/' },
{'4','5','6','-'},
{'1','2','3','+'},
{'C','0','.','='},
};
//Code that shows the the keypad connections to the arduino terminals
byte rowPins[numRows] = {2, 3, 4, 5, 6}; //Rows 0 to 3
byte colPins[numCols]= {7, 8, 9, 10}; //Columns 0 to 3
//initializes an instance of the Keypad class
Keypad customKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);
void showSplash() {
String splashString="CUSTOM GREEN LINE";
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.setCursor(64-(splashString.length()*3),0);
display.print(splashString);
display.setTextSize(2);
splashString="commodore";
display.setCursor(64-(splashString.length()*6),16);
display.print(splashString);
display.display();
delay(3000);
}
void setup()
{
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64)
showSplash();
display.print("commodore calculator");
display.setTextSize(2);
display.clearDisplay();
display.display();
}
void loop(){
customKey = customKeypad.getKey();
switch(customKey)
{
case '0' ... '9': // This keeps collecting the first value until a operator is pressed "+-*/"
showFirst=true;
first = first * 10 + (customKey - '0');
showDisplay();
break;
case '+':
showFirst=false;
Operator='+';
showDisplay();
second = SecondNumber(); // get the collected the second number
total = first + second;
showDisplay();
first = total, // reset values back to zero for next use
second = 0;
break;
case '-':
showFirst=false;
Operator='-';
showDisplay();
second = SecondNumber();
total = first - second;
showDisplay();
first = total, second = 0;
break;
case 'x':
showFirst=false;
Operator='x';
showDisplay();
second = SecondNumber();
total = first * second;
showDisplay();
first = total, second = 0;
break;
case '/':
showFirst=false;
Operator='/';
showDisplay();
second = SecondNumber();
second == 0 ? display.print("Invalid") : total = (float)first / (float)second;
showDisplay();
first = total, second = 0;
break;
case 'C':
total = 0;
first=0;
second=0;
Operator='\0';
showFirst=false;
equalPressed=false;
display.clearDisplay();
display.display();
break;
}
}
void showDisplay()
{
display.clearDisplay();
display.setCursor(110,0);
display.print(Operator);
if (showFirst) {
Serial.print(first);
display.println(first);
} else
{
display.print("");
}
if (second>0) {
display.print(second);
} else
{
display.print("");
}
if (equalPressed) {
display.clearDisplay();
display.setCursor(110,0);
display.print(Operator);
display.print(total);
equalPressed=false;
}
display.display();
}
long SecondNumber()
{
while( 1 )
{
customKey = customKeypad.getKey();
if(customKey >= '0' && customKey <= '9')
{
second = second * 10 + (customKey - '0');
showDisplay();
}
if(customKey == '=') {
equalPressed=true;
break; //return second;
}
}
return second;
}