Rotary encoder I2C LCD menu
you might want to consider timed routines or interrupts.

For timers https://playground.arduino.cc/Code/Timer1 or similar can help.

When using interrupts be sure to be minimalistic because atmegas do not behave well when interrupts take too long to process.

About menus there are several, most of them dynamic and some requiring user display + nav code.

This open-source menu lib (https://github.com/neu-rah/ArduinoMenu) is static, that is good for bigger projects because it stores a lot on flash.


(-) you can not change menu at runtime (however it support value fields)
(+) requires no user code base
(-) setup involves several parts (inputs/output)
(+) non blocking polled mode. Just call the poll function on your code loop, the menu will just return if it has no input or output 
(+) supports a lot of display devices, including i2c lcd
(+) supports encoder (interrupts (PCINT) or timed driver)
(-) atmega2560 interrupts (PCINT) only on 3 ports, PCINT might require pin mappings (not sure), but if needed the PCINT library examples can print one for you.