#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
int a = 0;
int b = 0;
int c = 0;
int display = 0;
boolean ADD = false;
boolean SUB = false;
boolean MUX = false;
int next = 0;
const byte ROW_NUM = 4; //four rows
const byte COLUMN_NUM = 4; //four columns
char keys[ROW_NUM][COLUMN_NUM] = {
{'1','2','3', 'A'},
{'4','5','6', 'B'},
{'7','8','9', 'C'},
{'*','0','#', 'D'}
};
byte pin_rows[] = {13, 12, 11, 10};
byte pin_column[] = {9, 8, 7, A2};
Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
void setup()
{
Serial.begin(9600);
lcd.init(); // initialize the lcd
lcd.init();
// Print a message to the LCD.
lcd.backlight();
Serial.println("====== Clavier pret ======");
}
void loop()
{
char key = keypad.getKey();
toucherBouton(key);
}
void toucherBouton(char key)
{
if (key == '1'){ // Bouton S1 enfoncé
num_1();
if(ADD == true && MUX == false){
addition();
}
if(ADD == false && MUX == true){
multiplication();
}
}
if (key == '2'){ // Bouton S2 enfoncé
num_2();
if(ADD == true && MUX == false){
addition();
}
if(ADD == false && MUX == true){
multiplication();
}
}
if (key == '3'){ // Bouton S3 enfoncé
num_3();
if(ADD == true && MUX == false){
addition();
}
if(ADD == false && MUX == true){
multiplication();
}
}
if (key == '4'){ // Bouton S4 enfoncé
num_4();
if(ADD == true && MUX == false){
addition();
}
if(ADD == false && MUX == true){
multiplication();
}
}
if (key == '5'){ // Bouton S5 enfoncé
num_5();
if(ADD == true && MUX == false){
addition();
}
if(ADD == false && MUX == true){
multiplication();
}
}
if (key == '6'){ // Bouton S6 enfoncé
num_6();
if(ADD == true && MUX == false){
addition();
}
if(ADD == false && MUX == true){
multiplication();
}
}
if (key == '7'){ // Bouton S7 enfoncé
num_7();
if(ADD == true && MUX == false){
addition();
}
if(ADD == false && MUX == true){
multiplication();
}
}
if (key == '8'){ // Bouton S8 enfoncé
num_8();
if(ADD == true && MUX == false){
addition();
}
if(ADD == false && MUX == true){
multiplication();
}
}
if (key == '9'){ // Bouton S9 enfoncé
num_9();
if(ADD == true && MUX == false){
addition();
}
if(ADD == false && MUX == true){
multiplication();
}
}
if (key == '0'){ // Bouton S10 enfoncé
num_0();
if(ADD == true && MUX == false){
addition();
}
if(ADD == false && MUX == true){
multiplication();
}
}
if (key == 'A'){ // Bouton S11 enfoncé
if(MUX == false){
add();
ADD = true;
}
}
if (key == 'B'){ // Bouton S12 enfoncé
if(ADD == false){
mux();
MUX = true;
}
}
if (key == 'C'){// Bouton S13 enfoncé
reset_num();
}
}
void num_nothing(){
lcd.clear();
delay(1); // wait for a second
}
void num_0(){
if(display == 0) lcd.print("0");
if(next == 1 && ADD == true || MUX == true) b = 0;
if(next == 0){
a = 0;
display = 1;
}
next = 1;
delay(1); // wait for a second
}
void num_1(){
if(display == 0) lcd.print("1");
if(next == 1 && ADD == true || MUX == true) b = 1;
if(next == 0){
a = 1;
display = 1;
}
next = 1;
delay(1);
}
void num_2(){
if(display == 0) lcd.print("2");
if(next == 1 && ADD == true || MUX == true) b = 2;
if(next == 0){
a = 2;
display = 1;
}
next = 1;
delay(1); // wait for a second
}
void num_3(){
if(display == 0) lcd.print("3");
if(next == 1 && ADD == true || MUX == true) b = 3;
if(next == 0){
a = 3;
display = 1;
}
next = 1;
delay(1); // wait for a second
}
void num_4(){
if(display == 0) lcd.print("4");
if(next == 1 && ADD == true || MUX == true) b = 4;
if(next == 0){
a = 4;
display = 1;
}
next = 1;
delay(1); // wait for a second
}
void num_5(){
if(display == 0) lcd.print("5");
if(next == 1 && ADD == true || MUX == true) b = 5;
if(next == 0){
a = 5;
display = 1;
}
next = 1;
delay(1); // wait for a second
}
void num_6(){
if(display == 0) lcd.print("6");
if(next == 1 && ADD == true || MUX == true) b = 6;
if(next == 0){
a = 6;
display = 1;
}
next = 1;
delay(1);
}
void num_7(){
if(display == 0) lcd.print("7");
if(next == 1 && ADD == true || MUX == true) b = 7;
if(next == 0){
a = 7;
display = 1;
}
next = 1;
delay(1); // wait for a second
}
void num_8(){
if(display == 0) lcd.print("8");
if(next == 1 && ADD == true || MUX == true) b = 8;
if(next == 0){
a = 8;
display = 1;
}
next = 1;
delay(1); // wait for a second
}
void num_9(){
if(display == 0) lcd.print("9");
if(next == 1 && ADD == true || MUX == true) b = 9;
if(next == 0){
a = 9;
display = 1;
}
next = 1;
delay(1); // wait for a second
}
void add(){
lcd.print(" + ");
display = 0;
delay(1); // wait for a second
}
void mux(){
lcd.print(" x ");
display = 0;
delay(1); // wait for a second
}
void reset_num(){
a = 0;
b = 0;
c = 0;
display = 0;
next = 0;
ADD = false;
MUX = false;
num_nothing();
}
void addition(){
c = a + b;
lcd.print(" = ");
lcd.print(c);
next = 0;
delay(3000);
reset_num();
}
void multiplication(){
c = a * b;
lcd.print(" = ");
lcd.print(c);
next = 0;
delay(3000);
reset_num();
}