#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1', '4', '7', '.'},
{'2', '5', '8', '0'},
{'3', '6', '9', '='},
{'+', '-', '*', '/'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
long Num1,Num2,Number;
char key,action;
boolean result = false;
void setup() {
Serial.begin(9600);
}
void loop() {
key = kpd.getKey(); // сохраняем нажатую клавишу в переменной символьного типа
if (key!=NO_KEY)
DetectButtons();
if (result==true)
CalculateResult();
}
void DetectButtons()
{
if (key=='.') //если нажата клавиша отмены
{Serial.println ("Button Cancel"); Number=Num1=Num2=0; result=false;}
if (key == '1') //если нажата клавиша 1
{Serial.println ("Button 1");
if (Number==0)
Number=1;
else
Number = (Number*10) + 1; //если она нажата дважды
}
if (key == '4') // если нажата клавиша 4
{Serial.println ("Button 4");
if (Number==0)
Number=4;
else
Number = (Number*10) + 4; // если она нажата дважды
}
if (key == '7') // если нажата клавиша 7
{Serial.println ("Button 7");
if (Number==0)
Number=7;
else
Number = (Number*10) + 7; // если она нажата дважды
}
if (key == '0')
{Serial.println ("Button 0"); // если нажата клавиша 0
if (Number==0)
Number=0;
else
Number = (Number*10) + 0; // если она нажата дважды
}
if (key == '2') // если нажата клавиша 2
{Serial.println ("Button 2");
if (Number==0)
Number=2;
else
Number = (Number*10) + 2; // если она нажата дважды
}
if (key == '5') // если нажата клавиша 5
{Serial.println ("Button 5");
if (Number==0)
Number=5;
else
Number = (Number*10) + 5; // если она нажата дважды
}
if (key == '8') // если нажата клавиша 8
{Serial.println ("Button 8");
if (Number==0)
Number=8;
else
Number = (Number*10) + 8; // если она нажата дважды
}
if (key == '=') // если нажата клавиша равно
{Serial.println ("Button Equal");
Num2=Number;
result = true;
}
if (key == '3') // если нажата клавиша 3
{Serial.println ("Button 3");
if (Number==0)
Number=3;
else
Number = (Number*10) + 3; // если она нажата дважды
}
if (key == '6') // если нажата клавиша 6
{Serial.println ("Button 6");
if (Number==0)
Number=6;
else
Number = (Number*10) + 6; // если она нажата дважды
}
if (key == '9') // если нажата клавиша 9
{Serial.println ("Button 9");
if (Number==0)
Number=9;
else
Number = (Number*10) + 9; // если она нажата дважды
}
if (key == '+' || key == '-' || key == '*' || key == '/') //если нажата одна из клавиш в 4-м столбце
{
Num1 = Number;
Number =0;
if (key == '+')
{Serial.println ("Addition"); action = '+';}
if (key == '-')
{Serial.println ("Subtraction"); action = '-'; }
if (key == '*')
{Serial.println ("Multiplication"); action = '*';}
if (key == '/')
{Serial.println ("Devesion"); action = '/';}
delay(100);
}
}
void CalculateResult()
{
if (action=='+')
Number = Num1+Num2;
if (action=='-')
Number = Num1-Num2;
if (action=='*')
Number = Num1*Num2;
if (action=='/')
Number = Num1/Num2;
Serial.println(Number);
delay(100);
result = false;
}