Ok leggere le voci lo fa... ma poi quando me le stampa sullo schermo sembra impazzire e mi blocca tutto il sistema...... lo schermo mostra caratteri strani ogni tanto, e sopratutto spegne l'illuminazione dello schermo... insomma qualcosa non va! però i valori li legge 
ho messo dei delay per vedere se risolvevano... ma nulla!
la parte di codice interessate è:
VARIABILI:
// Variabili stato menu
int menu_entries_min = 0; // Prima voce
int menu_entries_max = 8; // Ultima voce
char menu_line_1[15]; // Linea 1
char menu_line_2[15]; // Linea 2
prog_char menu_entries_0[] PROGMEM = "1. Avvio"; // Voce 1
prog_char menu_entries_1[] PROGMEM = "2. Arresto"; // Voce 2
prog_char menu_entries_2[] PROGMEM = "3. Riavvio"; // Voce 3
prog_char menu_entries_3[] PROGMEM = "4. Test"; // Voce 4
prog_char menu_entries_4[] PROGMEM = "5. Debug"; // Voce 5
prog_char menu_entries_5[] PROGMEM = "6. Scritt. LCD"; // Voce 6
prog_char menu_entries_6[] PROGMEM = "7. Standby LCD"; // Voce 7
prog_char menu_entries_7[] PROGMEM = "8. Presenza IN"; // Voce 8
prog_char menu_entries_8[] PROGMEM = "9. Esci"; // Voce 9
// Variabili lettura menu
PROGMEM const char *menu_entries[] = // Tabella
{
menu_entries_0, // Voce 1
menu_entries_1, // Voce 2
menu_entries_2, // Voce 3
menu_entries_3, // Voce 4
menu_entries_4, // Voce 5
menu_entries_5, // Voce 6
menu_entries_6, // Voce 7
menu_entries_7, // Voce 8
menu_entries_8 // Voce 9
};
SCRITTURA:
// Menu (Voci)
void menu_selection_entries(int menu_selection_state) {
// In caso stato scrittura LCD "Attivato"
if (lcd_print_state == true) {
// In caso stato selezione "Prima apertura"
if (menu_selection_state == '=') {
// Impostazione stato menu "Attivato"
menu_state = true;
// Impostazione voce prima riga menu "Prima voce"
menu_selection_1 = menu_entries_min;
// Impostazione voce seconda riga menu "Seconda voce"
menu_selection_2 = menu_entries_min + 1;
}
// In caso stato menu "Attivato"
if (menu_state == true) {
// In caso stato selezione "Prima apertura"
if (menu_selection_1 < menu_entries_min || menu_selection_1 > menu_entries_max) {
// Impostazione voce prima riga menu "Prima voce"
menu_selection_1 = menu_entries_min;
// Impostazione voce seconda riga menu "Seconda voce"
menu_selection_2 = menu_entries_min + 1;
}
// Altrimenti
else {
// In caso stato selezione "Su"
if (menu_selection_state == '-') {
// In caso voce prima riga 1 maggiore rispetto a "Prima voce"
if (menu_selection_1 > menu_entries_min) {
// Diminuzione
menu_selection_1--;
}
// Altrimenti
else {
// Impostazione voce prima riga "Ultima voce"
menu_selection_1 = menu_entries_max;
}
// In caso voce prima riga 1 maggiore rispetto "Prima voce"
if (menu_selection_2 > menu_entries_min) {
// Diminuzione
menu_selection_2--;
}
// Altrimenti
else {
// Impostazione voce seconda riga "Ultima voce"
menu_selection_2 = menu_entries_max;
}
}
// In caso stato selezione "Giu"
if (menu_selection_state == '+') {
// In caso voce prima riga 1 minore rispetto "Ultima voce"
if (menu_selection_1 < menu_entries_max) {
// Aumento
menu_selection_1++;
}
// Altrimenti
else {
// Impostazione voce prima riga "Prima voce"
menu_selection_1 = menu_entries_min;
}
// In caso voce seconda riga 1 minore rispetto "Ultima voce"
if (menu_selection_2 < menu_entries_max) {
// Aumento
menu_selection_2++;
}
// Altrimenti
else {
// Impostazione voce seconda riga "Prima voce"
menu_selection_2 = menu_entries_min;
}
}
}
delay(100);
strcpy_P(menu_line_1,(char*)pgm_read_word(&(menu_entries[menu_selection_1])));
delay(100);
strcpy_P(menu_line_2,(char*)pgm_read_word(&(menu_entries[menu_selection_2])));
delay(100);
// ************** Inizio funzioni LCD **************
// Scrittura testo voci menu (Selezione)
lcd_print(2,0,0,0,0,0,">",NULL,NULL,NULL,true,true,loop_delay);
// Scrittura testo voci menu (Prima riga e Seconda riga)
lcd_print(2,2,3,3,0,0,menu_line_1,NULL,menu_line_2,NULL,true,false,200);
// *************** Fine funzioni LCD ***************
}
}
}