here's my sketch..
#include <LiquidCrystal.h>
#include <Keypad.h>
#define ledPin 13
char newNum[12]; //stores the number from keypad input
int x=0; //index for newNum array
int setMode = 0; //determines whether write/read state
int switchMode = 0; //determines different panels
int i=0; //Setting the position of lcd cursor
int ledState = 0;
//Keypad
char key;
const byte ROWS = 4;
const byte COLS = 3;
// Define the Keymap
char keys[ROWS][COLS] = {
{'1','2','3',},
{'4','5','6',},
{'7','8','9',},
{'*','0','#',}
};
// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = {24,34,32,28};
byte colPins[COLS] = {26,22,30};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
//LCD
LiquidCrystal lcd(11,10,9,8,7,6,5,4,3,2);
void setup()
{
lcd.begin(16,2);
pinMode(ledPin,OUTPUT);
digitalWrite(ledPin, LOW);
lcd.setCursor(0,0);
lcd.print("Press key 3");
lcd.setCursor(0,1);
lcd.clear();
keypad.addEventListener(keypadEvent); //add an event listener for this keypad
keypad.setHoldTime(1000);
keypad.setDebounceTime(50);
delay(2000);
}
void loop()
{
key = keypad.getKey();
//switch mode:
if (digitalRead(ledPin)==LOW)
{
x=0;
i=0;
switch (key)
{
//Main Panel
case '1':
lcd.clear();
switchMode = 1;
break;
//View contacts
case '2':
lcd.clear();
switchMode = 2;
break;
//Add new contact
case '3':
lcd.clear();
x=0;
for (int i=0; i<=11; i++)
{
newNum[i]='\0';
}
switchMode = 3;
break;
//View recipient's number
case '4':
lcd.clear();
switchMode = 4;
break;
}
switch (switchMode)
{
//Main Panel
case 0:
lcd.setCursor(0,0);
lcd.print("Temperature: ");
lcd.setCursor(0,1);
lcd.print("pH Level: ");
break;
//Main Panel
case 1:
lcd.setCursor(0,0);
lcd.print("Temperature: ");
lcd.setCursor(0,1);
lcd.print("pH Level: ");
break;
//View contacts
case 2:
lcd.setCursor(0,0);
lcd.print("View contacts: ");
lcd.setCursor(0,1);
lcd.print("*-enter/cancel ");
break;
//Add new contact
case 3:
lcd.setCursor(0,0);
lcd.print("Add new number: ");
lcd.setCursor(0,1);
lcd.print("*-enter/cancel ");
break;
//View recipient's number
case 4:
lcd.setCursor(0,0);
lcd.print("View recipients:");
lcd.setCursor(0,1);
lcd.print("*-enter/cancel ");
break;
}
}
//enter certain mode
if (digitalRead(ledPin)==HIGH)
{
switch (switchMode)
{
//mode3: add new contact
case 3:
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Enter number: ");
char key7 = NO_KEY; //this part right here up to the bottom is not working
while (key7!='#' && key7!='*') //since it doesn't read input from the keypad because
{ //if it is, it should be displayed on the LCD.
key7 = keypad.getKey();
if (key7!='#' && key7!='*')
{
newNum[x] = key7;
newNum[x+1]='\0';
x++;
if (i>=11)
i=0;
}
else if (key7=='*')
{
lcd.clear();
switchMode=0;
state();
}
else if (key7=='#')
{
x=0;
i=0;
setMode = 2;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("new num: ");
lcd.setCursor(0,1);
lcd.print(newNum);
}
}
break;
}
}
}
//Input State
if (key=='*' && switchMode!=1 && switchMode!=0)
state();
}
//take care of some special events
void keypadEvent(KeypadEvent eKey)
{
if (digitalRead(ledPin)==HIGH && switchMode==3)
{
switch (keypad.getState()){
case PRESSED:
if (eKey!='#' && eKey!='*')
{
lcd.setCursor(i,1);
lcd.print(eKey);
i++;
}
}
}
}
void state()
{
x=0;
i=0;
ledState = !ledState;
digitalWrite(ledPin,ledState);
}