#include <Arduino.h>
#include "Keypad.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
LiquidCrystal_I2C LCD(0x27, A4, A5);
byte rowPins[n] = { 9, 8, 7, 6 };
byte colPins[n] = { 5, 4, 3, 2 };
char Keys[n*n] =
{
'1', '2', '3', 'A',
'4', '5', '6', 'B',
'7', '8', '9', 'C',
'*', '0', '#', 'D'
};
Keypad* key = new Keypad(Keys, colPins, rowPins, n, n);
void display_words(String str1, String str2)
{
interrupts();
LCD.clear();
LCD.setCursor(0, 0);
LCD.print(str1);
LCD.setCursor(0, 1);
LCD.print(str2);
noInterrupts();
}
void display_words_int(int str1, int str2)
{
interrupts();
LCD.clear();
LCD.setCursor(0, 0);
LCD.print(str1);
LCD.setCursor(0, 1);
LCD.print(str2);
noInterrupts();
}
void counter()
{
char symbol = ' ';
display_words("FROM MEM: 1","ENTER: 2");
while(symbol == ' ')
{
symbol = key->getKey();
}
String res;
int first;
if(symbol == '2')
{
display_words("FIRST NUM:", "");
res = "";
symbol = '1';
while(symbol != '*')
{
symbol = key->getKey();
if(symbol >= '0' && symbol <= '9')
{
res += symbol;
display_words("FIRST NUM:", res);
}
}
first = res.toInt();
Serial.println("FIRST NUM: ");
Serial.println(first);
}
else
{
EEPROM.get(0, first);
display_words("FIRST NUM:", String(first));
while(key->getKey() != '*')
{
}
}
symbol = ' ';
display_words("FROM MEM: 1","ENTER: 2");
while(symbol == ' ')
{
symbol = key->getKey();
}
int second_;
if(symbol == '2')
{
display_words("SECOND NUM:", "");
res = "";
symbol = '1';
while(symbol != '*')
{
symbol = key->getKey();
if(symbol >= '0' && symbol <= '9')
{
res += symbol;
display_words("SECOND NUM:", res);
}
}
second_ = res.toInt();
}
else
{
EEPROM.get(0, second_);
display_words("SECOND NUM:", String(second_));
while(key->getKey() != '*')
{
}
}
int res_or = first & second_;
display_words(String(first) + " OR " + String(second_) + " =", String(res_or));
while(key->getKey() != '*')
{
}
display_words("ADD to MEM?", "*-No D-Yes");
symbol = ' ';
while(symbol != 'D' && symbol != '*')
{
symbol = key->getKey();
}
if(symbol == 'D')
{
EEPROM.put(0, res_or);
display_words("SUCCESS!", "PRESS * to EXIT");
while(key->getKey() != '*')
{
}
}
else
{
display_words("NOT SAVED, OK", "PRESS * to EXIT");
while(key->getKey() != '*')
{
}
}
}
void memory()
{
int res;
EEPROM.get(0, res);
display_words(String(res), "PRESS * to EXIT");
while(key->getKey() != '*')
{
}
}
void resetting()
{
int address = 0;
display_words("DELELE MEM?", "*-No D-Yes");
char symbol = ' ';
while(symbol != 'D' && symbol != '*')
{
symbol = key->getKey();
}
if(symbol == 'D')
{
EEPROM.put(0, 0);
}
}
void menu()
{
noInterrupts();
char res = key->getKey();
if(res == 'A')
counter();
else
if(res == 'B')
memory();
else
if(res == 'C')
resetting();
interrupts();
}
void setup() {
LCD.init();
LCD.backlight();
pinMode(2, INPUT_PULLUP);
EEPROM.put(0, 0);
attachInterrupt(digitalPinToInterrupt(2), menu, LOW);
}
void loop()
{
LCD.setCursor(0, 0);
LCD.print("OR: A, MEM:B");
LCD.setCursor(0, 1);
LCD.print("RESET: C");
delay(1000);
LCD.clear();
}