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);
}
}
}