Compare progmem string

No, the other benefits include potentially easier debugging and simpler function definitions.

I don't know the structure of your menu, but yes, you can put "struct"s into flash memory. If you look at the Playground, you should find some examples, I think.

I will do the search...

Each ítem on my menu have only 4 vars

ID and Position on the menu: I use is position on the array txt: the text displayed action: if is empty I list all the elements on the array that have parent_id equal to actual menu id, if as something I will call the function with that name parent_id: contains the id of is father. with this var I can have a multi-level menu. I first list all the elements that parent_id=0 then I list all the elements that the parent_id= Id of the selected menu, and so on ...

prog_char txt_0[] PROGMEM = "Menu 1"; prog_char parent_id_0[] PROGMEM = "0"; prog_char action_0[] PROGMEM = ""; prog_char txt_1[] PROGMEM = "Menu 1.1"; prog_char parent_id_1[] PROGMEM = "1"; prog_char action_1[] PROGMEM = "Action1.1"; prog_char txt_2[] PROGMEM = "Menu 1.2"; prog_char parent_id_2[] PROGMEM = "1"; prog_char action_2[] PROGMEM = ""; prog_char txt_3[] PROGMEM = "Menu 1.2.1"; prog_char parent_id_3[] PROGMEM = "2"; prog_char action_3[] PROGMEM = "Action1.2.1"; prog_char txt_4[] PROGMEM = "Go Back"; prog_char parent_id_4[] PROGMEM = "2"; prog_char action_4[] PROGMEM = "Back"; prog_char txt_5[] PROGMEM = "Menu 1.3"; prog_char parent_id_5[] PROGMEM = "1"; prog_char action_5[] PROGMEM = "Action1.3"; prog_char txt_6[] PROGMEM = "Go Back"; prog_char parent_id_6[] PROGMEM = "1"; prog_char action_6[] PROGMEM = "Back"; prog_char txt_7[] PROGMEM = "Menu 2"; prog_char parent_id_7[] PROGMEM = "0"; prog_char action_7[] PROGMEM = "Action2"; ...