Multiple inputs using keypad

Hi, I'm new to Arduino and I'm trying to use a keypad for user input, where the user can enter the time and temperature. I'm having difficulties in getting the temperature input, I can get the time input but cannot figure out the temperature part. Any help will be highly appreciated. I'm posting my code below. Thanks

void setup() { Serial.begin(9600); sensors.begin();

//setup and turn off both LEDs pinMode(redLED, OUTPUT); pinMode(greenLED, OUTPUT); digitalWrite(redLED, LOW); digitalWrite(greenLED, LOW);

// initialize the button pin as a input: pinMode(buttonPin, INPUT); pinMode(tempPin, INPUT); pinMode(countPin, INPUT);

servoLeft.attach(46); // Set left servo to digital pin 10 servoRight.attach(44); // Set right servo to digital pin 9

lcd.begin(16, 2); selection(); //setup default time to 00:00 showtime[0]='0'; showtime[1]='0'; showtime[2]='0'; showtime[3]='0';

currentTempValue[0]='0'; currentTempValue[1]='0';

}

lcd.clear(); lcd.print("Options"); delay(2000); lcd.setCursor(0,0); lcd.print("1. Set Timer"); lcd.setCursor(0,1); lcd.print("2. Set Temp"); delay(5000); lcd.clear();

} void tempMenu(){ digitalWrite(redLED, HIGH); lcd.print("Temp: "); temp(); }

//Function should show the temperature reading void GetTemp(){ //Function for Getting the Temperature int time; int secs; time = millis();

if (time >= secs){ // 1 second loop secs = time + 1000; sensors.requestTemperatures(); float tempC = sensors.getTempCByIndex(0); float tempF = DallasTemperature::toFahrenheit(tempC); // The Temp in Fahrenheit lcd.print("Temp: F"); lcd.setCursor(6, 0); lcd.print(tempF); delay(500); } } void timeMenu(){ digitalWrite(redLED, HIGH); lcd.print("Time:"); timer(); }

int timer(){ digitalWrite(redLED, LOW); char tempVal[3]; char key1 = keypad.getKey();

//key pressed and state is 1 if (int(key1) != 0 and currentState == 1) {

switch (key1) { case '*': Status(false); showtime[0]='0'; showtime[1]='0'; showtime[2]='0'; showtime[3]='0'; showEnteredTime(); currentState = 1;

num = 0; timerSeconds = 0; break;

case '#': tempVal[0] = showtime[0]; tempVal[1] = showtime[1]; tempVal[2] = 0;

timerSeconds = atol(tempVal) * 60;

tempVal[0] = showtime[2]; tempVal[1] = showtime[3]; tempVal[2] = 0;

timerSeconds = timerSeconds + atol(tempVal); currentState = 2; break;

case 'A': ProjectDisplay(); break;

default: showtime[0] = showtime[1]; showtime[1] = showtime[2]; showtime[2] = showtime[3]; showtime[3] = key1; showEnteredTime(); break; } }

if (currentState == 2) { if (int(key1) != 0) { if (key1 == '*') { Status(false); selection(); showtime[0]='0'; showtime[1]='0'; showtime[2]='0'; showtime[3]='0'; showEnteredTime(); currentState = 1; num = 0; timerSeconds = 0; } } else {

if (num > 9) { num = 0; --timerSeconds; showtimer();

if (timerSeconds == 0) { currentState = 1; Status(false); //servo should be closed servoLeft.write(15); //Valve Closed servoRight.write(75); //Valve Closed lcd.clear(); ProjectDisplay(); } else { Status(true); } }

++num; delay(100); } } }

//temp int temp(){ char tempVal1[2]; char key2 = keypad.getKey();

//key pressed and state is 1 if (int(key2) != 0 and currentState == 1) {

switch (key2) { case '*': Status(false); currentTempValue[0]='0'; currentTempValue[1]='0';

showEnteredTemp(); currentState = 1;

num = 0; tempset = 0; break;

case '#': tempVal1[0] = currentTempValue[0]; tempVal1[1] = currentTempValue[1]; tempVal1[2] = 0;

tempset = atol(tempVal1); currentState = 2; break;

case 'A': ProjectDisplay(); break;

default: currentTempValue[0] = currentTempValue[1]; showtime[1] = currentTempValue[2]; showtime[2] = key2; showEnteredTemp(); break; } }

if (currentState == 2) { if (int(key2) != 0) { if (key2 == '*') { Status(false); selection(); currentTempValue[0]='0'; currentTempValue[1]='0';

showEnteredTemp(); currentState = 1; num = 0; tempset = 0; } } else {

if (num > 9) { num = 0;

//showtimer(); } else { Status(true);

}

++num; delay(100); } } }

void showEnteredTime() { lcd.setCursor(10,0); lcd.print(showtime[0]); lcd.print(showtime[1]); lcd.print(":"); lcd.print(showtime[2]); lcd.print(showtime[3]); }

void showEnteredTemp() { lcd.setCursor(10,1); lcd.print(currentTempValue[0]); lcd.print(currentTempValue[1]); } void showtimer() { lcd.clear(); char timest[6]; lcd.setCursor(0,0); lcd.print("TIME: "); sprintf(timest, "%d:%.2d", (timerSeconds/60), (timerSeconds - ((timerSeconds/60)*60))); lcd.print(timest); } void Status(bool state) { if (state) digitalWrite(greenLED, HIGH); else //servo set angel to zero //The Valve Closes since time is reached digitalWrite(greenLED, LOW); } void selection(){

// read the pushbutton input pin: buttonState = digitalRead(buttonPin); tempState = digitalRead(tempPin);

// compare the buttonState to its previous state if (buttonState != lastButtonState) { // if the state has changed, increment the counter if (buttonState == HIGH) { lcd.clear(); timeMenu(); } }

if (tempState != lasttempState) { // if the state has changed, increment the counter if (tempState == HIGH) { lcd.clear(); tempMenu(); } }

// save the current state as the last state, //for next time through the loop lastButtonState = buttonState; lasttempState = tempState;

}

void loop(){ selection(); timer(); temp(); // sensors.requestTemperatures(); // float tempC = sensors.getTempCByIndex(0); // float tempF = DallasTemperature::toFahrenheit(tempC); // The Temp in Fahrenheit }

Your indenting is atrocious. There is no excuse for that, when Tools + Auto Format would fix that for you.

Your code is NOT properly posted. There is no excuse for that, either.

Thereisnoexcusefornotuseingwhitespacearoundthecurlybraces,either.

  selection();
  timer();
  temp();

These are crappy names. All functions should have a noun and a verb.

When you press a key on the keypad, how is the Arduino supposed to know whether it is to set the time or the temporary? Or is that temperature?