Egg Incubator

and the rest

// rangemax is the number of values in your range, e.g. if you want 0~9, set rangemax to be '10'
// dialpin is the analog pin number connected to the potentiometer to read
int readdial(int rangemax, int dialpin)
{
int kv=0;                                       //used for calculation
int kr=0;                                       //used for calculation
int kb=0;                                       //used for calculation
float a=0;                                      //used for calculation
float rd=0;                                     //used for calculation
rd=1023/rangemax;
kb=analogRead(dialpin);                         // read potentiometer connected to analog pin 1
a=kb/rd;
kr=int(a);
if (kr>rangemax)
{
kr=rangemax;
}
return kr;
}

// display the menu options, selectable by using the knob  
void displaymenu()
{
delay(300);                                     // for debounce
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Turn knob slowly");                  //print msg
lcd.setCursor(0,1);
lcd.print("to select option");
delay(2000);
while (digitalRead(button_menu)==LOW)           //until user presses button stay in this loop
{
if (readdial(7,1)==0) {                         //from readdial, we get 7 menu options
lcd.clear();                                    //option 1
lcd.setCursor(0,0);
lcd.print("Set Temperature");                   
}
else if (readdial(7,1)==1) {                    //option 2
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set Fan RPM");
}
else if (readdial(7,1)==2) {                    //option 3
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set Lamp PWM");
}
else if (readdial(7,1)==3) {                    //option 4
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Calc Average");
lcd.setCursor(0, 1);                    
lcd.print("Temperature?");
}
else if (readdial(7,1)==4) {                    //option 5
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Calc Average");
lcd.setCursor(0, 1);                    
lcd.print("Humidity?");
}
else if (readdial(7,1)==5) {                    //option 6
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set Temperature");
lcd.setCursor(0, 1);                    
lcd.print("Difference");
}
else if (readdial(7,1)==6) {                    //option 7
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" exit menu ");
}
delay(100); // stop screen flicker
}
switch(readdial(7,1))
{
case 0:
set_temp();                                   //call the routine for setting temperature levels 
break;
case 1:
set_rpm();                                    //call the routine for setting fan steps
break;
case 2:
set_step();                                   //call the routine for setting light steps
break;
case 3:
calc_avg_temp();                              //call the routine to calculate average temp
break;
case 4:
calc_avg_hum();                               //call the routine to calculate average humidity
break;
case 5:
set_temp_dif();                               //call the routine for setting temp difference
break;
}
}

//All 7 routines for the menu system
//Setting temperature levels from 35-36 to 44-45 (10 menu options)
void set_temp()
{
  delay(300);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Set Temp. Range");
  while (digitalRead(button_menu)==LOW)
  {
    if      (readdial(10,1)==0)               //from readdial, we get 10 menu options
    {
      new_temp_plus = valplus;                //from 35-36
      new_temp_minus = valminus;
      lcd.setCursor(0, 1);                    
      lcd.print("From ");
      lcd.print(new_temp_minus, 0);
      lcd.print(" to ");
      lcd.print(new_temp_plus, 0);
      delay(100);
    }
    else if (readdial(10,1)==1)                //from 36-37
    {
      new_temp_plus = valplus +1;
      new_temp_minus = valminus + 1;
      lcd.setCursor(0, 1);                    
      lcd.print("From ");
      lcd.print(new_temp_minus, 0);
      lcd.print(" to ");
      lcd.print(new_temp_plus, 0);
      delay(100);
    }
    else if (readdial(10,1)==2)               //from 37-38
    {
      new_temp_plus = valplus + 2;
      new_temp_minus = valminus + 2;
      lcd.setCursor(0, 1);                    
      lcd.print("From ");
      lcd.print(new_temp_minus, 0);
      lcd.print(" to ");
      lcd.print(new_temp_plus, 0);
      delay(100);
    }
    else if (readdial(10,1)==3)               //from 38-39
    {
      new_temp_plus = valplus + 3;
      new_temp_minus = valminus + 3;
      lcd.setCursor(0, 1);                    
      lcd.print("From ");
      lcd.print(new_temp_minus, 0);
      lcd.print(" to ");
      lcd.print(new_temp_plus, 0);
      delay(100);
    }
    else if (readdial(10,1)==4)               //from 39-40
    {
      new_temp_plus = valplus + 4;
      new_temp_minus = valminus + 4;
      lcd.setCursor(0, 1);                    
      lcd.print("From ");
      lcd.print(new_temp_minus, 0);
      lcd.print(" to ");
      lcd.print(new_temp_plus, 0);
      delay(100);
    }
    else if (readdial(10,1)==5)              //from 40-41
    {
      new_temp_plus = valplus + 5;
      new_temp_minus = valminus + 5;
      lcd.setCursor(0, 1);                    
      lcd.print("From ");
      lcd.print(new_temp_minus, 0);
      lcd.print(" to ");
      lcd.print(new_temp_plus, 0);
      delay(100);
    }
    else if (readdial(10,1)==6)              //from 41-42
    {
      new_temp_plus = valplus + 6;
      new_temp_minus = valminus + 6;
      lcd.setCursor(0, 1);                    
      lcd.print("From ");
      lcd.print(new_temp_minus, 0);
      lcd.print(" to ");
      lcd.print(new_temp_plus, 0);
      delay(100);
    }
    else if (readdial(10,1)==7)             //from 42-43
    {
      new_temp_plus = valplus + 7;
      new_temp_minus = valminus + 7;
      lcd.setCursor(0, 1);                    
      lcd.print("From ");
      lcd.print(new_temp_minus, 0);
      lcd.print(" to ");
      lcd.print(new_temp_plus, 0);
      delay(100);
    }
    else if (readdial(10,1)==8)            //from 43-44
    {
      new_temp_plus = valplus + 8;
      new_temp_minus = valminus + 8;
      lcd.setCursor(0, 1);                    
      lcd.print("From ");
      lcd.print(new_temp_minus, 0);
      lcd.print(" to ");
      lcd.print(new_temp_plus, 0);
      delay(100);
    }
    else if (readdial(10,1)==9)           //from 44-45
    {
      new_temp_plus = valplus + 9;
      new_temp_minus = valminus + 9;
      lcd.setCursor(0, 1);                    
      lcd.print("From ");
      lcd.print(new_temp_minus, 0);
      lcd.print(" to ");
      lcd.print(new_temp_plus, 0);
      delay(100);
    }
  }
}

//Seting the difference for temperature levels
//ex. either 37-38 or 37-39
void set_temp_dif()
{
  delay(300);
  lcd.setCursor(0,0);
  lcd.print("Set Temp. Diff.");
  while (digitalRead(button_menu)==LOW)
  {
    if      (readdial(5,1)==0)                //from readdial, we get 5 menu options
    {                                         //1 degree celcius diff
      diff = readdial(5,1);
      lcd.setCursor(0, 1);                    
      lcd.print("One(1)    degree");          
      delay(100);
    }
     else if (readdial(5,1)==1)               //2 degrees celcius diff
    {
      diff = readdial(5,1);
      lcd.setCursor(0, 1);                    
      lcd.print("Two(2)   degrees");
      
      delay(100);
    }
    else if (readdial(5,1)==2)                //3 degrees celcius diff
    {
      diff = readdial(5,1);
      lcd.setCursor(0, 1);                    
      lcd.print("Three(3) degrees");
      delay(100);
    }
    else if (readdial(5,1)==3)                //4 degrees celcius diff
    {
      diff = readdial(5,1);                   
      lcd.setCursor(0, 1);                    
      lcd.print("Four(4)  degrees");
      delay(100);
    }
    else if (readdial(5,1)==4)               //5 degrees celcius diff
    {
      diff = readdial(5,1);
      lcd.setCursor(0, 1);                    
      lcd.print("Five(5)  degrees");
      delay(100);
    }
  }
}