#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
LiquidCrystal_I2C lcd(0x27,20,4);
int i = 0;
const int ROW_NUM = 4;
const int COLUMN_NUM = 4;
byte pin_rows[ROW_NUM] = {9, 8, 7, 6};
byte pin_column[COLUMN_NUM] = {5, 4, 3, 2};
char keys[ROW_NUM][COLUMN_NUM] = {
{'1','2','3', 'A'},
{'4','5','6', 'B'},
{'7','8','9', 'C'},
{'*','0','#', 'D'}
};
Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
char key;
void setup() {
lcd.init();
lcd.backlight();
lcd.home();
Serial.begin(9600);
}
void loop() {
int num_item;
double *data, *reset;
boolean valid = false;
while(!num_item){
lcd.setCursor(0,0);
lcd.print("Input value of");
lcd.setCursor(0,1);
lcd.print(" items: ");
key = keypad.getKey();
if (key){
if(checkIfNum(key) and key != '0'){
num_item = String(key).toInt();
data = (double *)malloc(num_item);
lcd.clear();
}
else{
validNumber();
}
}
}
for (int i = 0; i < num_item; ++i) {
valid = false;
while(!valid){
lcd.setCursor(0,0);
lcd.print(" No. of input ");
lcd.print(i+1);
lcd.setCursor(0,1);
lcd.print(" out of ");
lcd.print(num_item);
key = keypad.getKey();
if(key){
if(checkIfNum(key)){
int ascii = key;
data[i] = ascii -48;
valid = true;
}
else {
validNumber();
}
}
}
lcd.clear();
}
for (int i = 0; i < num_item; ++i) {
if (*data < *(data + i)){
*data = *(data + i);
}
}
lcd.setCursor(0,0);
lcd.print(" The highest");
lcd.setCursor(0,1);
lcd.print(" value is: ");
lcd.print(*data);
free(data);
delay(5000);
lcd.clear();
}
boolean checkIfNum(char input_char){
if(input_char == 'A' or input_char == 'B' or input_char == 'C' or input_char == 'D' or input_char == '*' or input_char == '#'){
return false;
}
else{
return true;
}
}
void validNumber(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Please input a");
lcd.setCursor(0,1);
lcd.print(" valid number!");
delay(2000);
lcd.clear();
}