Perfect, the BlinkWithoutDelay tutorial put me on the right path, now onto the next issue. 
Pressing the button causes unpredictable results. It seems to be going through the menu, but where it lands is a surprise. Some forum search indicated it might be a button bounce issue. I found this in the tutorials, http://www.arduino.cc/en/Tutorial/Debounce. I am trying to use "1" button to change the menu from Bake, PreHeat and Off. Configuration is Digital port to Ground when button on.
I've tried to implement and it didn't seem to change my results any. So am I having a bounce issue, or did I incorrectly implement debouncing?
// Griddle II Controller
#include <LiquidCrystal.h>
#include <MAX6675.h>
#define buttononePin 1
// Connections:
// rs (LCD pin 4) to Arduino pin 12
// rw (LCD pin 5) to Arduino pin 11
// enable (LCD pin 6) to Arduino pin 10
// LCD pin 15 to Arduino pin 13
// LCD pins d4, d5, d6, d7 to Arduino pins 5, 4, 3, 2
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
int val1 = 1;
int relay = 6; // relay controls heat tubes
int backLight = 13; // pin 13 will control the backlight
int CS = 7; // CS pin on MAX6675
int SO = 8; // SO pin of MAX6675
int SCK = 9; // SCK pin of MAX6675
int units = 1; // Units to readout temp (0 = [ch730]F, 1 = [ch730]C)
float error = 0.0; // Temperature compensation error
float temperature = 0.0; // Temperature output variable
long previousMillis = 0;
long interval = 1500;
long previousMillis2 = 0;
long interval2 = 1500;
long previousMillis3 = 0;
long interval3 = 1500;
long lastDebounceTime = 0; // the last time the output pin was toggled
long debounceDelay = 50; // the debounce time; increase if the output flickers
int buttonState; // the current reading from the input pin
int lastButtonState = HIGH; // the previous reading from the input pin
MAX6675 temp0(CS,SO,SCK,units,error);
void setup()
{
pinMode(buttononePin, INPUT); // declare first button as input
pinMode(backLight, OUTPUT);
pinMode(relay, OUTPUT); // Sets relay pin to Output
digitalWrite(relay, HIGH); // turn heater tubes on for first time.
digitalWrite(backLight, HIGH); // turn backlight on. Replace 'HIGH' with 'LOW' to turn it off.
lcd.begin(20,4); // columns, rows. use 16,2 for a 16x2 LCD, etc.
lcd.clear(); // start with a blank screen
lcd.setCursor(0,0); // set cursor to column 0, row 0 (the first row)
lcd.print("Griddle II"); // change this text to whatever you like. keep it clean.
}
void vacu0(void) {
float sensorValue0 = analogRead(0);
float vacuv0 = sensorValue0*0.0048828/.01882/3.3864;
lcd.setCursor(0,2);
lcd.print("Vacuum 1= ");
lcd.print(vacuv0, 1);
lcd.print(" "); //Keeps screen clean
}
void vacu1(void) {
float sensorValue1 = analogRead(1);
float vacuv1 = sensorValue1*0.0048828/.01882/3.3864;
lcd.setCursor(0,3);
lcd.print("Vacuum 2= ");
lcd.print(vacuv1, 1);
lcd.print(" "); //Keeps screen clean
}
void ttemp(void) {
temperature = temp0.read_temp(10);
float fahrenheit = temperature*9/5+32; // Convert [ch730]C to [ch730]F
lcd.setCursor(0,1);
if(temperature == -1) { // If there is an error with the TC, temperature will be -1
lcd.print("Error!!"); // Temperature is -1 and there is a thermocouple error
} else {
lcd.print("Temp: ");
lcd.print( temperature, 0 ); // Print the temperature [ch730]C, Whole Number
lcd.print("C/");
lcd.print( fahrenheit, 0 ); // Print the temperature [ch730]F, Whole Number
lcd.print("F");
}
}
void PreHeat(void) { //PreHeat Mode
lcd.setCursor(0,0);
lcd.print("PreHeat Mode ");
if (temperature <= 49) {digitalWrite(relay, HIGH);} //Turn on HEAT
if (temperature > 51) {digitalWrite(relay, LOW);} //Turn Off HEAT
}
void Bake(void) { //Bake Mode
lcd.setCursor(0,0);
lcd.print("Bake Mode ");
if (temperature <= 104) {digitalWrite(relay, HIGH);} //Turn on HEAT
if (temperature > 106) {digitalWrite(relay, LOW);} //Turn Off HEAT
}
void Off(void) { //Off Mode
digitalWrite(relay, LOW);
lcd.setCursor(0,0);
lcd.clear();
lcd.print("OFF ");
}
void loop()
{
Off:
unsigned long currentMillis3 = millis();
if(currentMillis3 - previousMillis3 > interval3) {
previousMillis3 = currentMillis3;
Off();
}
val1 = digitalRead(buttononePin); //Get Button Press (Button to ground)
if (val1 != lastButtonState) { //DEBOUNCE
lastDebounceTime = millis(); //DEBOUNCE
}
if ((millis() - lastDebounceTime) > debounceDelay) { //DEBOUNCE
buttonState = val1; //DEBOUNCE
}
if (val1 == LOW) {
lastButtonState = val1; //Save Last button State
goto PreHeat;
}
goto Off;
PreHeat:
unsigned long currentMillis2 = millis();
if(currentMillis2 - previousMillis2 > interval2) {
previousMillis2 = currentMillis2;
ttemp();
vacu0();
vacu1();
PreHeat();
}
val1 = digitalRead(buttononePin); //Get Button Press (Button to ground)
if (val1 != lastButtonState) { //DEBOUNCE
lastDebounceTime = millis(); //DEBOUNCE
}
if ((millis() - lastDebounceTime) > debounceDelay) { //DEBOUNCE
buttonState = val1; //DEBOUNCE
}
if (val1 == LOW) {
lastButtonState = val1; //Save Last button State
goto Bake;
}
goto PreHeat;
Bake:
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
ttemp();
vacu0();
vacu1();
Bake();
}
val1 = digitalRead(buttononePin); //Get Button Press (Button to ground)
if (val1 != lastButtonState) { //DEBOUNCE
lastDebounceTime = millis(); //DEBOUNCE
}
if ((millis() - lastDebounceTime) > debounceDelay) { //DEBOUNCE
buttonState = val1; //DEBOUNCE
}
if (val1 == LOW) {
lastButtonState = val1; //Save Last button State
goto Off;
}
goto Bake;
}