Hi all,
I have been at this for a couple of days now and seem stuck. I am trying to create a menu for a PID controller. I am using the Alexander Brevig Menu library. I currently can successfully navigate through menu headings, then into the 1st layer of submenus and another layer of submenus under the 1st layer of submenus.
I want to be able to navigate to "Tuning", press the enter button which takes me into a submenu that consists of "P", "I" and "D". When I press enter on each of those it then takes me into "P +/-" (under P), and the same for I (I+/-) and D (D+/-).
Then, the idea is, if I press the Right button the value of P increments, if I press the Left button the value of P decrements. There are no menu items to the right of "P +/-" so I think this should be possible. I have only written the boolean else if statement for the P+/- so far, to test if it worked (it didn't).
This is the code I am using presently. From the googling I've done I think the else if statement 5 lines from the bottom is correct, but since it is not incrementing or decrementing, maybe it's not.
Any help would be greatly appreciated!
MenuBackend menu = MenuBackend(menuUsed,menuChanged);
//initialize menuitems
MenuItem menu1Item1 = MenuItem("SetPointWhole");
MenuItem menuItem1SubItem1 = MenuItem("190");
MenuItem menuItem1SubItem2 = MenuItem("191");
MenuItem menu1Item2 = MenuItem("SetPointDecimal");
MenuItem menuItem2SubItem1 = MenuItem(".00");
MenuItem menuItem2SubItem2 = MenuItem(".25");
MenuItem menuItem2SubItem3 = MenuItem(".50");
MenuItem menuItem2SubItem4 = MenuItem(".75");
MenuItem menu1Item3 = MenuItem("Temp Scale");
MenuItem menuItem3SubItem1 = MenuItem("Celcius");
MenuItem menuItem3SubItem2 = MenuItem("Fahrenheit");
MenuItem menu1Item4 = MenuItem("Tuning");
MenuItem menuItem4SubItem1 = MenuItem("P");
MenuItem menuItem4SubItem1SubItem1 = ("P +/-");
setup() {
menu.getRoot().add(menu1Item1);
menu1Item1.addRight(menu1Item2).addRight(menu1Item3).addRight(menu1Item4);
menu1Item1.add(menuItem1SubItem1).addRight(menuItem1SubItem2).addRight(menuItem1SubItem3).addRight(menuItem1SubItem4).addRight(menuItem1SubItem5).addRight(menuItem1SubItem6).addRight(menuItem1SubItem7).addRight(menuItem1SubItem8).addRight(menuItem1SubItem9).addRight(menuItem1SubItem10).addRight(menuItem1SubItem11).addRight(menuItem1SubItem12).addRight(menuItem1SubItem13).addRight(menuItem1SubItem14).addRight(menuItem1SubItem15).addRight(menuItem1SubItem16).addRight(menuItem1SubItem17).addRight(menuItem1SubItem18);
menu1Item2.add(menuItem2SubItem1).addRight(menuItem2SubItem2).addRight(menuItem2SubItem3).addRight(menuItem2SubItem4);
menu1Item3.add(menuItem3SubItem1).addRight(menuItem3SubItem2);//.addRight(menuItem3SubItem3).addRight(menuItem3SubItem4).addRight(menuItem3SubItem5).addRight(menuItem3SubItem6).addRight(menuItem3SubItem7).addRight(menuItem3SubItem8).addRight(menuItem3SubItem9).addRight(menuItem3SubItem10);
menu1Item4.add(menuItem4SubItem1).addRight(menuItem4SubItem2).addRight(menuItem4SubItem3);//.addRight(menuItem4SubItem4).addRight(menuItem4SubItem5).addRight(menuItem4SubItem6).addRight(menuItem4SubItem7).addRight(menuItem4SubItem8).addRight(menuItem4SubItem9).addRight(menuItem4SubItem10);
menuItem4SubItem1.addAfter(menuItem4SubItem1SubItem1).addAfter(menuItem4SubItem2SubItem1).addAfter(menuItem4SubItem3SubItem1);
void loop () {
readButtons(); //I split button reading and navigation in two procedures because
navigateMenus(); //in some situations I want to use the button for other purpose (eg. to change some settings)
}
void menuChanged(MenuChangeEvent changed) {
MenuItem newMenuItem = changed.to;
char* newMenuItemName = const_cast<char *>(newMenuItem.getName());
int newSetting = 0;
//get the destination menu
lcd.setCursor(0, 1);
}else if(newMenuItemName == "P"){
lcd.print("P");
lcd.print(" ");
}else if(newMenuItemName == "I"){
lcd.print("I");
lcd.print(" ");
}else if(newMenuItemName == "D"){
lcd.print("D");
lcd.print(" ");
}else if(newMenuItemName == "P +/-"){
lcd.print("P +/-");
lcd.print(" ");
} else if(newMenuItemName == "P +/-" && buttonPinRight == HIGH){ //buttonPinEnter == HIGH){
Kp = Kp ++;
lcd.setCursor(7,1);
lcd.print("P=");
lcd.print(Kp);
}
}
}